本文へスキップ
hdknr blog
戻る

サブエージェントの役割は tools で縛る — ECC の68体を数えて見えた設計と抜け穴

「Claude Code 環境を丸ごとオープンソース化」という触れ込みで ECC(Everything Claude Code)が X で再び話題になっている(2026 年 8 月末の紹介ポスト)。68 のサブエージェント、286 のスキル、94 のコマンド。数字だけ見ると「1 人の AI アシスタントからエンジニアリングチーム丸ごとへ」というキャッチコピーもうなずける。

ただ、この手の「役割分担できます」という説明はたいてい肝心なところを飛ばしている。どうやって役割を守らせているのか、である。「あなたはレビュー担当です」とプロンプトに書くだけなら誰でもできるし、それは守られない。

そこでリポジトリを clone して、68 個の agent 定義を全部数えてみた。分かったことは 3 つある。

ECC の全体像そのものは v2.0.0 時点のカタログ紹介記事で書いた(当時 67 エージェント・271 スキル)。今回はカタログではなく、権限の設計だけに絞る。

以下の集計はすべて 2026-09-01 時点の main(npm パッケージ ecc-universal v2.2.0)で確認したもの。数字はリリースごとに動く。

まず数字の裏を取る — 68 / 286 / 94 は実数か

話題になっているポストの数字は、リポジトリと完全に一致した。

git clone --depth 1 https://github.com/affaan-m/ECC.git
cd ECC

