2026年3月31日に漏洩したClaude Code(v2.1.88)のソースコードについて、先進的なAI Agentのエンジニアリングアーキテクチャを明らかにする貴重な事例として深度技術分析を行った。
記事作成者、出典:Max
本日(2026年3月31日)、Anthropicは、パッケージングプロセスの低レベルのミスにより、最新版Claude Code(v2.1.88)の完全なフロントエンドおよびクライアントソースコードをnpmリポジトリに公開してしまいました。
ユーザーが削除されていない cli.js.map ファイルを公開し、約1900個のファイル、51万行以上のネイティブTypeScriptコードを復元しました。
Anthropicにとって、これは数日前のMythosモデルドキュメントの漏洩に続く、もう一つの深刻なOpSec事故である。
しかし、大規模モデルアプリケーション層の開発者や業界研究者にとって、このソースコードは、一切の隠し事のない、極めて価値の高い最先端のAIエージェントエンジニアリングアーキテクチャのホワイトペーパーである。
規制や漏洩イベントの議論を横に置いて、私はこのソースコードをローカルで深く整理する時間を費やしました。
それをゴシップと見なすのではなく、プロダクションレベルのAIプログラミングアシスタントのアーキテクチャ事例として捉えると、従来の発想を大きく超える多くのエンジニアリング上の意思決定が含まれている。
以下は、Claude Codeの底层アーキテクチャ、スケジューリングメカニズム、メモリシステム、およびセキュリティ戦略について、客観的な視点から行なった詳細な技術的分解である。
文章はやや長めであり、AI Infra、Agent 開発、および大規模モデルのアプリケーション層アーキテクチャに興味を持つプロフェッショナルにおすすめです。
PART.01 それは単なるCLIツールではありません
ディレクトリ構造(src/ 下の約40の一次モジュール)から、Claude Code の複雑さは、現在市場で公開されている通常のモノリシックAgentをはるかに上回っていることがわかる。

その技術スタックの選定は非常に現実的で、エンドユーザーのインタラクション体験を重視しています。
言語はTypeScriptで、ランタイムにはパフォーマンスをより積極的に最適化したBunを採用し、CLIフレームワークにはCommanderを使用しています。また、ターミナルレンダリング層には予想外にもReact + Inkが使用されています。
なぜコマンドラインツールにReactを使うのですか?
ソースコード内の screens/REPL.tsx(5005 行に及ぶ)が答えを示しています。
大規模モデルのストリーミング出力と複数のツールを並行して実行するシナリオでは、ターミナルUIの状態管理が非常に複雑になります(例:思考プロセス、ツール呼び出しのプログレスバー、コードDiffのプレビューを同時にレンダリングするなど)。
高頻度のローカル更新に対応するための最適なエンジニアリング実践は、宣言的なReactと極めて簡素なZustandスタイルのカスタムStore(state/store.ts)を組み合わせることです。
運用モードでは、システムが厳密に二つの形態に分かれています:
対話型 REPL モード:Ink が駆動するフロントエンドターミナル UI を使用し、主に人間の開発者を対象としています。
ヘッドレス/SDKモード(QueryEngineクラス):UIを完全に分離し、JSONストリーミング出力をサポート。これにより、今後、CursorのようなIDEやCI/CDプロセスに下層エンジンとして組み込むための基盤を築きます。
システム起動プロセスも極限の並列化最適化を施しました。
main.tsx では、設定の読み取り(MDM Settings)やKeychainキーのプリフェッチなどのI/O集約操作をサブプロセスに配置し、メインモジュールの約135msのロードプロセスと並行して実行しています。このスタートアップ遅延に対するミリ秒単位の厳格な要件が、コードベース全体に貫かれています。
PART.02 プロンプトキャッシュ(プロンプトキャッシュ)工学
これはソースコード全体の中で最も技術的な部分であり、Claude Codeと通常のラッパーアプリの体験差を生み出す核心的な壁です。
現在、Agentツールは長文のコンテキストを処理する際に、System Promptと履歴会話を単純に連結していることが多いです。
Claude Code の services/api/claude.ts(3419行に及ぶコアインタラクションモジュール)では、プロンプトの組み立てがバイト単位まで精緻に最適化されています。
众所周知、AnthropicのPrompt Cacheメカニズムはプレフィックスマッチングを採用しています。
キャッシュヒット率を最大化するため、Claude Codeは厳密なセグメントキャッシュアーキテクチャを設計しています:
静的セクション(グローバルにキャッシュ可能):systemPromptSection() によって生成され、モデルのアイデンティティ紹介("You are Claude Code...")、システムレベルのセキュリティルール、コードスタイル制限、ツール使用の基本ガイドなどを含む。このセクションはセッション全体にわたりほぼ変化しない。
動的境界線:ソースコードには特殊なマーカー SYSTEM_PROMPT_DYNAMIC_BOUNDARY がハードコードされています。
動的セクション(セッションレベルのキャッシュ/非キャッシュ):現在の作業ディレクトリ情報(CWD)、Gitステータス、MCP(Model Context Protocol)コマンド、ユーザー設定などの頻繁に変化するデータを含みます。

