AIDive

動画パック

1 つのプロジェクトで計測した Claude Code リポジトリ 8 個: セッションコスト、ablation 表、判定

13 分で読めます

TL;DR

  • 人気の Claude Code リポジトリ 8 個を、1 つの実在コードベースにプロジェクトスコープで導入して計測した。計測項目は、セッション開始時のトークン、3 つのコーディングタスクの出力トークン、そして各リポジトリがプロジェクト外に書き込んだ内容。
  • 結果を変えたのは 8 個のうち 1 個だけ。anti-slop をリンターとして動かすと、T3 の 3 回すべてで同じ危険なキャストを検出した。コストはセッション開始時の +95 トークンのみで、ターンごとの負担はゼロ。
  • 出力を短くするルールセットは、ツールを使う作業では通用しなかった。Chisle が宣伝する 52% は、実測では baseline の出力トークンの 94% だった。入力まで含めると、3 タスク中 2 つで baseline より高くついた。
  • 3 つの MCP サーバーは、63 回の実行で一度も呼ばれなかった。インストールすることと使われることは別。
  • スタックは加算的。8 個すべてを合わせるとセッション開始時に +6,804 トークンで、各パーツの合計との差は 63 トークンだった。
  • 2 つのインストールがプロジェクトの外に手を伸ばした。1 つの codemod は他の 8 個のエージェントのグローバル設定に自分を登録した。もう 1 つのツールは --dangerously-skip-permissions をハードコードし、認証情報ファイルをコピーするため、実行しなかった。

測定結果からわかること

セッション開始時のトークンは再現できるが、ドル建てのコストは再現できない。どの条件も 2 回の実行で入力トークン合計がまったく同じだったのに、同じ条件のコストが prompt cache の状態によって $0.0183 から $0.0035 まで振れた。そのため、全体を通してトークン数を指標にしている。baseline のプロジェクトは 17,378 トークンで始まる s4。

このバージョンの Claude Code では MCP ツールのスキーマは遅延ロードされ、コストはスキーマの大きさではなく、サーバーが公開するツール名の数に比例する。ouroboros の 39 ツールは +1,642 トークン、reticle の 19 ツールは +895、ui-skills の 2 ツールは +37 で、ツール名 1 つあたりおよそ 42 から 47 トークン。デフォルトでは MCP ツールはすべて遅延され、必要になったときに読み込まれる。ENABLE_TOOL_SEARCH の auto モードは、定義がコンテキストウィンドウの 10% に達した時点で遅延させる s4。 img2threejs は 32,902 バイトの SKILL.md と 352 ファイルを持つが、セッション開始時のコストは +107 トークン。読み込まれるのは frontmatter の description だけだからだ。skills のドキュメントでは、一覧に載る description は 1 つ 1,536 文字までで、スキルが多いと一覧の予算に収まるよう description が短縮される。compaction の後は、呼び出し済みのスキルが 1 つ 5,000 トークン、共有予算 25,000 トークンの範囲で再添付される s5。この一覧の予算こそ、40 個のスキルが、1 つも呼び出さない環境でも毎ターン 3,060 トークンかかる理由 s10 であり、スキルが外されずに description が削られる理由 s11 でもある。

Chisle の UserPromptSubmit フックは、毎ターン 287 バイトの additionalContext を追加する。22 ターンのタスクでは、これが T3 で baseline に対して入力トークン合計 +41,539 というコストになった理由だ。参照として計測した caveman は、プロンプトが /caveman で始まらない限り何も注入しない。同じイベントの複数のフックがそれぞれ additionalContext を返すと、Claude はそれらを連結して受け取り、フック 1 つあたり 10,000 文字の上限がある s15。Chisle、caveman、ouroboros を組み合わせると、SessionStart に 3 件、UserPromptSubmit に 3 件、PostToolUse に 2 件の登録があり、開始時に +4,269 トークンだった s15。

Chisle の README は 20 タスクの請求額が baseline の 52% だと主張しているが、README 自身がその数字をツールなしの単発プロンプトに限定している s3。実在のリポジトリに対する 3 タスク、各 3 回の実行では、Chisle の出力平均の合計は 9,007 トークンで baseline の 9,615 に対して 94%、caveman は 10,820 で 113% だった。T3 のばらつきが 2,014 トークンあるサンプルなので、どちらの方向もノイズを超えない s3。Chisle の出力コンプレッサーは、63 回の実行で一度も節約記録を書かなかった。

