← ishizakahiroshi.com
デバッグ 2026-09-01

Grok Bot のサンドボックス内でしか再現しないバグを、手元から詰める。Tailscale SSH を通すまで人力の伝書鳩をしていた話

淡い寒色の机に向かい合う 2 台のノートパソコン。その間を紙のメモが漂い、片側から 1 本の青い光の線がまっすぐ伸びて直接つながろうとしている編集イラスト

バグが出たのは Grok Bot が持っているクラウド PC の中でした。入口は Grok Bot のクライアント経由だけで、SSH も RDP も無い。手元からはログもプロセスも見えないので、2 つの AI の間で人間がテキストを運ぶことになりました。生ログが取れるまで出てきたのは推論だけで、前回の記事に書いた原因も誤りでした。Tailscale SSH を通して伝書鳩をやめるまでの記録です。

Qiita で読む → note で読む → YouTube で聴く →

この記事のテーマ

AI エージェントが自分専用のマシンを 1 台持つ形が出てきました。Grok Bot もその 1 つで、常駐エージェントに Debian のクラウド PC が丸ごと付いてきます。便利な反面、その中で不具合が起きたときに こちらから手が届かない という新しい不便もセットで付いてきます。

今回はまさにそれを踏みました。自作の many-ai-cli をその箱へ入れたところ、Claude Code のペインだけ画面が真っ黒。Codex と Grok は同じ画面で動いています。ところが入口は Grok Bot のクライアント経由だけで、手元の開発環境からはファイルもプロセスも見えません。その中を調べられるのは Grok Bot だけでした。

Grok Bot の構造(永続サンドボックス・AI の手と人間の手・Debian 13 / 8 コア / 16GB / 128GB)と、その中で他社 AI の CLI を動かし Tailscale で人力伝書鳩から脱却するまでをまとめたインフォグラフィック

AI が持つ箱の構造と、そこへ他社の CLI を入れて動かすまでの全体像。

人が間で手紙を運んでいた

手元の Claude Code が調査手順をテキストで出し、人間がコピーして Grok Bot へ貼る。Grok Bot が実行して結果を返し、人間がコピーして戻す。1 往復あたり人のコピペが 2 回で、運んでいる中身はファイル一覧とログの先頭だけでした。

tailscale ping は通るのに 22 番がタイムアウトしていた 2 つの原因と、ACL に足した 2 つのルールを並べた比較図

tailnet に載っていることと、パケットが通ることは別。詰まっていたのはノード側の設定と ACL の 2 か所。

生ログが 1 本取れた時点で、話が一変した

前回の記事では原因を「Claude Code が端末へ送るカーソル位置の問い合わせに誰も応答していないから固まっている」と書きました。これは誤りでした。 ログの保存を有効にして取り直したところ、Claude は固まっておらず、起動画面を最後まで描き切っていました。

真因は自分のコードでした。表示側のフィルタが、行頭へ戻る命令の後ろへ「行末まで消す」を無条件に挿していたのです。Claude Code は 1 行描いて行頭へ戻り、1 つ下へ移動して次を描くので、挿入した消去命令が描いたばかりの行を毎回消していました。

PTY の出力がフィルタを 5 段通って xterm.js へ届く経路と、最後の段で行末消去が挿入されていたことを示す図

出力はある。画面だけが空。疑う先が AI 側から自分の表示経路へ移った。

実 PTY ログを 173x22 で再生し、素の出力 674 文字が表示経路を通すと 73 文字まで落ちることを示した実測の表

素の出力 674 文字が、表示経路を通ると 73 文字。Windows で出なかったのは単独 CR が 0 個だったから。

持ち帰ったこと

生ログが無いところから出てくるのは推論であって観測ではありません。しかも推論は筋が通っているぶん納得してしまいます。前回は納得して記事にまで書きました。エージェント側のサンドボックスへ手元から入る道を 1 本通しておくこと。それが今回いちばん効きました。

この記事で紹介しているツール

複数の AI コーディング CLI を並列で走らせ、承認をブラウザ 1 タブに集約するローカルダッシュボード many-ai-cli を作っています。リポジトリは GitHub にあります。