🤖

AI エージェントの並列実行を効率化するターミナル環境の紹介

に公開

この記事は Applibot Advent Calendar 2025 の 21 日目の記事です。

はじめに

普段 vim で Go をよく書いているひぐちゆうや(@y_uucu)です。

AI エージェントが自律的に実装を走れるようになり、複数タスクを並列させるためにエージェントを複数起動することが当たり前になってきました。

複数起動していると、「どこで何をやっているのか」「今何台動いているのか」の管理が大変になります。vibe-kanban など色々なプラグインもありますが、自分は terminal 上でvimで実装を行うことが多いので全ての動作をターミナルで完結させたい思想で、いろいろカスタマイズしています。

現在行き着いた環境として、tmux の window ごとでタスク (≒ 脳内のコンテキスト) を切り替えつつ、tmux のステータスラインで全体を俯瞰、ccstatusline でそれぞれのエージェントを個別に監視するターミナル環境を今回は紹介できればと思っています。

ターミナル環境の紹介

ターミナル全体像

自分は普段、Alacritty + Neovim + tmux の組み合わせで開発しています。この環境で複数の AI エージェントを並列実行しています。

tmux ウィンドウでのタスク管理

まずは tmux の紹介です。tmux はターミナルマルチプレクサで、1 つのターミナル内で複数のセッション、ウィンドウ、ペインを管理できるツールです。

自分は tmux のウィンドウ機能と、git の worktree でタスク単位を切り替えています。git worktree の管理には git-worktree-runner を使っています。

ターミナル_window

window ごとに名前をつけることができる(Ctrl+b → ,)ので、タスクごとに分かりやすく管理できます。

よく使うキーバインド:

  • Ctrl+b → c: 新しいウィンドウを作成
  • Ctrl+b → n: 次のウィンドウに移動
  • Ctrl+b → ,: ウィンドウ名を変更

window 内では、複数の pane を分割して vim を起動したり claude code を起動させて作業させたりしていることが多いです。

複数エージェントのステータス表示

tmux_zenn03

tmux の status line に表示する情報は、以下の 2 つのプラグインで実現しています:

  • ccmonitor_tmux - Claude Code プロセスの稼働状況(アクティブ数/総数)を表示する自作のシェルスクリプト
  • tmux-ccusage - Claude Code のコスト情報(今日/今月)

以下のように表示されます:

🤖2/3 | 💰$1.23/$45.67 | 📅12-21 15:30
  • 3 つのエージェント中 2 つがアクティブに実行中
  • 今日/今月のコスト消費量

みたいな情報を表示させています。

tmux.conf の設定

どちらも TPM (Tmux Plugin Manager) を使って簡単にインストールできます。

~/.tmux.conf
# プラグイン
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'yanskun/tmux-ccusage'
set -g @plugin 'yuucu/ccmonitor_tmux'

# 閾値設定(CPU 使用率がこの値を超えるとアクティブと判定)
set -g @ccmonitor_cpu_threshold "1.0"

# status line の右側に表示
set -g status-right "🤖#{ccmonitor_active}/#{ccmonitor_total} | \
💰#{ccusage_today_cost}/#{ccusage_month_cost} | \
📅%m-%d %H:%M"

# 更新間隔(秒)
set -g status-interval 5
set -g status-right-length 100

run '~/.tmux/plugins/tpm/tpm'

TPM のインストール方法は 公式リポジトリ を参照してください。

詳細な設定やカスタマイズ方法は各リポジトリを参照してください:

ccstatusline でエージェントごとの詳細表示

各エージェントのステータスは ccstatusline で詳細を表示しています:

tmux_zenn04

ccstatusline での設定はかなりわかりやすく、実行した後下のような TUI で簡単に設定をすることができます

tmux_zenn05

自分は以下を設定しています

  • Model Name: モデルの判別(Sonnet/Opus)— どのエージェントでどのモデル使ってるか一目で分かって便利
  • Context Percentage: コンテキスト使用率 — これ見ながらコンテキスト管理できる
  • Session Clock: 稼働時間の把握 — 思ったより長く動いてたりする
  • Session Cost: セッションごとのコスト — リアルタイムでコスト意識できる
  • Git Branch: プロジェクトごとのブランチ確認
  • Git Changes: 変更ファイル数