anti-slop を tools/oxlint/ にベンダリングし、汎用ルール 18 個すべてと oxc/no-accumulating-spread を適用すると、手を加えていない 4,775 行のプロジェクトで 109 件の問題が見つかった。その 83% は 2 つのハウススタイルルール (require-readable-spacing 50 件、require-safety-comment-for-type-assertion 41 件) によるもの s8。Claude が書いたコードでは、T3 の 3 回すべてで maxLength={field.maxLength as number} を検出した。Claude がコードベース自身の危険なキャストをそのまま真似したものだ s8。プラグインは ESM なので、ホストのプロジェクトに "type": "module" が必要で、ないと oxlint は Cannot use import statement outside a module で失敗する。

Reticle の init codemod は、RETICLE_STATE_DIR を設定しテレメトリをオフにして実行したところ、MCP サーバーをさらに 8 個のエージェント (VS Code user scope、GitHub Copilot CLI、Warp、Factory Droid、Kiro、Amazon Q Developer CLI、Cline CLI、Amp) に登録し、Gemini CLI ではそのツールを事前承認したと報告した。その後、ペアリングは ERR_OSSL_EVP_UNSUPPORTED で失敗した s6。Caliper は拒否した。claude_code.py:106 が --dangerously-skip-permissions をハードコードし、seed_files() が ~/.claude/.credentials.json を Keychain へのフォールバック付きでコピーする s2。ouroboros の UserPromptSubmit フックは、write prd for reading time のような普通のプロンプトに REQUIRED SKILL: /ouroboros:setup と返す。プロジェクトスコープのインストールでは満たせない手順だ s7。

52、102、202 個のスキルのライブラリにわたる 2,545 件のトラジェクトリを調べた論文は、プールした pass-rate の低下が .08、.14、最大 21% だったと報告している。似た description が互いを隠す影響が、損失の中で占める割合を増やしていく s20。

測定データ

プロトコル: 実在の TypeScript プロジェクト 1 つに、すべてのリポジトリをプロジェクトスコープのみで導入。セッション開始: -p JSON モードで同一フラグのまま Reply with OK を送り、条件ごとに 2 回実行。数値は最初のターンの input_tokens + cache_creation_input_tokens + cache_read_input_tokens。Ablation: 3 つのコーディングタスク (T1 は短い、T2 は中程度、T3 は長い UI タスク) に pass チェックと型チェックのゲートを付け、セルごとに 3 回実行。条件は baseline、常時オンの各リポジトリ単独、8 個すべてを重ねたもの。anti-slop: ベンダリングしたルールセットの oxlint 1.78.0 を、手を加えていないプロジェクトと、baseline の 9 回の実行で書かれたコードに対して実行。

repo プロジェクトスコープで導入したもの セッション開始時の追加トークン ターンごとのコスト
baseline なし 17,378 なし
Chisle 4 skills, 4 commands, 3 hooks +3,496 毎ターン +287 バイトの additionalContext
ouroboros MCP サーバー、ツール名 39 +1,642 条件付き注入
reticle MCP サーバー、ツール名 19 +895 / +903 観測されず
fwc-swiftui-skills 2 skills +304 なし
caliper 2 skills +172 なし
img2threejs 1 skill, 352 ファイル, SKILL.md = 32,902 B +107 なし
anti-slop 1 skill + ベンダリングしたルールセット +95 なし
ui-skills リモート MCP、2 ツール +37 なし
8 個すべてを重ねたもの 上記すべて +6,804 Chisle のターンごとのコストのみ
caveman (参照) 4 skills, 2 hooks +744 0
タスク 条件 pass 新規の型エラー 出力トークン平均 出力 min から max 入力合計平均 コスト平均 ターン数 MCP 呼び出し
T1 baseline 3/3 0 1,668 1,619 to 1,739 95,462 $0.0519 7.0 0
T1 Chisle 3/3 0 1,434 1,341 to 1,502 106,001 $0.0576 7.7 0
T1 ui-skills 3/3 0 1,756 1,644 to 1,885 96,279 $0.0535 7.3 0
T1 reticle 3/3 0 1,899 1,653 to 2,177 107,263 $0.0594 8.0 0
T1 ouroboros 3/3 0 1,729 1,655 to 1,787 97,166 $0.0549 7.0 0
T1 stack 3/3 0 1,462 1,460 to 1,465 128,221 $0.0646 7.7 0
T2 baseline 3/3 0 2,128 2,105 to 2,164 74,286 $0.0540 9.0 0
T2 Chisle 3/3 0 2,184 2,150 to 2,230 87,462 $0.0624 10.0 0
T2 ui-skills 3/3 0 2,348 2,224 to 2,504 74,869 $0.0604 10.0 0
T2 reticle 3/3 0 2,614 2,312 to 2,824 78,664 $0.0635 10.7 0
T2 ouroboros 3/3 0 2,441 2,152 to 2,815 80,819 $0.0622 10.0 0
T2 stack 3/3 0 2,136 2,015 to 2,216 89,378 $0.0661 9.7 0
T3 baseline 3/3 0 5,819 5,423 to 6,063 198,217 $0.1551 22.0 0
T3 Chisle 3/3 0 5,389 5,206 to 5,500 239,756 $0.1565 20.3 0
T3 ui-skills 3/3 0 5,279 4,860 to 5,567 214,691 $0.1477 21.0 0
T3 reticle 3/3 0 4,664 4,008 to 5,776 198,740 $0.1293 19.0 0
T3 ouroboros 3/3 0 5,456 4,324 to 7,093 232,763 $0.1544 21.0 0
T3 stack 3/3 0 5,331 4,787 to 5,843 241,576 $0.1591 19.7 0

