Claude Code を複数プロジェクトで並行して動かしていると、「今どのプロジェクトがどんな状態か」が分からなくなります。この悩みを解決するために、状態を横断的に見渡せる CLI ダッシュボード Monomi を先日公開しました。
ただ、実際に使い始めてすぐ次の壁にぶつかりました。ダッシュボードで「承認待ち」のプロジェクトを見つけても、そのセッションがどのターミナルタブで動いているのか分からないんです。結局開いているタブを1つずつ確認する羽目になり、「状態は見えるようになったのに、たどり着けない」という新しい面倒が生まれました。
今回は、この「で、どこ?」を解決するために追加した Terminal Focus 機能について書きます。
fキーを押すだけで切り替わる
まず動いているところを見てください。
右側がMonomi画面で、f キーを押すと、選択中のセッションが動いているターミナルウィンドウが切り替わります。
これだけです。今まで自分でタブを探していたのが、1キーで済むようになりました。
ターミナルタブ、何個開いてますか
Claude Code を複数プロジェクトで並行運用していると、こんな状況によくなります。
- 手元のマシンだけでもターミナルのタブが5個以上開いている
- tmux のセッションもいくつか裏で動いている
- さらに、常時稼働の別マシン(Mac mini など)でも別のプロジェクトが動いている
Monomi のダッシュボードを開けば、「このプロジェクトが承認待ち」というのはすぐ分かります。
でも、いざ承認しようとして気づきます。
「これ、どのタブだっけ」
手元のマシンだけでも、開いているタブを1つずつ切り替えて確認していく。tmux のセッションなら tmux attach して Ctrl+b, w でウィンドウ一覧を見る。そのプロジェクトが別マシン側で動いている場合は、そもそもタブを探す以前に、今どちらのマシンの前に座るべきかから考える必要がある。
状態が見えるようになったのに、そこにたどり着くまでのコストは変わっていませんでした。
f を押すだけで、そのターミナルに切り替わる
Monomi の一覧または詳細画面でセッションを選択した状態で f を押すと、そのセッションが動いているターミナルウィンドウが前面に来ます。
-
j/kまたは↑/↓でセッションを選択 -
fで該当ターミナルにフォーカス
これだけです。今のマシンで動いているセッションなら、Monomi のダッシュボード上で選んで f を押すだけで、そのウィンドウにたどり着けます。
ただし、フォーカスできるのは同じマシン上で動いているセッションだけです。別マシンのセッションを選んで f を押した場合は、その旨のメッセージが表示され、何も起きません(状態の確認自体はマシンをまたいでできますが、そこから直接ジャンプすることはできない、という制約です)。
対応しているターミナルは Terminal.app、Ghostty、tmux、WezTerm です。動作確認環境は基本的に macOS ですが、WezTerm だけは Windows(WSL2)側でも動作します。
ターミナルごとに、フォーカスのやり方が全然違った
f を押すだけ、と書きましたが、実装の中身はターミナルアプリごとにバラバラです。
Terminal.app / Ghostty
ウィンドウ・タブの制御に近い形でフォーカスできます。ただし Ghostty は、動的なターミナルタイトルを利用してセッションを識別する仕組み上、~/.claude/settings.json に環境変数を1行追加してもらう必要があります。これは自動設定にしませんでした。タイトル操作をグローバルに無効化する設定のため、他のセッションにも影響が及ぶ可能性があり、勝手に書き換えるべきではないと判断したためです。
tmux
セッション名からペインを特定してアタッチする形です。ただし tmux がデタッチされていると、そもそもフォーカスしようがないので、その場合は「セッションが到達できません」というメッセージを出すだけにしています。
WezTerm
macOS では WezTerm 公式の CLI(wezterm cli activate-pane)でペイン単位のフォーカスができます。ただ、ペインを前面に持ってくるところまでは CLI で完結せず、そのあとアプリ自体をアクティブにする一手間が別途必要でした。
面白かったのは WSL2 対応です。WezTerm は Windows 側で $WEZTERM_PANE という環境変数をセットするのですが、WSL2 の interop 層はこの変数を自動では Linux 側に渡してくれません。WSLENV という別の環境変数に明示的に列挙しないと、WSL2 側の Claude Code セッションから自分がどのペインにいるかを知る手段がない、という制約に途中で気づきました。
さらに、Monomi 自身と対象セッションの両方が WezTerm のペインとして開かれていないと、wezterm.exe cli activate-pane が WezTerm の mux ソケットに接続できず失敗するケースがあることも分かりました(WezTerm 側の既知の制限です)。この場合は Windows Terminal を前面に出すフォールバック動作にしていますが、そもそも Windows Terminal を使っていない場合は何も起きません。
「同じ機能」でも、ターミナルごとにここまでアプローチが違うとは思っていませんでした。
おわりに
状態を横断で見られるだけでは足りなくて、そこから実際のアクションに繋がって初めて「使えるツール」になるんだな、というのが今回の学びでした。
Monomi は現在 v0.4 です。
まだ荒削りなところもありますが、Claude Code を複数プロジェクト・複数端末で並行運用している人に向いているツールになったかと思います。
試してもらえたら、うれしいです。
- npm: monomi-cli
- GitHub: sumihiro3/Monomi
不具合や要望は GitHub Issues で、ちょっとした感想やフィードバックは Google Form でも受け付けています。
- Google Form: 「Monomi」フィードバックフォーム
