あなたはすでにAIコーディングエージェントを使っています。Claude Code、Codex、Aider — 1つ選んでください。うまくいきます。あなたがタスクを渡し、エージェントがコードを書き、あなたがレビューします。シンプルです。
しかし、バックログがあります。並行して実行できるタスクが5つ。3つのターミナルタブを開いてプロンプトを貼り付けると、なぜ「エージェントを増やすだけ」ではスケールしないのか、すぐに分かります。
ここでは、1つのエージェントから監督付きのチームへと段階的に進む道筋を示します。各ステップは、すべてを一度に作り直す必要なく、能力を追加していきます。
ステージ 0:いまのあなたの状況
1エージェント。1つのターミナル。順次タスク。
claude-code
# 「JWT認証を追加」
# 15分待つ
# レビューして、改善
# 「次にAPIのテストを書く」
# 10分待つ
# レビューして、改善
これは動きます。制限は「時間」です — 多くのタスクが並行で動かせるのに、あなたはタスクを順番に処理しているからです。
ここを超えるべきタイミング: 独立したタスクが定期的に3つ以上キューにあり、エージェントの出力をレビューする時間よりも、エージェントを待つ時間のほうが増えている場合です。
ステージ 1:並行で2つのエージェント
最も簡単なアップグレードです。ターミナルタブ2つ、エージェント2つ、タスク2つ。
# Terminal 1
mkdir -p .agents/agent-1
git worktree add .agents/agent-1 -b agent-1/task-auth
cd .agents/agent-1
claude-code
# 「JWT認証を追加」
# Terminal 2
mkdir -p .agents/agent-2
git worktree add .agents/agent-2 -b agent-2/task-tests
cd .agents/agent-2
codex
# 「ユーザーAPIの統合テストを書く」
重要な変更点: Git worktreesです。各エージェントが、自分専用のブランチ上のディレクトリを持ちます。これをしないと、互いのファイルを上書きしてしまいます。
まだ手作業で管理すること: 各エージェントが終わったタイミングを確認すること。テストを実行すること。ブランチを1つずつマージすること。コンフリクトを解消すること。
ここを超えるべきタイミング: 2つのエージェントは安定して動いているものの、手作業の「マージ/テスト/確認」サイクルが、監督に使う時間を食ってしまっている場合です。「エージェント2はまだ作業中?それとも止まってる?」と自問するようになります。
ステージ 2:tmux と基本的な監視を追加
ターミナルタブを tmux に置き換えます。これで両方のエージェントを同時に見ながら、殺さずにデタッチできます。
# 2つのペインでセッションを作成
tmux new-session -s agents -d
tmux split-window -h -t agents
# worktree 上でエージェントを起動
tmux send-keys -t agents:0.0 'cd .agents/agent-1 && claude-code' Enter
tmux send-keys -t agents:0.1 'cd .agents/agent-2 && codex' Enter
# 接続して両方を監視
tmux attach -t agents
重要な変更点: 可視性と永続性です。両方のエージェントが横並びで作業しているのが見えます。ラップトップを閉じて、後でSSHし直して tmux attach — 彼らはまだ動いています。
まだ手作業で管理すること: ステージ1のすべてに加えて、ペインの移動のための tmux の操作に慣れていく必要があります。
ここを超えるべきタイミング: 3つ以上のエージェント、テストの自動チェック、あるいは離席してもマージ済みの結果に戻ってこられる仕組みが欲しい場合です。
ステージ 3:テスト・ゲーティングを追加
このステージの前までは、「完了」の意味はエージェントが「終わった」と言ったことです。このステージの後は、「完了」の意味はテストが通ったことです。
# agent-1 が「終わった」と言った後:
cd .agents/agent-1
cargo test # もしくは npm test, pytest
echo $? # 0 = マージする / 0以外 = 返してフィードバック
# テストが通った場合:
cd /project
git merge agent-1/task-auth
# テストが失敗した場合:
# 失敗した出力をエージェントに戻す
# 「Tests failed: thread 'test_jwt_auth' panicked...」
重要な変更点: 品質ゲートです。この1つのチェックによって、「エージェントが何かを壊した」インシデントが約80%減ります。残りの20%は、エージェントの失敗ではなく、テストカバレッジの穴です。
まだ手作業で管理すること: テストコマンドを実行すること、出力を読むこと、マージするかフィードバックを返すかを判断すること。
ここを超えるべきタイミング: すべてのタスクで「テスト実行→マージ」というサイクルを手作業で回しており、それを自動化したい場合です。エンジニアが実行する前に特徴を分解できるアーキテクトが欲しい場合でもあります。
ステージ 4:アーキテクトを追加
計画と実行を分離します。1つのエージェントが分解し、他のエージェントが実行します。
これまでのあなたはアーキテクトでした — 各エージェントに何をやらせるかを決めていました。アーキテクトのエージェントは、ハイレベルな目標を受け取り、それを具体的でテスト可能なタスクに分解します。
あなた → 「JWTでユーザー認証を構築して」
アーキテクト → タスクを作成:
1. 保護されたルートにJWTミドルウェアを追加
2. トークン生成付きのログインエンドポイントを実装
3. トークン更新(リフレッシュ)エンドポイントを実装
4. 認証フローの統合テストを書く
各タスクは独立していて具体的で、完了条件が明確です。「認証を作る」というだけと、「4つに分解されたタスク」では、出力の品質の差が劇的です。
重要な変更点: タスク分解の質です。優れたアーキテクトのプロンプトは、曖昧なタスクを持つ追加のエンジニアを増やすよりも、より良い結果を生みます。
ステージ 5:Battyで自動化
上記の各ステップは、すべて手作業でできます。Battyは、ループ全体を自動化します:
# .batty/team_config/team.yaml
roles:
- name: architect
role_type: architect
agent: claude
instances: 1
talks_to: [manager]
- name: manager
role_type: manager
agent: claude
instances: 1
talks_to: [architect, engineer]
返却形式: {"translated": "翻訳されたHTML"}- name: engineer
role_type: engineer
agent: codex
instances: 3
use_worktrees: true
talks_to: [manager]
cargo install batty-cli
batty init --template standard
batty start --attach
batty send architect "JWTでユーザー認証を構築する"
Battyが自動化すること:
- ワークツリー作成: エンジニアごとに永続化し、タスクごとに新しいブランチを作成
- テストのゲーティング: マージを許可する前にテストコマンドを実行
- マージの直列化: ファイルロックにより同時マージの競合を防止
- タスク配信: 自動割り当て付きのMarkdownカンバンボード
-
メッセージルーティング:
talks_toの制約に基づくMaildirインボックス - アイドル検出: 4層システム(出力ハッシュ、セッションファイル、コンテキスト枯渇、完了パケット)
- エージェントのライフサイクル: 起動し、監視し、クラッシュまたはコンテキスト枯渇時に再起動
あなたは機械を操作するのではなく、チームを監督します。
どのステージにいますか?
| ステージ | 次の状態になったら準備完了... | セットアップにかかる時間 |
|---|---|---|
| 0 → 1 | 2つ以上の独立したタスクがある | 5分 |
| 1 → 2 | エージェントを並べて見たい | 10分 |
| 2 → 3 | マージ前に品質ゲートがほしい | 5分 |
| 3 → 4 | より良いタスク分解がしたい | 15分 |
| 4 → 5 | ループ全体を自動化したい | cargo install batty-cli |
今いるところから始めましょう。各ステージは、ワークフローを最初から作り直す必要なしに機能を追加してくれます。多くの開発者は、ステージ1(ワークツリー)がすぐに価値をもたらすと感じています。より多くを必要とするまで、何週間もそこに留まることができます。
重要なのはツールではありません。大事なのは進め方です。作業を切り分け、テストでゲートし、タスクを分解し、その後に自動化する——これがポイントです。