63/63 回の実行が pass し、新しい型エラーを出したのは 0/63 回だった。自身の実行間のばらつきを超えたセルは 2 つだけ: T1 の Chisle (−234、−14.0%) と T1 のスタック (−206、−12.3%)。T2 と T3 では、すべての差がばらつきの範囲内に収まる。ouroboros の T3 は、同一プロンプトで出力トークンが 4,324 から 7,093 まで振れ、64% の幅があった。

repo 判定 根拠
anti-slop チェックとして出力を変えた T3 の 3/3 回で同じ危険なキャストを検出、+95 トークン、ターンごとは 0
Chisle 測定できる効果なし、むしろ高くついた 主張の 52% に対し baseline の出力の 94%、開始時 +3,496、ターンごと +287 バイト
ui-skills 何も変えなかった 9 回の実行でツール呼び出し 0、+37 トークン
reticle 衝突した init が ~/.claude/settings.json と他の 8 個のエージェントの設定に書き込み、ペアリングは完了せず
ouroboros 衝突した 普通のプロンプトで /ouroboros:setup を要求、ツール名 39、呼び出し 0
caliper 実行せず --dangerously-skip-permissions をハードコード、認証情報ファイルをコピー
img2threejs スタック対象外 +107 トークン、衝突するものがない
fwc-swiftui-skills スタック対象外 +304 トークン、静的な Markdown

月曜日にやること

  • メインプロジェクトの新しいセッションで /context all を実行し、開始時の数値を書き留める。
  • インストール済みのすべてのプラグインで claude plugin details <name> を実行する。毎ターン課金されるのは always-on の行だけ。
  • イベントごとにフックを一覧にする。UserPromptSubmit で毎回 additionalContext を返すフックは、ターンごとの税金になる。キーワードや matcher で絞るものだけを残す。
  • 各 MCP サーバーが公開するツール名の数を数え、1 つあたりおよそ 42 から 47 トークンで見積もり、トランスクリプトで実際に呼ばれた数を確認する。
  • init やセットアップスクリプトを持つものを入れる前に、リポジトリ外への書き込みがないか読む: ~/.claude/settings.json、他のエージェントの設定ディレクトリ、認証情報ファイル、--dangerously-skip-permissions。
  • 生成コードの品質チェックは、コンテキストに入れるスキルではなく、verify ステップのリンターとして組み込む。lint ルールはターンごとのコストがゼロ。
  • トークン節約の主張を信じる前に、同じタスクをそのツールあり・なしで 3 回ずつ実行し、差を自分の min から max のばらつきと比べる。
  • 外したものは削除せずアーカイブする。それを必要とするワークフローが取り戻せるように。