また、Promptの微細な変化によるキャッシュポイズンを防ぐために、システムは見かけ上煩雑な多くのフォールバック対策を講じています:
- 決定的順序:大モデルに渡されるツールの説明(Tools Description)は、組み込みツールのプレフィックス + MCP ツールのサフィックスに基づいてアルファベット順に厳密に並べられます。
- ハッシュパスマッピング:設定ファイルのパスにはランダムなUUIDを使用せず、コンテンツに基づくハッシュ値を使用して、パスの変更によるキャッシュの破壊を回避します。
- 状態が外部化:現在利用可能なAgentのリストすら、ツールの説明から削除され、メッセージの添付ファイル(Attachments)に移動されました。ソースコードのコメントによると、この変更だけでCache Creation Tokensの消費が約10.2%削減されたとのことです。
これは、現在の業界の状況を示しています:現在の優れたAIアプリケーション層の開発は、本質的にAPIキャッシュシステムの価値を欲深く、精緻に搾取することです。
PART.03 ツールとストリーミング並列実行
Claude Code には、ファイルの読み書き、Bash 実行、ウェブスクレイピングなどを含む 40 種類以上のツールが組み込まれており、そのツールシステムアーキテクチャは高度にモジュール化されたファクトリーパターン(Factory Pattern)を採用しています。
各ツールは基本的なToolインターフェースを継承し、checkPermissions()、validateInput()、isConcurrencySafe()(並行安全かどうか)などのメソッドを実装しなければなりません。
必要に応じて読み込むToolSearchメカニズム:ツールの数が特定の閾値を超える場合、すべてのツールの説明をPromptに含めると、Tokenコストが許容できなくなります。
ソースコードには、ToolSearchという洗練された戦略が示されています:非コアツール(例:特定の分析プラグインなど)は defer_loading: true とマークされています。

モデルは、現在のプロンプト内でこれらのツールの具体的な定義を確認できず、ToolSearch ツールがあることだけを知っています。モデルが追加の機能を必要と判断した場合、まず ToolSearch を呼び出して対応するツールの設定を動的に読み込む必要があります。
StreamingToolExecutor(ストリーミングツール実行器):実行効率を向上させるため、システムはツールの並列呼び出しをサポートしています。
コーディネーター(toolOrchestration.ts)は、大規模モデルから返されたツール呼び出しリクエストを並列バッチと逐次バッチに分割します。
並列安全なツール(複数の無関係なファイルを同時に読み取る、並列でネット検索を実行するなど)は並列で実行され、並列安全でないツール(同じコードファイルを順次修正するなど)は厳密に直列で実行されます。
大規模な結果セット用のツール(例:フルディスクGrep検索)は、maxResultSizeCharsの予算を設定しており、予算を超える内容は直接切り詰められ、ローカルの一時ファイルに永続化されます。LLMにはプレビュー要約のみを返し、巨大な結果がコンテキストウィンドウを超過するのを防ぎます。
PART.04 コンテキスト汚染を解決するForkメカニズム
現在のシングルエージェントには致命的な欠陥があります:
複雑なタスク(たとえば、ファイル間でのバグの特定)を実行する際、モデルは誤ったファイルを繰り返し読み込んだり、誤ったコマンドを試したりすることがあり、この試行錯誤の過程で大量のゴミコンテキストが生成され、メインの会話が迅速に汚染され、その後の推論でモデルが精神的に分裂したり、初期の目標を忘れたりする可能性があります。
Claude Code は、この問題を解決するために、複雑な Coordinator Mode と Fork Subagent のメカニズムを導入しました。

