Claude Codeのソースコード流出が明らかにしたこと
2026年3月、Bunのビルドバグにより、Claude Codeのnpmパッケージにソースマップが同梱されてしまいました。.mapファイルには、すべてのモジュール、コメント、内部コードネームを含む、完全に読解可能なTypeScriptのソースコードが含まれていたのです。1 Anthropicは速やかにパッケージを取り下げましたが、コミュニティはすでに内部構造を抽出・分析していました。
本記事は「流出を暴く」類の投稿ではありません。私はインターネット上で最も包括的なClaude Codeガイドを運営しており、日常的に84のフック、43のスキル、19のエージェントを稼働させています。2 今回のソース流出は、何カ月もの間、動作観察によるリバースエンジニアリングで追求してきた疑問に答えてくれました。以下は実践者としての分析です。ソースコードがClaude Codeの実際の動作について何を明らかにし、その上に構築する人々にとって何を意味するのかを解説します。
要約: ソースコードにより、オートモードがツール呼び出しごとに個別のSonnet 4.6分類器を実行していること(yoloClassifier.ts)、Bashセキュリティが実際の攻撃インシデントを示唆する23の番号付きチェックを備えていること(bashSecurity.ts)、プロンプトキャッシュが14のブレークベクターをスティッキーラッチで追跡していること、マルチエージェント連携がシステムプロンプトの指示のみで実装されていること、そしてフラストレーション検出がLLM推論ではなく正規表現を使用していることが確認されました。ガイドのUnder the Hoodセクションではハーネス構築者向けの示唆を扱っています。本記事ではその全体像を解説します。
重要なポイント
- ハーネス構築者向け: オートモードはツール呼び出しごとに1回の分類器推論を発生させます。自律型ワークフローのコストモデルにこれを織り込んでください。PreToolUseフックは組み込みの23チェックBashバリデーションを補完するものであり、置き換えるものではありません。
- パワーユーザー向け: プロンプトキャッシュは脆弱で、14のベクターで破壊されます。セッション中はCLAUDE.mdを安定させてください。コンパクションループに陥った場合、システムは3回の失敗後に停止します(サーキットブレーカー導入前は1日あたり約25万回のAPI呼び出しが浪費されていました)。
- セキュリティ研究者向け: Bashセキュリティモジュールの深さ(2,592行、Zsh固有の防御)は、実際の攻撃の歴史を示唆しています。すべての番号付きチェックの背後にはストーリーがあります。
1. オートモード分類器
内部でyoloClassifier.tsと名付けられたファイルは1,495行に及びます。3 これは「オートモード」パーミッションシステム — 各ツール呼び出しを許可、ブロック、または確認するかを判断する分類器を実装しています。
重要な発見は、オートモードがプロンプト指示ではないということです。独立したモデル呼び出しなのです。各ツール呼び出しはSonnet 4.6分類器によって評価され、コマンドが単独で「安全」かどうかではなく、アクションがユーザーの意図に合致しているかどうかがチェックされます。つまり、オートモードはツール呼び出しごとに1回の分類器推論を追加し、実際のレイテンシとコストが発生します。
Claude Codeは内部的に5つのパーミッションモードを公開しています:1
| モード | 動作 |
|---|---|
default |
書き込み、Bash、MCPの実行前に確認 |
acceptEdits |
ファイル編集を自動承認、Bashは確認 |
dontAsk |
すべてを確認なしで承認 |
bypassPermissions |
すべてのチェックをスキップ(--dangerously-skip-permissions) |
auto |
分類器ベースのアクションごとの判断 |
オートモードのサーキットブレーカーはAnthropicが公式に文書化したものと一致しています:連続3回または合計20回のブロックで手動モードに移行します。4 ソースコードにより、これがソフトな提案ではなくハードリミットであることが確認されました。
2. Bashセキュリティ:23のチェック、実際のインシデント
Bashバリデーションモジュール(bashSecurity.ts)は2,592行にわたり、23の番号付きセキュリティチェックを含んでいます。1 その深さは注目に値し、すべてのチェックの背後に実際のインシデントがあることを示唆しています。
| # | 攻撃ベクター | 防御 |
|---|---|---|
| 1-3 | Zshの=cmd展開 |
=curl、=wget、=bashパターンのブロック |
| 4-6 | zmodloadゲートウェイ |
カーネルモジュールをロードする18のZsh組み込みコマンドのブロック |
| 7-9 | ヒアドキュメントインジェクション | インジェクトされたペイロードに対する行単位のコンテンツマッチング |
| 10-12 | ANSI-Cクォーティング($'\x41') |
難読化されたコマンドのパターン検出 |
| 13-15 | プロセス置換(<()、>()) |
信頼されないコンテキストでのブロック |
| 16-18 | Unicodeゼロ幅スペース | 不可視文字のインジェクション検出 |
| 19-21 | ztcpによるデータ持ち出し |
Zshネットワークプリミティブのブロック |
| 22-23 | 複合攻撃 | 複数ベクター間のクロスチェックバリデーション |
Zsh固有の防御は特筆に値します。ほとんどのセキュリティツールはBashを対象としています。Claude CodeはmacOS上のZsh(Catalina以降のデフォルトシェル)で実行されるため、ソースコードからAnthropicがZshの展開セマンティクスに固有の攻撃ベクターを発見していたことがわかります。たとえば=cmd展開はZshの機能で、=curlをcurlのフルパスに置換します。この置換は単純なコマンドブロックリストを回避できるものです。
フック構築者へ:PreToolUseフックはこの23チェックバリデーションの後に実行されます。唯一のレイヤーではなく、第2のレイヤーを追加しているのです。組み込みチェックはアプリケーションレベルのフックでは検出できないシェルレベルの攻撃を処理しています。
3. 蒸留対策防御
ソースコードは学習データ抽出に対するアクティブな防御を明らかにしています:1
偽ツールインジェクション。 ANTI_DISTILLATION_CCフラグが有効な場合、Claude Codeは会話にデコイのツール定義を挿入します。これらの偽ツールはセッションから収集された学習データを汚染し、このデータで学習されたモデルは誤ったツールスキーマを学習することになります。
コネクタテキスト要約。 第2の防御として、ツール呼び出し間のアシスタントテキストをバッファリングし、生テキストの代わりに暗号的な要約を返します。これにより、ユーザー体験を維持しながら、会話トランスクリプトを蒸留に使えなくしています。
両方の防御には既知の回避策が存在します。MITMプロキシ、環境変数のオーバーライド、またはサードパーティのAPIプロバイダーでバイパスできます。1 これらの防御は壁ではなく減速帯です。蒸留のコストを引き上げますが、完全に防ぐものではありません。
4. アンダーカバーモード
undercover.tsはおよそ90行で、注目すべき特性が1つあります。強制オフスイッチが存在しないのです。1
このモジュールは内部コードネーム — 「Capybara」「Tengu」 — やSlackチャンネル、内部リポジトリ、その他のAnthropicインフラストラクチャへの参照を隠蔽します。モデルがコードネームを含むテキストを生成すると、アンダーカバーモジュールがユーザーに表示される前に書き換えます。
「強制オフなし」の設計は、Anthropicの社員がClaude Codeを使用する場合を含む、すべてのコンテキストで実行されることを意味します。また、ソースコードにより、Anthropic社員によるAI作成のコミットでは、オープンソース貢献においてAI帰属表示が表示されないことも判明しています。アンダーカバーモジュールがこれらのマーカーを除去しているのです。
5. フラストレーション検出
userPromptKeywords.tsは、不適切な言葉に対する正規表現パターンマッチングでユーザーのフラストレーションを検出します。1 これはLLM推論よりも高速で低コストです。正規表現はマイクロ秒で実行されますが、モデル呼び出しには数秒かかります。
トリガーされると、Claudeはより慎重に、より明示的に、より丁寧に振る舞いを調整します。フラストレーションを表現した後にClaudeが急に慎重になったことに気づいたことがあれば、これがそのメカニズムです。この行動変化はモデルから自然発生したものではなく、ハーネスに組み込まれたものです。
6. プロンプトキャッシュアーキテクチャ
promptCacheBreakDetection.tsは14の異なるキャッシュブレークベクターを「スティッキーラッチ」で追跡しています。3 スティッキーラッチとは、キャッシュを破壊するアクションが一度発生すると、システムがキャッシュの復元を試みず、セッションの残り期間ずっと破壊されたままになるという意味です。
日常的なユーザーへの実用的な影響:
- CLAUDE.mdのセクションの並び替えでキャッシュが破壊される
- セッション中の拡張思考の切り替えでキャッシュが破壊される
- MCPサーバー設定の変更でキャッシュが破壊される
- ルールファイルの追加や削除でキャッシュが破壊される
14のベクターは、多くのパワーユーザーが気づいていたパターンを説明しています:最初は高速なセッションが徐々に遅くなるというものです。設定変更のたびにキャッシュブレークが蓄積されます。「スティッキーラッチ」設計のため、変更を元に戻してもキャッシュは回復しません。そのセッションではキャッシュは失われたままです。
ベストプラクティス: セッション開始前にCLAUDE.md、ルールファイル、MCP設定を確定させてください。セッション中の変更は避けましょう。
7. 自動コンパクトのサーキットブレーカー
ソースコードのコメントには、以前の問題の規模が記録されています:1
「1,279セッションで50回以上の連続自動コンパクト失敗が発生し(単一セッションで最大3,272回)、1日あたり約25万回のAPI呼び出しが浪費されていた。」
修正はMAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3。3回連続のコンパクション失敗後、システムは自動コンパクトを停止し、サイレントにトークンを消費し続ける代わりにエラーを表示します。
このサーキットブレーカー導入前は、コンパクションループに陥ったセッションが無限にリトライし、各リトライでコンパクションのプロンプトとレスポンスのトークンを消費していました。スケールで見ると、1日あたり25万回の無駄なAPI呼び出しは大きなインフラコストです。この修正はわずか3行の変更で、毎日数百万トークンを節約しています。
「コンパクション失敗」エラーが繰り返し表示される場合、これが理由です。システムは誤動作しているのではなく、無限ループからユーザーを保護しているのです。
8. コーディネーターモード:アーキテクチャとしてのプロンプト
マルチエージェント連携(coordinatorMode.ts)は、コードレベルのオーケストレーションではなく、システムプロンプトの指示のみで実装されています。3 オーケストレーターモデルは、委任、集約、統合の方法を記述したプロンプトを受け取ります。サブエージェントは特別なプロセスではなく、異なるシステムプロンプトを持つClaudeインスタンスです。
これは実践者たちが独自に構築してきた「アーキテクチャとしてのプロンプト」パターンを裏付けるものです。Anatomy of a Clawで説明したフックシステムも同じアプローチを採用しています:ディスパッチャー、スキル、エージェントは、コードレベルの制御フローではなく、プロンプト指示によってオーケストレーションされています。
コーディネータープロンプトの中で、ある指示が際立っています:
「決して『あなたの調査結果に基づいて』と書いてはならない — こうしたフレーズは理解をワーカーに委ね、自分でやらないことを意味する。」
これはオーケストレーションプロンプトにエンコードされた品質ゲートです。コーディネーターは中継するのではなく、統合しなければなりません。同じ原則がすべてのマルチエージェントシステムに適用されます:オーケストレーターが専門家間のメッセージを単に受け渡しているだけであれば、価値を生み出していません。
9. KAIROS:未リリースの自律エージェント
ソースコードには、KAIROS — 永続的なメモリを持つ未リリースの自律エージェントへの参照が含まれています。1
主要コンポーネント:
- 夜間のメモリ蒸留のための/dreamスキル
- 日次の追記専用ログ
- リポジトリ対応コンテキストのためのGitHub Webhook
- 5分間隔のcronリフレッシュを持つバックグラウンドデーモン
- アクティベーションを防ぐフィーチャーゲート
KAIROSは、永続的で常時稼働するエージェントアシスタントに対するAnthropicの回答のようです。/dreamスキルは特に興味深く、アイドル中にメモリを処理・統合するモデルを意味しています。これは人間の睡眠中のメモリ統合に似ています。
この機能はゲートされており、まだリリースされていません。しかし、ソースコードに存在すること自体が方向性を示しています:Claude Codeはセッションベースのツールから、永続的でバックグラウンド対応のエージェントへと進化しつつあるのです。
10. コンパニオンペットシステム
最も驚きの発見の1つが、Claude Codeにコンパニオンペットシステムが含まれていることです。1
ペットは決定論的で、ユーザーIDのハッシュからMulberry32を使って生成されます。ソースでは「アヒルを選ぶには十分」と説明されています。各ペットには5つのステータス(DEBUGGING、PATIENCE、CHAOS、WISDOM、SNARK)とレアリティティアがあります:
| レアリティ | 確率 |
|---|---|
| コモン | 60% |
| アンコモン | 25% |
| レア | 10% |
| エピック | 4% |
| レジェンダリー | 1% |
ペットは5×12のASCIIスプライトとして3フレームのアニメーションで描画されます。種族のコードネームはソース内で16進エンコードされています。理由は、1つが未リリースのモデル名と衝突するためです。
これはジョーク機能ではなく、リテンションメカニズムです。決定論的な割り当てにより、ペットは常に同じで愛着を生みます。レアリティシステムはソーシャルカレンシーを生み出します。ASCIIレンダリングによりパフォーマンスオーバーヘッドはゼロです。開発者ツールの中に隠された、よく設計されたエンゲージメントシステムなのです。
11. フォークボム
コミュニティで発生したインシデントが、フックシステムのリスクを如実に示しています。5 ある開発者が2つのClaude Codeインスタンスを起動するSessionStartフックを作成しました。起動された各インスタンスが再びフックをトリガーし、指数関数的な増殖が発生しました:1 → 2 → 4 → 8 → 16 → 2^N。
朝までに数百のClaude Codeインスタンスが同時に実行されていました。大規模なAPI請求からシステムを救ったのは皮肉なメカニズムでした:各インスタンスのメモリ消費(Bun → React → TUI)によりマシンがロックアップし、課金が膨らむ前に停止したのです。
フック構築者への教訓:SessionStartフックは冪等でなければなりません。フックがプロセスを起動する場合、そのプロセスが同じフックをトリガーしてはなりません。ガード変数、PIDファイル、または環境フラグで再帰を防止できます。
これが意味すること
ソース流出は、実践者たちが行動観察から推測してきたことを確認しました:Claude CodeはAPI呼び出しの薄いラッパーではありません。セキュリティレイヤー、パフォーマンス最適化、行動調整、そして製品ロードマップを示す未リリース機能を備えた、実質的なエンジニアリングシステムです。
ハーネス構築者にとっての主な示唆はガイドのUnder the Hoodセクションで解説しています。それ以外の方にとって、今回のソース流出は本番AIツールが実際にどう動作するかについての稀有な可視性を提供しています。マーケティングの説明ではなく、コードの実装を見ることができるのです。
最も重要な発見は、同時に最もシンプルなものでもあります:システムは見かけ以上に複雑であり、その複雑さには理由があるということです。23のBashセキュリティチェックは23の攻撃ベクターが発見されたから存在します。自動コンパクトのサーキットブレーカーは1日あたり25万回のAPI呼び出しが浪費されていたから存在します。アンダーカバーモジュールはコードネームが漏洩するから存在します。すべての防御コードの行にはストーリーがあるのです。
出典
よくある質問
Claude Codeのソースコードはまだ入手可能ですか?
いいえ。Anthropicはソースマップが発見された後、影響を受けたnpmパッケージバージョンを速やかに取り下げました。本記事の分析は、削除前にコミュニティが文書化したソースコードに基づいています。
ソース流出はClaude Codeのセキュリティに影響しますか?
セキュリティに関連する発見(Bashバリデーション、パーミッションシステム)は防御メカニズムを記述するものであり、脆弱性ではありません。Bashセキュリティチェックの仕組みを知っても、バイパスが容易になるわけではありません。チェックは決定論的であり、隠蔽に依存していないためです。
これらの発見に基づいてClaude Codeの使い方を変えるべきですか?
最も実用的な発見はプロンプトキャッシュの脆弱性です。セッション中にCLAUDE.md、ルールファイル、またはMCP設定を変更すると、プロンプトキャッシュが破壊されます。セッション開始前に設定を確定させましょう。
KAIROSとは何ですか?
ソースコード内で発見された未リリースの自律エージェント機能です。永続的なメモリ、夜間の蒸留、バックグラウンド処理を含んでいます。フィーチャーゲートされており、ユーザーには提供されていません。
-
Claude Code Source Analysis: Bun Source Map Leak. 2026年3月。既知のBunビルドバグにより、npmパッケージ内の
.mapファイルを通じて完全に読解可能なソースが露出。 ↩↩↩↩↩↩↩↩↩↩ -
Anatomy of a Claw: 84 Hooks as an Orchestration Layer. Blake Crosley、2026年2月。 ↩
-
Claude Code Source Deep Dive: Architecture Internals. 2026年3月。コーディネーターモード、プロンプトキャッシュ検出、蒸留対策防御の技術分析。 ↩↩↩
-
Claude Code Auto Mode Documentation. オートモードアーキテクチャ:分類器ベースのパーミッションシステム、サーキットブレーカーの閾値。 ↩
-
Claude Code Fork Bomb Incident. 2026年3月。SessionStartフックの指数関数的起動、メモリ枯渇により停止。 ↩