実際のマルチエージェントワークフロー:実開発のためのCMUXパターン

6 min read

前の5記事でCMUXの全機能ブロックを個別にカバーした。今度は繋げる時だ — 3つのAIエージェントを同時に実行し、それぞれが独自のスペースを必要とし、完了通知を受け取り、スクリプトでターミナルの動作を制御することが時々必要な、実際の開発シナリオ。

シナリオ:3つのエージェントを同時実行

今日やることが3つあるとしよう:

  1. 1つのエージェントが新機能を実装中(Claude Code / Cursor)
  2. 1つがCIスタイルのテストループを実行中
  3. 1つが何も壊れていないことを確認するためにログを監視中

この3つは互いに独立しているが、全て実行する必要があり — 全てのステータスを一目で確認したい。

Workspaceの設計

「workspace = タスク」の原則に従い、3つのworkspaceを作成する:

Workspace名 色 内容
feature-auth 青 エージェント出力 + バックアップシェル
test-runner オレンジ テストコマンド出力
monitoring グレー tail -f ログ監視

3つは完全に独立していて — いつでもサイドバーでステータスをスキャンできる。

cmux.jsonの設計

3つのworkspaceを全てカスタムコマンドとして書く。1日の開始時に1つずつトリガーすれば、3つの環境が一緒に立ち上がる:

{
  "commands": [
    {
      "name": "Feature Dev",
      "description": "認証機能開発ワークスペース",
      "keywords": ["feature", "auth", "dev"],
      "restart": "confirm",
      "workspace": {
        "name": "feature-auth",
        "color": "#3b82f6",
        "cwd": "./",
        "layout": {
          "direction": "horizontal",
          "split": 0.65,
          "children": [
            {
              "pane": {
                "surfaces": [
                  {
                    "type": "terminal",
                    "name": "エージェント",
                    "focus": true
                  }
                ]
              }
            },
            {
              "pane": {
                "surfaces": [
                  {
                    "type": "terminal",
                    "name": "Shell"
                  }
                ]
              }
            }
          ]
        }
      }
    },
    {
      "name": "Test Runner",
      "description": "継続的なテスト実行",
      "keywords": ["test", "runner", "ci"],
      "restart": "ignore",
      "workspace": {
        "name": "test-runner",
        "color": "#f97316",
        "cwd": "./",
        "layout": {
          "direction": "horizontal",
          "split": 1,
          "children": [
            {
              "pane": {
                "surfaces": [
                  {
                    "type": "terminal",
                    "name": "テスト",
                    "command": "npm run test:watch",
                    "focus": true
                  }
                ]
              }
            }
          ]
        }
      }
    },
    {
      "name": "Monitoring",
      "description": "ログ監視",
      "keywords": ["log", "monitor", "tail"],
      "restart": "ignore",
      "workspace": {
        "name": "monitoring",
        "color": "#6b7280",
        "cwd": "./",
        "layout": {
          "direction": "horizontal",
          "split": 0.5,
          "children": [
            {
              "pane": {
                "surfaces": [
                  {
                    "type": "terminal",
                    "name": "アプリログ",
                    "command": "tail -f logs/app.log",
                    "focus": true
                  }
                ]
              }
            },
            {
              "pane": {
                "surfaces": [
                  {
                    "type": "terminal",
                    "name": "エラーログ",
                    "command": "tail -f logs/error.log"
                  }
                ]
              }
            }
          ]
        }
      }
    }
  ]
}

CLIで通知を送信する

エージェントが大きなタスクを完了したら、出力を見つめ続けるのではなく通知を受け取りたい。スクリプトやエージェント設定に以下を追加する:

# タスク完了時に通知
cmux notify --title "フィーチャービルド完了" --body "auth機能のビルドが完了しました、レビュー準備ができています"
 
# テスト失敗時に警告
cmux notify --title "テスト失敗" --body "3つのテストが失敗、test-runnerワークスペースを確認してください"

CMUX外部(CIスクリプトなど)から呼び出す場合は、/usr/local/bin/cmuxシムリンクが設置されていることを確認する(インストール記事を参照)。

ソケットAPI自動化:上級者向け使用法

ソケットAPIでCMUXをプログラム的に制御できる。使用前に自動化モード設定を確認する:

環境設定 > 自動化モード > cmux processes only(個人の開発マシンに推奨)

全workspaceを照会する:

cmux list-workspaces

このコマンドの出力をスクリプトに渡すことができる — 「特定のworkspaceが存在するか確認し、存在しなければ自動的に作成する」のようなロジックが実現できる。

作業リズムの提案

1日の開始:3つのカスタムコマンドをトリガーすると、3つのworkspaceが一緒に立ち上がる — 手動設定は不要。

作業中:エージェントが実行中は、常に監視する必要はない — 通知を待つ。届いたら切り替えて結果を確認する。

コンテキスト切り替え:サイドバーに3つのworkspaceがあり、ワンクリックで切り替え — ⌘Tabでウィンドウを探し回ることはもうない。

1日の終わり:cmux list-workspacesを実行して全workspaceのステータスを確認し、タスク途中で放置されているエージェントがいないことを確かめる。

共有マシンでの注意事項

開発マシンが共有されている場合(チームサーバー、CIランナー)、自動化モードを「Disabled」または「cmux processes only」に設定する — 共有環境でallowAllは絶対に使わない。後者は任意のローカルプロセスがCMUXソケットに接続できるため、共有コンテキストではセキュリティリスクになる。


これでCMUXのワークフロー全体が完成した。インストール、構造、設定、カスタムコマンド、実際のマルチエージェント運用まで — 何台エージェントを実行していても整理された状態を保つ、再現可能なシステム。

特定のトピックに戻りたい場合は、**シリーズ概要**に戻って適切な記事に飛べばいい。