シリーズ: Cmux (7/7)
実際のマルチエージェントワークフロー:実開発のためのCMUXパターン
前の5記事でCMUXの全機能ブロックを個別にカバーした。今度は繋げる時だ — 3つのAIエージェントを同時に実行し、それぞれが独自のスペースを必要とし、完了通知を受け取り、スクリプトでターミナルの動作を制御することが時々必要な、実際の開発シナリオ。
シナリオ:3つのエージェントを同時実行
今日やることが3つあるとしよう:
- 1つのエージェントが新機能を実装中(Claude Code / Cursor)
- 1つがCIスタイルのテストループを実行中
- 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のワークフロー全体が完成した。インストール、構造、設定、カスタムコマンド、実際のマルチエージェント運用まで — 何台エージェントを実行していても整理された状態を保つ、再現可能なシステム。
特定のトピックに戻りたい場合は、**シリーズ概要**に戻って適切な記事に飛べばいい。