自分の settings.json(クリックで展開)
~/.config/ccstatusline/settings.json
{
  "version": 3,
  "lines": [
    [
      {
        "id": "1",
        "type": "model",
        "color": "brightBlue",
        "rawValue": true
      },
      {
        "id": "2",
        "type": "separator",
        "color": "brightBlack"
      },
      {
        "id": "3",
        "type": "context-percentage",
        "color": "brightRed",
        "rawValue": true
      },
      {
        "id": "4",
        "type": "separator",
        "color": "brightBlack"
      },
      {
        "id": "5",
        "type": "session-clock",
        "color": "white",
        "rawValue": true
      },
      {
        "id": "6",
        "type": "separator",
        "color": "brightBlack"
      },
      {
        "id": "7",
        "type": "session-cost",
        "color": "yellow",
        "rawValue": true
      },
      {
        "id": "8",
        "type": "separator",
        "color": "brightBlack"
      },
      {
        "id": "9",
        "type": "git-branch",
        "color": "brightBlack",
        "rawValue": false
      },
      {
        "id": "10",
        "type": "separator",
        "color": "brightBlack"
      },
      {
        "id": "11",
        "type": "git-changes",
        "color": "brightBlack",
        "rawValue": false
      }
    ],
    [],
    []
  ],
  "flexMode": "full-minus-40",
  "compactThreshold": 60,
  "colorLevel": 2,
  "inheritSeparatorColors": false,
  "globalBold": false,
  "powerline": {
    "enabled": false,
    "separators": [""],
    "separatorInvertBackground": [false],
    "startCaps": [],
    "endCaps": [],
    "autoAlign": false
  }
}

インストール方法や設定の詳細は、リポジトリの README を参照してください:
https://github.com/sirmalloc/ccstatusline

実際に運用してみて感じたこと

以上の環境を数ヶ月運用してみて、以下のような効果を実感しています。

window を分けることの効果

以前は pane を分けて色々なタスクをやっちゃってたので、どのエージェントがどのタスクをやっていたか分かりにくかったです。

window を分けて名前をつけるようにしてから、かなり整理されました。「dotfiles の修正は window 1」「記事執筆は window 2」みたいに明確に分けられるので、エージェントが何をやっているのか意識しやすくなりました。

tmux の status line で全体を見渡せるのも良くて、「まだ依頼したやつ実装動いているな」とか「レビュー投げたやつまだ終わってなさそうだな」みたいな感じで、各エージェントの状態がぱっと分かります。一応 Claude Code の notify 設定もしているんですが、ターミナル開いてるときはこっちの方が早く分かって便利です。

コスト感覚とトークン量の肌感

ccstatusline でセッションごとのコストとトークン使用量が見えるようになって、個別のタスクでどのくらいコストやトークンがかかっているか感覚的に分かるようになりました。

コスト面では、今日/今月のコストが tmux status line に表示されているので、「今日どれくらい実装できたな」とか「うまく AI 並列で回せたな」みたいな指標として使っています。

(※ ccusage による参考値です)

トークン量については、コンテキスト使用率が見えるので、「そろそろ compact 入れた方がいいかも」とか「このタスクやってると消費量激しいな」みたいな肌感が掴めるようになりました。

まとめ

この記事では、複数の AI エージェントを並列実行するためのターミナル環境を紹介しました。

tmux のウィンドウ機能でタスクごとにエージェントを管理し、tmux status line で全体の稼働状況とコストを俯瞰、ccstatusline で個別エージェントの詳細(モデル、コンテキスト使用率、稼働時間など)を把握する構成です。

この環境で数ヶ月運用してみて、以下のような効果がありました:

  • window を分けることでエージェントの管理が整理された
  • status line で各エージェントの状態がぱっと分かるようになった
  • コストやトークン消費の肌感が掴めるようになった

複数エージェントを並列実行している方は、ぜひ試してみてください。

参考資料

アプリボット

Discussion