エージェントを5体立ち上げて、それぞれに役割を持たせて、チームとして動かす。1日でやったことを、設定ファイルの中身から失敗したポイントまで、実践レベルで全部書いていきます。
この記事のターゲットはOpenClawを既に使っている人です。「どうやって複数エージェントを運用するのか」「設定ファイルはどう書くのか」「トークンはどう節約するのか」。そういう実践的な話を、コピペできるレベルで書きます。
なぜ5体のチーム構成にしたのか
最初は1体でよくない?と思っていました。でも実際に運用してみると、タスクごとに人格を分けたほうが管理しやすいことに気づきました。
単一エージェントの限界
1体のエージェントに「株も調べて、記事も書いて、APIも叩いて」と頼むと、コンテキストがごちゃ混ぜになります。今は株の話をしているのか、記事を書いているのか、エージェント自身も混乱します。
しかも、会話履歴が長くなると、「前に何を話したか」を参照するコストが跳ね上がります。毎回全履歴を読み込んでいたら、トークンが無駄に消費されます。
役割で分けると何が変わるか
エージェントごとに役割を明確にすると、次のメリットがあります:
- コンテキストが純粋になる — Analystは株の話だけ、Scribeは文章の話だけ
- モデルを使い分けられる — 深い思考が必要な場面だけOpus、それ以外はSonnetやGemini
- 並列実行できる — Analystが株価を取得している間に、Cloudが天気を取得する
- トークン効率が上がる — 必要な履歴だけ読み込めばいい
5体のエージェントと設定ファイル
実際に作った5体のエージェントと、それぞれのopenclaw.jsonの中身を公開します。
1. Jarvis(司令塔)
全体を見渡して、どのエージェントに何を任せるかを判断する役です。ユーザーからの依頼を受けて、Analystに株価を調べさせたり、Scribeに記事を書かせたりします。
{
"id": "jarvis",
"workspace": "~/.openclaw/agents/jarvis",
"model": {
"primary": "anthropic/claude-sonnet-4-5"
},
"identity": {
"name": "Jarvis",
"emoji": "🧠"
},
"subagents": {
"allowAgents": ["analyst", "scribe", "cloud", "pixel"]
}
}
ポイント:
- モデルはSonnet(トークン効率化後。元はOpus)
- subagents設定で4つのエージェントに委任可能
2. Analyst(株分析)
株価データの取得、スクリーニング、レポート作成を担当します。
{
"id": "analyst",
"workspace": "~/.openclaw/agents/analyst",
"model": {
"primary": "anthropic/claude-sonnet-4-5"
},
"identity": {
"name": "Analyst",
"emoji": "📈"
}
}
ポイント:
- モデルはSonnet — データ整形中心、スピード重視
- MEMORY.md読み込まない — 株価データは毎日リセット
3. Scribe(文章)
文章作成、レポート整形、SNS投稿の下書きを担当します。今この記事を書いているのもScribeです。
{
"id": "scribe",
"workspace": "~/.openclaw/agents/scribe",
"model": {
"primary": "anthropic/claude-sonnet-4-5"
},
"identity": {
"name": "Scribe",
"emoji": "✍️"
}
}
ポイント:
- SOUL.mdに文体ルールを詳細記載(NGワード集含む)
- output/*.mdをoffset/limitで部分読み込み(トークン節約)
トークン効率化の3つの手
運用開始後、トークン消費が激しくなって、3つの対策を実施しました。
1. AGENTS.mdの大幅スリム化
毎セッション起動時に読み込まれるファイルを、4,800字 → 823字(83%削減)に圧縮。XMLタグで構造化して、冗長な説明をカット。
<boot> 毎セッション: SOUL.md → USER.md → IDENTITY.md を読む。 MEMORY.md の丸読みはしない。 </boot> <token_efficiency> ファイルはoffset/limitで部分読み。丸読みしない。 MEMORY.mdはmemory_searchで引く(丸読み禁止)。 </token_efficiency>
2. ファイル部分読み(offset/limit)
長いファイルを丸ごと読むのではなく、必要な部分だけ読み込む。
# 悪い例 Read ~/.openclaw/agents/scribe/output/article.md # 良い例 Read ~/.openclaw/agents/scribe/output/article.md offset=0 limit=100
3. memory_searchで必要な部分だけ引く
MEMORY.mdを毎回丸読みせず、memory_searchで必要な情報だけ検索。
# 悪い例(旧運用)
毎セッション起動時にMEMORY.md全文読み込み(数千トークン消費)
# 良い例(現運用)
memory_search("天気API") → 該当箇所だけ取得
ハマったポイント・失敗例
失敗1: ComfyUIのサイズ指定ミス
Flux2 Devで1280x672の画像を生成しようとしたら、ComfyUIがフリーズ。重すぎた。
対策:1024x1024で生成してから、リサイズする運用に変更。
失敗2: SOUL.mdなしで運用
最初はSOUL.mdを書かずに運用。結果、毎回エージェントの口調がバラバラ。同じ質問をしても答え方が違う。
対策:SOUL.mdに役割・トーン・NGルールを明記。一貫性が劇的に改善。
失敗3: モデルを全部Opusに
最初は全エージェントをOpusで動かしていた。トークン単価が高すぎて、1日で数千円消費。
対策:タスクに応じてモデルを使い分け。データ整形系はSonnet、技術処理はGemini Flashに変更。コスト約1/5に削減。
まとめ
1日で5体のエージェントチームを作って、実際に運用してみた結果:
- タスクごとにエージェントを分けると、コンテキストが純粋になる
- SOUL.mdは必須。書くか書かないかで一貫性が段違い
- トークン効率化は運用後に必ず必要になる(部分読み・memory_search・モデル使い分け)
- 失敗しながら調整していく前提で作る
OpenClawは柔軟性が高い分、設定の自由度も高いです。この記事の設定ファイルをコピペして、自分の環境に合わせて調整してみてください。
💭 あなたならどんなチーム構成にしますか?
感想・質問はこちら → @daisuki_koshian