さらに深掘りする

  • スキル一覧の予算と 1,536 文字の description 上限は、どのスキルも読み込みに失敗しないのに、混み合った環境が劣化する理由を説明している。"Skill descriptions are cut short" と "Skill content lifecycle" の節を読むこと s5。
  • /skill-doctor の解説は、40 個のスキルが毎ターン 3,060 トークンかかることと、どれから切るべきかを示している。盲点である、使用中のプラグイン内の高コストなスキルは続報に回されている s10。
  • 「30 個を超えるスキル」という経験則の元になった論文: 52、102、202 個のスキルのライブラリにわたる 2,545 件のトラジェクトリで、隠蔽効果を切り分けている s20。それを広めた読みやすい要約はこちら s12。
  • フックの連結と 10,000 文字の additionalContext 上限、そしてフックを Write|Edit のときだけ動かせる matcher の構文 s15。
  • 63% を削除したスレッド。削除した MCP 設定からハードコードされた bearer token が見つかった話を含む。動画では触れなかったセキュリティ上の脱線 s13。
  • Chisle 自身の README の 229 行目と 262 行目は、52% という数字をツールなしの単発プロンプトに限定し、短いコーディングのセルは caveman に譲っている。見出しの数字を引用する前に細かい注意書きを読むこと s3。
  • スタック対象外の 2 つのリポジトリは、手動で呼び出す方式で開始時のコストがゼロなので採点しなかった: Three.js シーン向けの img2threejs s21 と、Liquid Glass の表現向けの fwc-swiftui-skills s22。

Sources

  • Plugins reference, Claude Code docs. 読む理由: plugin details、インストールスコープ、そしてツール名の数を本当のコストにしている MCP ツールの遅延ロード。
  • Extend Claude with skills, Claude Code docs. 読む理由: description の上限、一覧の予算、compaction 後の再添付の予算が 1 ページにまとまっている。
  • Hooks reference, Claude Code docs. 読む理由: 同じイベントで 2 つのフックが注入するとどうなるか、そして matcher でフックをほとんどのターンから外す方法。
  • dmmulroy/anti-slop, GitHub. 読む理由: 8 個のうち唯一結果を変えたリポジトリ。ルールをベンダリングして、スキルは使わない。
  • JayPokale/Chisle, GitHub. 読む理由: 見出しの先まで読めば、自分の 52% の主張を正直に限定している README。
  • edonadei/caliper, GitHub. 読む理由: 知っておく価値のあるスキル評価ツールであり、何かを実行する前に claude_code.py を読むという教訓でもある。
  • reticlehq/reticle, GitHub. 読む理由: init codemod は、インストーラーがプロジェクトのはるか外に書き込む最も分かりやすい例。
  • Q00/ouroboros, GitHub. 読む理由: グローバルに入れたときだけ意味を持つフック駆動のワークフローで、プロジェクト単位のインストールでは満たせないセットアップ手順がある。
  • ibelick/ui-skills, GitHub. 読む理由: ここで最も安いインストール (+37 トークン) で、一度も呼ばれなかった。
  • /skill-doctor: 40 skills, 3,060 tokens a turn, dev.to. 読む理由: 実在の環境でのスキルごとのコスト内訳。
  • Too many Claude Code skills? How the listing budget decides, dev.to. 読む理由: description が切り詰められる仕組み。
  • Why More Than 30 Skills Kill Your AI Agent, dev.to. 読む理由: 隠蔽効果の論文の読みやすい版。
  • Skill shadowing paper, arXiv. 読む理由: ライブラリの大きさごとのプールした pass-rate の低下と、信頼区間。
  • I removed 63% of my Claude Code setup, Reddit r/ClaudeCode. 読む理由: 約 235 個のコンポーネントを約 87 個に減らし、削除せずアーカイブした。
  • My fresh Claude Code sessions were starting at ~35K tokens, Reddit r/ClaudeCode. 読む理由: 今日の午後にそのまま真似できる、/context all による 7 ステップの監査。
  • img2threejs/img2threejs, GitHub. 読む理由: 32,902 バイトの SKILL.md が、呼び出すまでは 107 トークンで済むことの証拠。
  • FloWritesCode/fwc-swiftui-skills, GitHub. 読む理由: 静的な Markdown のスキル。何とも衝突しえないインストールの典型。

FAQ

MCP サーバーは今でも、起動時にスキーマだけで数千トークンかかるのか?

計測したバージョンではかからない。スキーマは遅延ロードされ、コストは公開されるツール名の数に比例し、1 つあたりおよそ 42 から 47 トークン。ツール 39 個のサーバーは +1,642 トークン、ツール 2 個のサーバーは +37 トークンだった。

Chisle は出力トークンが少ないのに、なぜ baseline より高くついたのか?

ルールセットがセッション開始時に読み込まれ (+3,496 トークン)、フックが毎ターン 287 バイトを注入するから。T2 と T3 では、その入力のオーバーヘッドが、実行間のノイズを超えなかった出力の節約分を上回った。