EN JA
無料ダウンロード

Claude Code のための実践 tmux ワークフロー

更新日: 2026年8月27日

tmux と Claude Code は驚くほど相性が良い組み合わせです。長時間走るエージェントのターンには 切断に耐えるターミナルが欲しく、並列セッションには名前のついた安定した居場所が欲しい。 このガイドは、エージェント作業のための最小限の tmux セットアップです — 4 セッションを 管理可能に保つ命名・レイアウト・監視の習慣と、tmux 単体では分からないことの正直な整理まで。

なぜエージェントセッションに tmux か

レイアウト: 1 セッション 1 ウィンドウ

最もスケールする構成は退屈なものです: Claude Code セッションごとに 1 つの tmux ウィンドウをタスク名で作り、マシンまたはプロジェクト単位の 1 つの tmux セッションに まとめる。

# タスクごとにウィンドウを作る。ステータスバーがタスク一覧として読めるよう名前を付ける
tmux new-window -n fix-auth   -c ~/code/myapp-fix-auth
tmux new-window -n onboarding -c ~/code/myapp-new-onboarding

# それぞれで claude を起動(スクリプト化も可):
tmux send-keys -t fix-auth 'claude' Enter

セッション本体にはペインよりウィンドウを使います。ペイン分割は各セッションの出力を画面の 数分の一に押し込みますが、Claude Code のプロンプト・diff・プラン出力は全幅を使いたい。 ペインが活きるのはタスクの内側です: ウィンドウを分割して、片側にセッション、 もう片側に手動テスト用のシェルを置く(tmux split-window -h)。

効果の大半は 2 つの習慣から来ます。タスクが変わったらウィンドウ名を変えること (tmux rename-window review-pr)— zshzshzsh が並ぶステータスバーは何も教えてくれません。そしてウィンドウを worktree 単位にしているなら (その構成は git worktree ガイドで扱っています)、 worktree のディレクトリ名をそのままウィンドウ名にして、すべての一覧の表記を一致させることです。

リモートマシン: tmux が本領を発揮する場所

リモートマシンで素の SSH のまま Claude Code を動かすと、接続が 1 回切れただけでタスクの途中で セッションが死にます。tmux の中なら、セッションは走り続けます。再接続して、離席中に何が 起きたかをスクロールバックで確認するだけです:

ssh devbox
tmux new -A -s agents   # あれば attach、なければ作成
# ... 名前付きウィンドウで claude セッションを起動 ...
# 接続断・ノート PC のスリープ、何が起きても —
ssh devbox
tmux attach -t agents   # 全部動き続けている

new -A はこのコマンドを冪等にします — 初回接続でも再接続でも同じ 1 行で済むため、 SSH のエイリアスに向いています。

tmux が教えてくれること・くれないこと

ウィンドウが複数走り出すと、問題は「どれが自分を必要としているか」になります。 tmux には組み込みのシグナルが 2 つありますが、どちらも見た目より弱い:

# 新しい出力のあったウィンドウに印を付ける(ステータスバーに # が付く)
setw -g monitor-activity on
set  -g visual-activity  off   # 印だけ。メッセージポップアップは出さない

# あるいはターミナルベルで強調する
setw -g monitor-bell on

monitor-activityあらゆる出力で発火します — 進行中のスピナーも カウントされるため、動いているエージェント相手ではほぼノイズです。ベルはそれより近い: Claude Code は完了時や注意が必要なときにターミナルベルを鳴らせて(/config 参照)、 tmux がそのウィンドウに印を付けます。しかしステータスバーの印が言えるのは 「何かが起きた」まで。許可プロンプトでブロックしているのか、プラン承認待ちなのか、 質問しているのか — それとも単に終わったのか、は分かりません。結局ウィンドウを切り替えて 確かめることになります。

アクティビティの印ではなく、本当の状態を

プッシュ型のシグナルには Claude Code の hooks が使えます。 ライフサイクルイベント — Notification(Claude が入力を必要としている)と Stop(Claude が完了した)— で発火し、どの tmux ウィンドウが表示されていようと 本物の macOS 通知を出せます。そして集約ビューの ために作ったのが AgentManager です。macOS のメニューバーアプリで、 全 Claude Code セッション — tmux の全ウィンドウ含む — をステータスランプつきの行として表示します: 入力待ち、 実行中、 完了、 アイドル。 入力待ちの行にはどんな種類の回答が必要か — yes/no の承認、プランレビュー、選択式の質問 — が表示されます。正直な注記を 1 つ: 行クリックでのジャンプ(iTerm2・Terminal.app・Ghostty・ VS Code 系エディタでは該当ペインへ直接切り替わります)は、tmux ペインには現状非対応です。 tmux のセッションも検出・追跡はされますが、切り替えは tmux 自身のキー操作で行います。 違いは、「どのウィンドウが・なぜ自分を待っているか」を分かった上で切り替えられることです。 入力待ちが発生するとフローティングウィンドウが自動で現れ、全て解消すると引っ込むので、 ステータスバーの印はオプションになります。

エージェント向け最小 .tmux.conf

# ~/.tmux.conf — エージェント作業に関係する部分だけ
set  -g history-limit 100000     # エージェントのターンは大量のスクロールバックを生む
setw -g monitor-bell on          # ベルの鳴ったウィンドウに印
set  -g visual-activity off      # ポップアップなし。印はステータスバーだけ
set  -g renumber-windows on      # 閉じたウィンドウの番号に穴を残さない
setw -g automatic-rename off     # 付けたタスク名を勝手にリネームさせない

凝ったものは何もありません — 要点は、エージェントの作業を後から確認できる深さの スクロールバックと、自分で付けた名前のまま維持されるウィンドウ名です。

どのウィンドウがあなたを待っているか

AgentManager は tmux のウィンドウ・ペイン・普通のターミナルタブを横断して、全 Claude Code セッションにステータスランプを付け、あなたを待っているセッションを浮かび上がらせます。 ウィンドウを巡回して確かめる作業はもう不要です。無料で使えます。アカウント不要。

macOS 13+ — 無料プランは同時 2 セッションまで表示