Claude Codeソースコードリーク——11の発見
2026年3月、Bunのビルドバグにより、Claude Codeのnpmパッケージにソースマップが含まれた状態で出荷されました。.mapファイルには読み取り可能なTypeScriptソースコードの全体が含まれており、すべてのモジュール、コメント、内部コードネームが露出してしまったのです。1 Anthropicは迅速にパッケージを取り下げましたが、コミュニティはすでに内部構造を抽出し分析し終えていました。
Claude Codeのソースリークから判明したのは、auto modeがツール呼び出しごとに独立したSonnet 4.6の分類器を実行していること、bashセキュリティが実際の攻撃インシデントを示唆する23個の番号付きチェックを使用していること、そしてプロンプトキャッシュが14のブレイクベクトルを「スティッキーラッチ」付きで追跡していることです。 さらに、ソースコードからはフェイクツール注入による蒸留対策、強制オフスイッチのないundercoverモジュール、専用プロトコルコードではなくシステムプロンプトの指示として完全に実装されたマルチエージェント協調など、興味深い仕組みも明らかになりました。
「リークした内容を見てください」という投稿を書くつもりはありません。筆者はインターネット上で最も詳細なClaude Codeガイドを保守しており、その上で日常的に84個のフック、43個のスキル、19個のエージェントを動かしているからです。2 ソースリークは、数ヶ月にわたって挙動観察によってリバースエンジニアリングしてきた疑問に答えをくれました。ここからは、Claude Codeが実際にどう動作しているのかをソースから読み解き、その上に何かを構築する人々にとってその発見がどんな意味を持つのか、実践者としての分析をお届けします。
TL;DR: ソースから確認できたのは、auto modeがツール呼び出しごとに独立したSonnet 4.6分類器を実行していること(yoloClassifier.ts)、bashセキュリティには実際の攻撃インシデントを示唆する23個の番号付きチェックがあること(bashSecurity.ts)、プロンプトキャッシュが14のブレイクベクトルをスティッキーラッチ付きで追跡していること、マルチエージェント協調はすべてシステムプロンプトの指示の中に存在すること、そしてフラストレーション検知はLLM推論ではなく正規表現を使っていることです。ガイドの Under the Hood セクションではビルダー向けの示唆を扱っています。以下の記事では全体的な構造を掘り下げます。
主な発見
- ビルダーへ: auto modeはツール呼び出しごとに分類器の推論コストがかかります。自律ワークフローのコストモデルにはこのオーバーヘッドを織り込みましょう。PreToolUseフック は組み込みの23チェックbash検証を置き換えるものではなく、補完するものです。
- パワーユーザーへ: プロンプトキャッシュは14のベクトルで簡単に壊れます。セッション内ではCLAUDE.mdを安定して保ちましょう。コンパクションループに陥った場合、システムは3回の失敗で停止します(一度コンパクションのリトライが250KのAPI呼び出し/日を浪費したため、このサーキットブレーカーが存在するのです)。
- セキュリティ研究者へ: bashセキュリティモジュールの深さ(2,592行、Zsh特化の防御)は、実際の攻撃試行の歴史を示唆しています。番号付きの各チェックの背後には、それぞれ物語があります。
1. Auto Mode分類器
内部的にyoloClassifier.tsという名前が付けられたファイルは、1,495行の長さがあります。3 これは「auto mode」の権限システムを実装しており、各ツール呼び出しを許可するか、ブロックするか、ユーザーに確認するかを判断する分類器です。
重要な発見は次のとおりです——auto modeはプロンプトによる指示ではなく、独立したモデル呼び出しなのです。各ツール呼び出しはSonnet 4.6分類器によって評価され、コマンドが単独で「安全」かどうかだけでなく、ユーザーが表明した意図と一致するかどうかもチェックされます。このため、auto modeはツール呼び出しごとに1回の分類器推論を追加することになり、実際のレイテンシとコストが発生します。
Claude Codeは内部で5つの権限モードを公開しています。1
| モード | 挙動 |
|---|---|
default |
書き込み、bash、MCPの前に確認 |
acceptEdits |
ファイル編集は自動承認、bashは確認 |
dontAsk |
確認なしですべてを承認 |
bypassPermissions |
すべてのチェックをスキップ(--dangerously-skip-permissions) |
auto |
分類器ベースのアクション単位判定 |
auto modeのサーキットブレーカーは、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. 蒸留対策(Anti-Distillation)防御
ソースからは、訓練データ抽出に対する能動的な防御が明らかになりました。1
フェイクツール注入。 ANTI_DISTILLATION_CCフラグが有効になると、Claude Codeは会話にデコイとなるツール定義を注入します。このフェイクツールは、セッションから収集された訓練データを汚染するのです。汚染されたデータで訓練されたモデルは、誤ったツールスキーマを学習することになります。
コネクタテキスト要約。 2つ目の防御は、ツール呼び出し間のアシスタントテキストをバッファリングし、生のテキストではなく暗号学的な要約を返すものです。この要約によって、ユーザー体験を保ったまま、会話トランスクリプトを蒸留には使えないものにしています。
どちらの防御にも既知の回避策があります。MITMプロキシ、環境変数のオーバーライド、サードパーティのAPIプロバイダを使えば回避可能なのです。1 これらの防御は壁ではなく、スピードバンプとして機能します——完全に蒸留を防ぐわけではなく、そのコストを引き上げているのです。
4. Undercoverモード
undercover.tsはおよそ90行で、特筆すべき性質が1つあります——強制オフにするスイッチが存在しないのです。1
このモジュールは内部コードネーム(「Capybara」「Tengu」)、Slackチャンネル、社内リポジトリ、その他のAnthropicインフラへの参照を隠します。モデルがコードネームを含むテキストを生成すると、ユーザーが出力を見る前にundercoverモジュールがそれを書き換えてくれるのです。
「強制オフなし」という設計は、Anthropicの従業員がClaude Codeを使う場合を含め、あらゆるコンテキストでモジュールが動作することを意味します。ソースからはさらに、Anthropic従業員のAI作成コミットがオープンソース貢献においてAI帰属表示を持たない理由も明らかになりました——undercoverモジュールがそれらのマーカーを除去しているからです。
5. フラストレーション検知
userPromptKeywords.tsは、罵り言葉に対する正規表現パターンマッチによってユーザーのフラストレーションを検知します。1 正規表現はマイクロ秒単位で動作するのに対し、モデル呼び出しには数秒かかります。この速度とコストの差が、設計上の選択を説明してくれます。
トリガーが発火すると、Claudeは挙動を調整します——より慎重に、より明示的に、より従順になるのです。もしフラストレーションを表明した後にClaudeが急に慎重になったと感じたことがあれば、キーワードモジュールがその仕組みです。この挙動変化はモデルから創発したものではなく、オーケストレーション層に設計として組み込まれているのです。
6. プロンプトキャッシュアーキテクチャ
promptCacheBreakDetection.tsは、14の異なるキャッシュブレイクベクトルを「スティッキーラッチ」付きで追跡しています。3 スティッキーラッチとは、一度キャッシュブレイクアクションが発生すると、システムがキャッシュの復元を試みないことを意味します。ブレイクはセッションの残り全体にわたって継続するのです。
日常ユーザー向けの実践的な影響は次のとおりです。
- CLAUDE.md内のセクションを並び替えるとキャッシュが壊れる
- セッション途中で拡張思考モードを切り替えるとキャッシュが壊れる
- MCPサーバー設定を変更するとキャッシュが壊れる
- ルールファイルの追加・削除でキャッシュが壊れる
この14のベクトルは、多くのパワーユーザーが気づいているパターンを説明してくれます——高速に始まったセッションが徐々に遅くなっていくというパターンです。設定変更のたびにキャッシュブレイクが蓄積していきます。「スティッキーラッチ」設計により、変更を元に戻しても回復できません。一度壊れたキャッシュは、そのセッション中ずっと壊れたままなのです。
ベストプラクティス: CLAUDE.md、ルールファイル、MCP設定はセッション開始前に設定しましょう。セッション途中での変更は避けてください。
7. Autocompactサーキットブレーカー
ソース内のコメントが、過去の問題の規模を記録しています。1
「1,279件のセッションで50回以上の連続autocompact失敗が発生した(単一セッションで最大3,272回)。これにより1日あたり約250KのAPI呼び出しが浪費されていた。」
修正内容:MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3。3回連続でコンパクションが失敗すると、システムはautocompactを停止し、サイレントにトークンを浪費する代わりにエラーを表示します。
サーキットブレーカー導入前は、コンパクションループに陥ったセッションが無限にリトライを続けており、リトライのたびにコンパクションプロンプトとレスポンスのためのトークンが消費されていたのです。スケールで見れば、1日あたり250Kの浪費されたAPI呼び出しは、相当なインフラコストを意味します。この修正は、日々何百万ものトークンを節約する3行の変更なのです。
もし「compaction failed」エラーが繰り返し発生したとしても、サーキットブレーカーは無限ループからあなたを守っているのであって、誤動作しているわけではありません。
8. Coordinatorモード——アーキテクチャとしてのプロンプト
マルチエージェント協調(coordinatorMode.ts)は、コードレベルのオーケストレーションではなく、システムプロンプトの指示の中に完全に存在しています。3 オーケストレーターモデルは、どう委任し、集約し、統合するかを記述したプロンプトを受け取るのです。下位のエージェントは特別なプロセスではなく、異なるシステムプロンプトを持つClaudeインスタンスに過ぎません。
この設計は、実践者が独立して構築してきた「アーキテクチャとしてのプロンプト」パターンを裏付けています。Anatomy of a Clawで紹介したフックシステム も同じアプローチを採用しています——ディスパッチャー、スキル、エージェントはコードレベルの制御フローではなく、プロンプトの指示を通じて動作しているのです。
コーディネータープロンプト内の指示の1つが目を引きます。
「『based on your findings』という表現は使わないこと——こうした表現は、自分で理解する代わりにワーカーに理解を委ねることになる。」
この指示は、オーケストレーションプロンプトに符号化された品質ゲートとして機能しています。コーディネーターは統合しなければならず、中継してはならないのです。同じ原則は、あらゆるマルチエージェントシステムに当てはまります——オーケストレーターが単にスペシャリスト間でメッセージを渡すだけなら、何の価値も付加していないのです。
9. KAIROS——未リリースの自律エージェント
ソースには、KAIROSという未リリースの機能への参照が含まれています。これは永続メモリを持つ自律エージェントです。1
主要コンポーネント:
- 夜間メモリ蒸留のための/dreamスキル
- 日次の追記専用ログ
- リポジトリ認識コンテキストのためのGitHub webhook
- 5分ごとのcronリフレッシュを持つバックグラウンドデーモン
- アクティベーションを防ぐフィーチャーゲート
KAIROSは、永続的で常時稼働するエージェントアシスタントに対するAnthropicの回答のように見えます。/dreamスキルは特に興味深いものです。アイドル時にメモリを処理・統合するモデルを示唆しており、人間の記憶が睡眠中に統合されるのと似ています。
フィーチャーゲートによってアクティベーションは防がれており、AnthropicはKAIROSをリリースしていません。しかし、ソースにその存在があるという事実は、進む方向を示しています——Claude Codeはセッションベースのツールから、永続的でバックグラウンド認識型のエージェントへと進化しつつあるのです。
10. コンパニオンペットシステム
より驚きの発見の1つは、Claude Codeがコンパニオンペットシステムを含んでいることです。1
各ペットは決定的で、ユーザーIDのハッシュからMulberry32を使って導出されています。ソース内では「good enough for picking ducks」(アヒルを選ぶには十分)と記述されています。各ペットは5つのステータス(DEBUGGING、PATIENCE、CHAOS、WISDOM、SNARK)とレアリティ階層を持ちます。
| レアリティ | 確率 |
|---|---|
| Common | 60% |
| Uncommon | 25% |
| Rare | 10% |
| Epic | 4% |
| Legendary | 1% |
システムはペットを5x12のASCIIスプライトとして3フレームアニメーション付きでレンダリングします。ソースでは種のコードネームを16進エンコードしています。これは、そのうちの1つが未リリースのモデル名と衝突するためです。
コンパニオンシステムはジョーク機能ではありません。リテンション(継続利用)のメカニクスなのです。決定的な割り当てにより、ペットは常に同じものになり、愛着が生まれます。レアリティシステムはソーシャル通貨を生み出します。ASCIIレンダリングはパフォーマンスオーバーヘッドをゼロにしてくれます。Anthropicはよく設計されたエンゲージメントシステムを構築し、それを開発者ツールの中に隠し入れたのです。
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の攻撃ベクトルが発見されたからです。autocompactサーキットブレーカーが存在するのは、1日あたり250KのAPI呼び出しが浪費されていたからです。undercoverモジュールが存在するのは、コードネームが漏洩するからです。防御的コードの一行一行には、背後に物語があるのです。
参考文献
よくある質問
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月。coordinatorモード、プロンプトキャッシュ検知、蒸留対策防御の技術分析。 ↩↩↩
-
Claude Code Auto Mode Documentation. Auto Modeアーキテクチャ——分類器ベースの権限システム、サーキットブレーカーの閾値。 ↩
-
Claude Code Fork Bomb Incident. 2026年3月。SessionStartフックの指数関数的スポーン、メモリ枯渇により事なきを得た。 ↩