コンテンツにスキップ

tmux で AI エージェントを動かす

AI エージェントに任せる作業は、数十分から数時間かかることがあります。その間にターミナルを閉じたり、SSH の接続が切れたりすると、エージェントも一緒に終わってしまいます。tmux のセッションの中で動かせば、ターミナルを閉じてもエージェントは動き続け、あとから同じ画面に戻れます。

このページでは、tmux で Claude Code などの AI エージェントを動かす基本と、外から様子を見たり指示を送ったりするときの注意、tako で tmux を使う方法をまとめます。

tmux は、ターミナルの画面(セッション)をターミナルのアプリとは別のプロセスで持っておくツールです。ターミナルのウィンドウは「画面をのぞく窓」になり、窓を閉じてもセッションの中のプロセスは止まりません。

  • ターミナルのウィンドウを閉じても、エージェントの作業が続く
  • SSH 先のサーバーで動かしているエージェントが、回線が切れても止まらない
  • セッションに名前が付くので、「api 担当」「docs 担当」のように複数のエージェントを呼び分けられる

tmux は macOS なら brew install tmux で入ります。

基本: セッションを作って AI を起動する

Section titled “基本: セッションを作って AI を起動する”

エージェント 1 体につきセッションを 1 つ作り、作業ディレクトリで起動します。

Terminal window
tmux new -s api -c ~/work/api # 「api」という名前のセッションを作って入る
claude # セッションの中で起動する

作業を任せたら、Ctrl+b を押してから d で抜けます(デタッチ)。エージェントは裏で動き続けます。

Terminal window
tmux ls # 動いているセッションの一覧
tmux attach -t api # 画面に戻る
tmux kill-session -t api # 作業が終わったら片付ける

tmux new -d -s api -c ~/work/api claude のように、コマンドを直接渡して裏で起動することもできます。ただしこの形だと、エージェントが終了した時点でセッションも閉じ、最後の画面は残りません。終わったあとの画面も読みたいなら、上のようにシェルの中から起動します。

同じリポジトリで複数のエージェントを動かすなら、git worktree で作業ディレクトリを分けておくと、同じファイルを取り合いません(Claude Code を複数同時に動かす)。

いちいち attach しなくても、今の画面をテキストで取り出せます。止まっていないか、確認を求めていないかを見るのに便利です。

Terminal window
tmux capture-pane -p -t api # 今見えている画面
tmux capture-pane -p -t api -S -200 # 200 行前までさかのぼる

send-keys で、セッションに文字を打ち込めます。

Terminal window
tmux send-keys -t api 'テストを実行して、落ちたものを直してください'
tmux send-keys -t api Enter

AI エージェントの入力欄は、素早く届いた文字の並びを「貼り付け」として受け取ることがあり、そのとき文字は入力欄に入ったまま Enter が送信として効かないことがあります。文字と Enter は別々に送り、capture-pane で入力欄が空になったか(送信されたか)を確かめてから次へ進むのが確実です。tako も、master から worker へ指示を送るときは「貼り付け → Enter → 入力欄が空になったかの確認 → 残っていれば Enter を再送」という手順を踏んでいます。

エージェントが実行の許可や方針の確認を求めて止まっているときは、画面に選択肢が出ています。capture-pane で内容を読み、何に答えるのかを確かめてから送ってください。

tako は、tmux が入っていればすべてのペインを自動で tmux セッションの上で動かします。tmux のコマンドを打たなくても、tako を閉じても実行中のプロセスは生き続け、次に起動したときにタブ・ペイン・画面の内容がそのまま戻ります。仕組みは tmux バックエンドを参照してください。

自分で作った tmux セッションを取り込む

Section titled “自分で作った tmux セッションを取り込む”

上の手順で作ったセッションも、tako のペインとして開けます。

Terminal window
tako tmux list # tmux のセッション一覧(tako のペインとの対応付き)
tako tmux open api --right # 「api」セッションを、今のタブの右側のペインに取り込む

tako の中で起動した AI エージェントは、tmux のコマンドを組み立てなくても、内蔵の MCP ツールで隣のペインを扱えます。画面を読むのは tako_read_pane、入力を送るのは tako_send_input(全画面の TUI へは送達を確かめながら送ります)、tmux セッションの一覧と取り込みは tako_tmux_list / tako_tmux_open です。一覧は MCP ツール一覧にあります。

tako が作ったセッションのうち、どのペインにもつながらずに残ったもの(orphan)は、fleet ビュー(tako panel --show --view fleet)で見つけられ、次のコマンドでまとめて片付けられます。使用中のセッションと、自分で作ったセッションには触れません。自分で作ったセッションは tmux kill-session -t <名前> で閉じてください。

Terminal window
tako tmux cleanup

使えます。tmux が無い環境では、tako はペインを tmux を通さずに直接起動します。その場合、tako を閉じるとプロセスも終わり、再起動後に戻るのはタブの構成と作業ディレクトリまでです。スマホからのリモートアクセスと、tako master の worker の管理には tmux が必要です。

Windows の tako は、tmux の代わりに psmux(winget install marlocarlo.psmux)で同じ永続化を行います。ただし、既存のセッションの取り込み(tako tmux open)のように attach を前提にする操作は、Windows ではまだ使えません。対応の詳細は Windows 対応状況を参照してください。

SSH 先のサーバーで AI エージェントを動かすときも tmux を使うべき?

Section titled “SSH 先のサーバーで AI エージェントを動かすときも tmux を使うべき?”

使うのがおすすめです。SSH の接続が切れると、その接続の中で起動したプロセスは通常一緒に終わります。サーバー側で tmux のセッションを作ってからエージェントを起動しておけば、接続し直して tmux attach で続きを見られます。