環境変数でコーディネーターモードを有効にすると、システムはCoordinator-Workersアーキテクチャに再構築されます:
- コーディネーター:ファイルの直接操作権限を剥奪され、Agent、SendMessage、TaskStop の3つのツールのみを保持。唯一の役割はワークフローの計画(調査 → 統合 → 実装 → 検証)である。
- ワークバー(実行者):具体的なツールの説明が派生されます。
最も称賛されるのはそのフォーク継承メカニズムです。
大規模なコード探索が必要な場合、Coordinator は Explore Agent をフォークします。
このサブエージェントは、親会話のキャッシュを継承します(コスト削減のため、Prompt Cache を共有しますが、その後の探索アクションや読み取るゴミファイルは、完全に隔離されたコンテキスト内で実行されます。
探索が完了したら、サブエージェントは、抽出された重要な結論(Synthesis)を特定のXML形式を通じて、コーディネーターのメインコンテキストに返送するだけでよい。
この使用後破棄、結論のみを残す設計は、現在の業界で複雑なマルチエージェント長文共同作業を処理するための最良の実践の一つです。
この使用後破棄、結論のみを残す設計は、現在の業界で複雑なマルチエージェント長文共同作業を処理するための最良の実践の一つです。
パート05:個々のエージェントスワームの並列メカニズムの突破
文脈汚染を解決するためのシリアル Fork メカニズムに加え、ソースコードはより野心的な並列マルチエージェントアーキテクチャ——Swarm(Teammate)クラスタを示しています。
このロジックの大部分は、utils/swarm/ および tasks/ ディレクトリに隠されています。
システムは、in_process_teammateというタスクタイプをサポートしています。
このアーキテクチャでは、メインプロセスが複数のエージェント(Teammateと呼ばれる)を並列に起動し、異なるタスクを同時に実行できます。
しかし、ターミナルCLI環境で複数のエージェントを並列に実行すると、権限ポップアップの衝突とUIレンダリングの混乱という2つの致命的なエンジニアリング課題に直面する。
Anthropicの解決策は非常に洗練されています:
- リーダー権限ブリッジ(permissionSync.ts):すべてのチームメイトサブプロセスは、ユーザーに直接権限要求のポップアップを表示することはできません。権限要求は内部チャネルを通じてメインプロセスのリーダーエージェントにブリッジされ、リーダーがメインターミナルで安全にブロックし、ユーザーの確認を取得します。
- ターミナルレイアウトの自動化:ユーザーが複数の並列Agentの作業状況を明確に監視できるよう、ソースコードにはiTerm2およびTerminal.appのAppleScript制御コマンドが直接統合されています。新しいTeammateを生成すると、システムはターミナル内でペインを分割し、各サブAgentに独立した出力ウィンドウを割り当てます。
これはAIが「単体思考」から正式に「クラスタ並列協力」へと進化していることを示しています。
PART.06 Dream(梦境)メモリアーキテクチャ
今日、RAG(検索強化生成)が広く普及する中、ほぼすべてのAI製品がベクトルデータベース(Vector DB)を統合しています。
しかし驚くべきことに、Claude Codeのメモリーシステム(memdir/モジュール)は極めてレトロで実用的であり、ローカルファイルシステムに基づいています。
そのアーキテクチャは、核心となるMEMORY.md(上位インデックスとして、最大200行/25KB以内に制限)と、Frontmatter形式の複数のトピックファイルで構成されています。
メモはUser、Feedback、Project、Referenceの4つのカテゴリに細分化されています。
さらに興味深いのは、ソースコードに隠されたKAIROSアシスタントモードです。
これはまだ正式にリリースされていないデーモンモードです。
KAIROSモードでは、メモリシステムは単なるインデックスの更新ではなく、人間のログに似た追加モード(logs/YYYY/MM/YYYY-MM-DD.mdへの書き込み)を採用しています。
夜間や空き時間になると、バックグラウンドで「Dream(夢)」というオフラインタスクエージェントが起動します。

このエージェントの役割は、昼間の流水帳ログを要約・精錬し、構造化された長期テーマファイルに抽出して固定することです。
この短期ログから長期記憶への非同期統合メカニズムは、ベクトル検索の再現率の課題を回避するだけでなく、エッジAIアシスタントが常時オンで継続的に学習する方向へ進化する明確な指針を示しています。
パート07:権限の収束とセキュリティ
AIにローカルShellコマンドの実行やファイルの変更を許可することは、両刃の剣である。
頻繁にポップアップでユーザーの確認を求める 것은オートメーション体験を完全に破壊し、制限なしに自動実行するとシステムがクラッシュする可能性があります(例:誤って rm -rf を実行)。
Claude Codeは、複数層の権限収束アーキテクチャを採用しています:
@anthropic-ai/sandbox-runtimeに基づくファイル/ネットワークサンドボックスから、git push --forceなどの特定の危険な操作に対するハードコードされたブロック、さらにはツールレベルの検証まで。

しかし、最も注目すべきは、Auto Mode Classifier (yoloClassifier.ts) というコンポーネントです。
ユーザーが自動モードを有効にした場合、システムは固定の正規表現を使用してコマンドの危険性を評価するのではなく、サイドクエリメカニズムを使用します。
システムはバックグラウンドで、より小型で低コストのLLMを静かに呼び出し、現在の対話の簡略化されたトランスクリプトと実行予定のBashコマンドを渡して、このサイドモデルがAllowまたはDenyの判断を出力します。
また、システム内部にはしきい値に基づくDenial Tracking(拒否追跡)機能が備わっており、自動ツールが頻繁に拒否された場合、システムは適切に降格し、Promptingモードに切り替えて人間の介入を要求します。
この小さなAIが大きなAIを監督する動的権限システムは、従来の静的ブロッキングルールよりもはるかに柔軟です。
PART.08 いくつかの小さな隠し要素
最後に、ソースコードに多数存在するFeature Flags(VOICE_MODE、SSH_REMOTEなど)やprocess.env.USER_TYPE === 'ant'という環境変数の判定は、大手企業が内部テストと外部リリース時に異なる基準を適用していることを示している。
Anthropicの社内スタッフ(Ant-only向け)には、システムインジェクションのコード規範が極めて厳格で、甚至は強迫的である:
機能を勝手に追加しないで、要求されていない場合はリファクタリングしないでください。似たような三行のコードは、早すぎる抽象化より良いです。WHYが極めて明らかでない限り、コメントは書かないでください。テストが失敗した場合は、必ずその通りに報告してください。
一方、外部公開ビルドでは、システムプロンプトははるかに穏やかです:主題に直結し、最もシンプルな方法を試し、できるだけ簡潔に。
この対比は、大規模モデルの行動範囲がハードコードされた指示の傾向に大きく依存していることを示している。
注目すべきは、コードに二つの興味深いモジュールが含まれていることです。
潜入モード(Undercover Mode):
これはセキュリティコミュニティで議論の多い機能です。
従業員がオープンソースまたはパブリックリポジトリで作業する状況において、システムはこのモードをデフォルトで有効化しており、強制的に無効化することはできません。このモードでは、Prompt に明確に「Do not blow your cover(身份を暴露しないでください)」と指示され、AI が生成したすべての免責事項やコード名の痕跡を強制的に除去します。
公的立場から見れば、これは透明性に欠けるように見えるかもしれないが、メーカーがモデルのロールプレイと出力への干渉に対して絶対的な制御力を有していることを間接的に示している。
バディシステム(エレクトロニックペット)の隠し機能:
ソースコードには、アヒルやフクロウなどを生成する隠されたエレクトロニックペットシステムが含まれています。

ペットの生成のランダム性と決定性を確保するため、エンジニアはユーザーのIDとMulberry32疑似乱数生成アルゴリズムを組み合わせました。
TypeScript
18種の種類:duck、goose、blob、cat、dragon、octopus、owl、penguin、...
5つのレアリティ: common(60%)、uncommon(25%)、rare(10%)、epic(4%)、legendary(1%)
// 属性: デバッグ、忍耐、カオス、知恵、皮肉
// アクセサリー: クラウン、トープハット、プロペラ、ハロー、ウィザード、ビーニー、チニーダック
// 特別: 1% の確率でシニー
最も笑える細部は、ある動物種の英語名が、Anthropicの極秘内部モデルのコードネームと偶然一致していることだ(おそらく前日に漏洩した最強のClaudeカピバラ)。
コンプライアンスコードスキャナーの禁止語検出を回避するために、エンジニアはこの単語を動的に組み立てるために String.fromCharCode() を使用した。
このユーモアに満ちた極客なアプローチは、非常に真剣なインフラストラクチャコードの中で際立っています。
PART.09 何を学べるでしょうか?
短期間に核心モデルの技術ドキュメントと核心アプリケーションのソースコードが相次いで漏洩したことは、Anthropicが内部プロセス管理を見直す必要があることを示している。しかし、技術自体は無罪であり、この51万行のコードは業界にとって非常に優れた教材である。
Claude Codeの基本設計から分かるように、大規模モデルアプリケーション層のスタートアップにおいて、Promptを単に組み合わせ、ベクターデータベースを積み上げ、単純なループの外装を被せるだけの時代は終わった。
真の壁は、トークンコストへの極限の節約(Prompt Cache 最適化)、複数状態機のストリーミングスケジューリング(Coordinator と Fork メカニズム)、ユーザー意図のエラー許容とセキュリティ介入のバランス(YOLO Classifier)、およびホストオペレーティングシステムへの深度なファイルストリーム統合に築かれている。
現在、GitHub上でこれらのソースコードをフォークしたリポジトリは、DMCA要請により随时削除されるリスクにさらされています。
しかし、Claude Code が示したエンジニアリングレベルは、2026年のAIアシスタント製品に新たな技術的基準を設けた。
関係者はこの機会を活かし、その中のエンジニアリングのベストプラクティスを真剣に見直し、取り入れるべきです。