ls agents/*.md | wc -l        # 68
ls -d skills/*/ | wc -l       # 286
ls commands/*.md | wc -l      # 94

リポジトリ側の .claude-plugin/marketplace.json にも "68 agents, 286 skills, 94 legacy command shims" と書かれているので、宣伝文句ではなく実数である。ライセンスは MIT、Node.js 18 以上。

なお 94 コマンドは、マニフェストの表現どおり legacy command shims である。従来の /コマンド 呼び出しとの互換レイヤーであって、新機能が 94 個あるわけではない。ここは誤解されやすい。

本題:68 体の役割はどう強制されているか

agents/*.md の frontmatter を集計すると、3 つの軸でエージェントが縛られていることが分かる。

ECC の 68 サブエージェントを縛る 3 つの軸を示した図。軸1 の tools では完全密閉 13 体・Bash あり 27 体・書き込み可 28 体に分かれ、軸2 の model では opus 4 体・sonnet 58 体・haiku 6 体、軸3 では 67 体が同一のインジェクション防御前文を持つ。下段は 286 スキルの description だけで約 2 万トークンを占めるコンテキスト予算

軸1: tools —「できること」の上限を frontmatter で決める

一番効いているのがこれだった。

# Write または Edit を持つエージェント
grep -l '^tools:.*\(Write\|Edit\)' agents/*.md | wc -l   # 28

# 持たないエージェント
grep -L '^tools:.*\(Write\|Edit\)' agents/*.md | wc -l   # 40

68 体中 40 体が Write / Edit を持たない。そしてその中に planner と architect が含まれている。

---
name: planner
description: Expert planning specialist for complex features and refactoring. ...
tools: Read, Grep, Glob
model: opus
---

Read, Grep, Glob だけ。Write も Edit も Bash もない。つまり計画エージェントは、指示文でお願いされているから実装しないのではなく、実装する手段を渡されていないから実装できない。architect も同じ構成である。

これは地味だが決定的な違いである。「設計だけして、実装は承認を取ってから」という運用をプロンプトの文章で守らせようとすると、長いセッションのどこかで必ず破られる。ツールを外しておけば、破りようがない。

そして、その壁には抜け穴がある

ただし「40 体は書けない」と要約すると嘘になる。Bash を持っていれば、Write がなくてもリダイレクトでファイルは書けるからだ。そこで Bash も含めて数え直した。

# Write / Edit / Bash のいずれも持たない = 本当に書けない
grep -L '^tools:.*\(Write\|Edit\|Bash\)' agents/*.md | wc -l   # 13

# Write / Edit はないが Bash はある
grep -L '^tools:.*\(Write\|Edit\)' agents/*.md | xargs grep -l '^tools:.*Bash' | wc -l   # 27

完全に密閉されているのは 13 体だけだった。残り 27 体は Bash 経由で書けてしまう。

この 13 体の顔ぶれが設計思想をよく表している。

architect          code-explorer      comment-analyzer
conversation-analyzer                 docs-lookup
healthcare-reviewer                   homelab-architect
marketing-agent    network-architect  network-config-reviewer
planner            seo-specialist     type-design-analyzer

設計・分析・調査 — 成果物が「判断」であって「差分」ではない役が集まっている。

逆にレビュー役はどうか。

ls agents/*reviewer*.md | wc -l                          # 23
grep -l '^tools:.*Bash' agents/*reviewer*.md | wc -l     # 21

*-reviewer 23 体のうち 21 体が Bash を持つ。密閉されているのは healthcare-reviewer と network-config-reviewer の 2 体だけである。

これは手抜きではなく、たぶん必然だと思う。コードレビューはテストを走らせないと判断できない場面が多く、Bash を取り上げると役に立たなくなる。結果として ECC の権限設計は、計画フェーズでは物理的な壁、レビューフェーズでは意図の表明という二段構えになっている。

書き込み権を持つ 28 体の側も筋が通っていて、12 体ある *-build-resolver(go-、rust-、pytorch- など)は例外なく全てが Write / Edit を持つ。直すのが仕事だからである。役割と権限が一致している。

軸2: model —「かけるコスト」を役割ごとに割り当てる

grep -h '^model:' agents/*.md | sort | uniq -c | sort -rn
#  58 model: sonnet
#   6 model: haiku
#   4 model: opus

model: 行を持たないエージェントはゼロ。全部が明示的に指定されている。

「全部いいモデルで」でも「指定なしでおまかせ」でもなく、役割ごとにコストを割り当てている。サブエージェントを大量に並べる設計では、ここを詰めないと請求額とレイテンシが線形に膨らむ。

なお opus 4 体のうち architect と planner は、前節の「完全に密閉された 13 体」にも入っている。一番高いモデルを、一番書けないエージェントに割り当てているわけで、この対応は偶然ではないだろう。

軸3: prompt defense — 67 体が同じインジェクション防御前文を持つ

これは予想していなかった。ほぼ全エージェントの本文冒頭に、まったく同一の ## Prompt Defense Baseline ブロックが入っている。

grep -l 'Prompt Defense Baseline' agents/*.md | wc -l   # 67 of 68

中身は要約するとこうである(原文は英語、以下は筆者訳)。

つまり ECC は、サブエージェント 1 体 1 体を独立した信頼境界として扱っている。親エージェントが安全でも、Web を読みに行くサブエージェントは攻撃の入口になる。その前提に立った設計である。プロンプトインジェクション対策を自前のマルチエージェント構成に入れるなら、この前文だけ持ち帰る価値があると思う。

(唯一この前文を持たないのは agent-evaluator.md だった。他のエージェントを評価する役なので、評価対象の前文と混ざらないようにしているのかもしれない。)

そして本当の制約は 286 スキルのコンテキスト予算だった

作者自身が「286 スキルを一気に全部入れるのが、いちばん早く悪化する方法」と釘を刺している。なぜそうなるのかを数字で確かめた。

# 全 SKILL.md の総量(行数と文字数)
wc -l skills/*/SKILL.md | tail -1     #  74685 total
cat skills/*/SKILL.md | wc -m         #  2567060

286 スキルの本文は合計 約 257 万文字。以下、英語主体のテキストなので 1 トークン ≒ 4 文字として概算すると、64 万トークン相当になる。

当然これが全部読み込まれるわけではない。Skills は progressive disclosure(段階的開示) で動く。普段ロードされるのは frontmatter の name と description だけで、本文はスキルが起動したときに初めて読まれる。

問題はその「普段」の分である。286 スキル分の name + description を足すと 約 7.8 万文字、およそ 2 万トークン相当だった。本文の 33 分の 1 とはいえ、これは何も指示していなくても毎回コンテキストの席を取る固定費である。

さらにエージェント側の name + description が 68 体で約 1.5 万文字(約 4,000 トークン)。合わせて 2 万数千トークンが、作業を始める前から埋まっている計算になる。

「全部入れると悪化する」は精神論ではなく、単純に席が足りなくなるという話だった(Context Rot(コンテキスト劣化)の入口でもある)。ECC 自身の minimal プロファイルの説明文に、そのものずばり Low-context Claude Code setup と書かれているのも納得がいく。

"minimal": {
  "description": "Low-context Claude Code setup with rules, agents, commands, platform configs, and quality workflow support, but no hook runtime.",
  "modules": ["rules-core", "agents-core", "commands-core", "platform-configs", "workflow-quality"]
}

インストールプロファイルは minimal / core / developer / security / research / full などがモジュール単位で定義されている。README も「Start with the workflow you need, not the full catalog」と明言している。カタログの大きさは売り文句だが、実際の使い方は引き算である。

ファクトチェックで直した点

元ポストの数字はほぼ正確だったが、確認した結果いくつか補正が必要だった。

主張検証結果
68 エージェント / 286 スキル / 94 コマンド✅ リポジトリの実数と完全一致
MIT ライセンス、npx ecc-universal setup、Node.js 18 以上✅ 正しい
/plugin install ecc@ecc✅ README 記載どおり
PyTorch・CUDA のエラー対応✅ pytorch-build-resolver が CUDA OOM や cuDNN エラーを扱う
OWASP 観点の監査✅ security-reviewer が OWASP Top 10 を明示
リポジトリ名 affaan-m/everything-claude-code⚠️ affaan-m/ECC に改称済み(旧 URL はリダイレクトする)
「Anthropic のハッカソン優勝者」⚠️ 優勝は 2025 年 9 月の Anthropic x Forum Ventures ハッカソン。ECC 自体は 2026 年 2 月の Cerebral Valley x Anthropic ハッカソンで作られたもので、別のイベント
「Review 役は Go / Python / TypeScript / Rust / Java 別」⚠️ 過小評価。*-reviewer は 23 体あり、C++・C#・PHP・Swift・Kotlin・React・Vue・Django・FastAPI なども含む
「設計の判断はマイグレーションになる前に止める」⚠️ architect.md / planner.md にこの記述は見当たらない。実際の停止機構は前述の tools からの Write / Edit / Bash 除外

ECC のインストール方法 — npm / プラグイン / プロファイル指定

# 導入(Node.js 18 以上)
npx ecc-universal setup

# プロファイルを絞って入れる
npx ecc-universal install --profile minimal --target claude
npx ecc-universal install --guided

# 導入後の点検
npx ecc-universal doctor          # 設定の健全性チェック
npx ecc-universal list-installed  # 何が入っているか一覧
npx ecc-universal repair          # 壊れた ECC 管理ファイルの復旧

Claude Code のプラグインとして入れる場合はこちら。

/plugin marketplace add https://github.com/affaan-m/ECC
/plugin install ecc@ecc

対応ハーネス(エージェントを動かすクライアント側)は README の表で 10 種類以上ある。Claude Code のほか Codex、Cursor、OpenCode、Gemini CLI、Zed、Qwen CLI、Kimi、CodeBuddy など。

まとめ

ECC から持ち帰るべきは「68 体のサブエージェントを用意しよう」ではない。エージェントを増やすこと自体は誰でもできるし、増やしただけなら管理コストが増えるだけである。

再利用できるのは設計の作法のほうだ。

  1. 役割は文章ではなく tools で強制する — 計画役から Write / Edit / Bash を外す。68 体中 40 体が Write / Edit を持たないという比率が、そのまま「読む役のほうが多い」という設計思想になっている
  2. どこまで密閉するかは役割で決める — 判断だけを返す 13 体は完全密閉、テストを走らせる必要があるレビュー役 21 体には Bash を残す。全部を一律に縛らないのが実用的な落としどころ
  3. 役割ごとにモデルを割り当てる — 判断の重い 4 体だけ opus、機械的な 6 体は haiku。しかもその opus 2 体は密閉側に置かれている
  4. サブエージェントを信頼境界として扱う — 外部データを読む役には防御前文を必ず付ける
  5. カタログの大きさと常時コストは別物 — description だけで 2 万トークン。増やすほど、増やす前の判断が重くなる

自分の .claude/ を整理するとき、この 5 つはそのままチェックリストになる。少なくとも「うちの計画エージェント、実は Write を持ったままだな」に気づけるだけでも、clone して数えた価値はあった。

関連記事

参考



前の記事
Invidious は2026年も YouTube の代替になるか — 稼働率100%の裏で到達できたのは5件中0件
次の記事
WSL2 の sshd を Windows 起動時に自動起動する — セッション 0 と 15 秒タイムアウトの罠