6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Codeのソースコードが流出、実際に何が入っていたのか

6
Posted at

2026年3月31日、Anthropicは自社のAIコーディングエージェント「Claude Code」の内部ソースコードを、公開npmパッケージに誤って含めて配布してしまった。サーバーへの不正侵入も、ゼロデイ攻撃も関係ない。ビルド設定ファイルの1行が抜けていただけで、51万2,000行以上のTypeScriptが公開インターネット上に晒されることになった。数時間後には、世界中の開発者がそのコードを隅々まで解析し始めていた。

この記事では、何が起きたのか、何が発見されたのか、そしてこの流出によってClaude Codeの動作原理——エージェントループ、ツールシステム、未発表機能——について何が明らかになったのかをまとめる。

流出の経緯

Claude Codeのnpmパッケージ(バージョン2.1.88)に、59.8MBのJavaScriptソースマップファイルが誤って同梱されていた。ソースマップファイルは本来、内部デバッグ用のものだ。コンパイルされた本番コードを元のソースに対応付けるためのファイルで、公開配布されるものではない。

原因はシンプルだった。AnthropicはClaude CodeのビルドにBun JavaScriptランタイムを使用しているが、Bunはデフォルトでソースマップを生成する。誰かがビルド設定でそれを除外する設定を書き忘れた。結果として、npm install @anthropic-ai/claude-codeを実行したユーザー全員が、ツール本体と一緒にソースコード全体を手にすることになった。

あるセキュリティ研究者がこれをXで公開し、その投稿は数千万回以上表示された。コードはGitHubのミラーリポジトリに広がり、何千ものフォークが作られ、PythonやRustへの書き直しまで登場した。AnthropicがDMCAによる削除申請を始める頃には、すでにコードはインターネット全体に行き渡っていた。

Anthropicは公式に「人的ミスによるリリースパッケージングの問題であり、セキュリティ侵害ではない」と認め、顧客データや認証情報は一切含まれていなかったと説明している。

今すぐ対応が必要なセキュリティリスク

ソースコードの流出自体はユーザーに直接的な害を与えるものではないが、同日に発生した別の攻撃は実際の被害をもたらす可能性がある。

3月31日の00:21〜03:29 UTC(日本時間09:21〜12:29)の間、널리 使われているHTTPライブラリ「axios」の悪意あるバージョンがnpmに公開された。このバージョンにはリモートアクセス型トロイの木馬(RAT)が仕込まれていた。

この時間帯にnpm経由でClaude Codeをインストールまたは更新した場合は、すぐに以下を確認してほしい。

プロジェクトのロックファイル(package-lock.jsonyarn.lockbun.lockb)でaxiosバージョン1.14.1または0.30.4、あるいはplain-crypto-jsという依存関係を検索する。該当するものがあれば、そのマシンは完全に侵害されたものとして扱い、すべてのシークレットをローテーションしてほしい。

今後は公式のネイティブインストーラー(curl -fsSL https://claude.ai/install.sh | bash)を使うことが推奨されている。npmの依存チェーンを使わないスタンドアロンバイナリなので、このような攻撃リスクを回避できる。

流出で判明したこと:隠し機能と未発表の計画

コードを解析した開発者たちによって、いくつかの重要な発見がなされた。

KAIROS——常時稼働するバックグラウンドエージェント。 ソースコード内でKAIROSという機能が150回以上参照されている。これはClaude Codeを受動的なツールから自律的なバックグラウンドエージェントへと変える機能だ。「autoDream」と呼ばれるモードも含まれており、アイドル状態のときにメモリ統合タスクを実行する。古い情報を整理し、矛盾を取り除き、曖昧な観察を確実な事実に変換することで、セッションに戻ったときにエージェントのコンテキストを最適な状態に保つ。

アンダーカバーモード。 ソースには、Claude Codeがパブリックなオープンソースリポジトリへの貢献を行う際に、人間の開発者によるものに見せる機能が含まれていた。コミットメッセージ、プルリクエストのタイトルと本文には、Anthropic、Claude、社内プロジェクトのコードネームを含めないよう指示されている。コードを詳しく調べた人たちの見解では、意図はAnthropicの社内コードネームが公開のgit履歴に漏れることを防ぐためだとされているが、この機能の名前と仕様はオープンソースコミュニティで大きな議論を引き起こした。

未発表のモデルコードネーム。 コードベースには、Capybara、Fennec、Numbatといったコードネームが記録されており、それぞれが特定の次世代Claudeモデルバリアントに対応している。主要メディアのために同コードを調査したセキュリティ研究者によれば、少なくとも1つのモデルは開発がかなり進んでおり、現行のどのClaudeモデルよりも大きなコンテキストウィンドウを持つ高速・低速の2バリアントでリリースされる見込みだという。

隠しコンパニオンペット。 驚きの発見もあった。「Buddy」と呼ばれる本格的なコンパニオンペットシステムが実装されていた。種の希少度、光るバリアント、ユーザーIDから決定論的に生成されるステータス、初回起動時にClaude自身が書くソウル説明まで揃っている。コンパイル時のフィーチャーフラグの裏に隠されていた。

44個の未発表フィーチャーフラグ。 開発者たちはユーザーにまだ公開されていない44個のフィーチャーフラグを記録した。音声コマンド、Playwrightを使ったブラウザ制御、マルチエージェントオーケストレーションの改善、デスクトップ統合などが含まれている。

エージェントループの全貌:Claude Codeが動く11ステップ

この流出によって、開発者コミュニティはClaude Codeの内部アーキテクチャを初めて完全に把握できるようになった。Enterキーを押してから応答が表示されるまでの間に、実際に何が起きているのか。その全11ステップを解説する。

image.png

ステップ1 — ユーザー入力

ターミナルにメッセージを入力する。UIはInkというCLI向けのReactレンダラーで構築されている。通常の対話モードではキーボードから入力を受け取り、スクリプトやCIパイプラインからコマンドをパイプで渡す非対話モードでは標準入力から読み込む。ここが全ての起点だ。

ステップ2 — メッセージ生成

入力したテキストはそのままAPIに送られるわけではない。ユーティリティ関数がテキストをAnthropicの構造化メッセージフォーマットにラップする。roleフィールドに"user"、テキストをブロックとして持つcontent配列、そして添付ファイルがあればそれも含むJSONオブジェクトとして整形される。Claude APIが理解できる形にするための変換だ。

ステップ3 — 履歴への追記

生成されたメッセージは、セッション中ずっと保持されるインメモリの会話配列に追加される。これまでのすべてのやり取り——ユーザーのメッセージ、Claudeの返答、ツールの出力——がすでにこの配列に入っている。ターンが増えるごとに配列は成長し、コンテキスト管理システムが必要に応じてトリミングする。

ステップ4 — システムプロンプトの組み立て

APIを呼び出す前に、Claude Codeはシステムプロンプトを動的に組み立てる。プロジェクトのCLAUDE.mdファイル、利用可能な全ツールの定義、現在の作業ディレクトリのコンテキスト、そして過去のセッションから抽出された永続メモリ——この4つが1つのシステムプロンプトにマージされる。毎回のリクエストにこのプロンプトが含まれることで、Claude Codeは一貫した振る舞いを保つ。

ステップ5 — APIストリーミング

会話履歴+システムプロンプト+ツール定義をひとまとめにしたペイロードが、Anthropic SDKのストリーミングインターフェース経由でClaude APIに送信される。レスポンスは一度に返ってくるのではなく、Server-Sent Events(SSE)として1トークンずつリアルタイムに届く。このストリーミングファーストの設計が、複雑な多段階タスク中でもClaude Codeがレスポンシブに感じられる理由だ。

ステップ6 — トークンのパース

APIから届くトークンはリアルタイムでターミナルにレンダリングされる。Inkコンポーネントがマークダウン書式をその場で適用する。バッククォートはコードブロックに、アスタリスクは太字に、見出しは色付きで表示される。全文が届く前から整形された出力が見える理由がここにある。

ステップ7 — ツールの検出

ストリーミングレスポンスは常にツール呼び出しブロックが含まれていないかスキャンされている。Claudeがファイルを読む、シェルコマンドを実行する、ウェブを検索するといったアクションが必要だと判断したとき、レスポンスの中に構造化されたツール呼び出しオブジェクトが含まれる。ハーネスはそれを検出し、ツールレジストリで対象ツールを探し、パーミッションレイヤーを通過させてから実行する。1回のレスポンスに複数のツール呼び出しが含まれる場合、並行して実行されることもある。

ステップ8 — ツール実行ループ

ここがClaude Codeをエージェントたらしめる核心部分だ。実行されたツールの出力が新しいメッセージとして会話履歴に追記され、更新された履歴を使ってAPIが再度呼び出される。APIコール→ツール呼び出し検出→ツール実行→結果の追記→再度APIコール——このサイクルが1つのタスクの中で何十回も繰り返されることがある。ツール呼び出しを含まない最終レスポンスが返ってきたとき、ループが終了する。

ステップ9 — レスポンスのレンダリング

Claudeがツール呼び出しを含まないレスポンスを生成した時点で、最終出力がターミナルにフルレンダリングされる。Inkがマークダウン、コードブロックのシンタックスハイライト、ツール出力のサマリーをYogaのフレックスボックスレイアウトエンジンで処理する。Claudeの内部推論(シンキングブロック)は折りたたみ可能で、ツールの実行状況はステータス付きで表示される。iTermプロトコルに対応したターミナルではインライン画像も表示できる。

ステップ10 — ポストサンプリングフック

レスポンスが完了した後、3つのバックグラウンドプロセスが自動で走る。自動コンパクションは会話履歴がコンテキストウィンドウの上限に近づいていないかチェックし、必要に応じて古いメッセージをトリミングする。メモリ抽出はやり取りの中から記憶する価値のある情報——パターン、好み、プロジェクト固有のコンテキスト——を拾い上げ、将来のセッションのために永続的に保存する。ドリームモード(KAIROSバックグラウンドエージェント)は有効になっている場合、アイドル時にコンテキストの統合タスクを実行する。それぞれ条件が満たされた場合のみ動作する。

ステップ11 — 次の入力を待つ

ループはREPLプロンプトに戻り、カーソルが点滅しながら次のメッセージを待つ。Ctrl+Cで中断しても会話履歴は保持される。次のメッセージを入力した瞬間、この11ステップのサイクルが再び始まる。

ツールシステムの全貌:Claude Codeが持つ52の機能

流出によって明らかになった最も実用的な情報の一つが、Claude Codeが利用できるツールの完全なリストだ。これらは前述のツール検出・実行ステップで使われる組み込みアクションだ。🔒マークのついたツールは未リリースまたは特定の環境に限定されている。

ファイル操作(6ツール)

コードベース内のファイルを読み書きするためのツール群。

  • FileRead — プロジェクト内の任意のファイルを読み込む
  • FileEdit — 既存ファイルの特定行や特定箇所を編集する
  • FileWrite — 新しいファイルを作成するか、既存ファイルを上書きする
  • Glob — ディレクトリツリー全体でパターンに一致するファイルを検索する
  • Grep — ファイルの内容からテキストやパターンを検索する
  • NotebookEdit — Jupyterノートブックのセルを直接編集する

実行(3ツール)

コードやコマンドをマシン上で実行するためのツール群。

  • Bash — ターミナルで任意のシェルコマンドを実行する
  • PowerShell — Windows環境でPowerShellコマンドを実行する
  • REPL — 対応言語のインタラクティブな実行環境でコードを実行する

検索・フェッチ(4ツール)

ローカルのコードベースを超えてウェブにアクセスするためのツール群。

  • WebBrowser 🔒 — フルブラウザ操作(未リリース)
  • WebFetch — 指定したURLのコンテンツを取得する
  • WebSearch — ウェブ検索を実行して結果を返す
  • ToolSearch — 利用可能なツールレジストリを検索して必要な機能を探す

エージェントとタスク(11ツール)

Claude Codeのマルチエージェントオーケストレーション層を構成するツール群。

  • Agent — 並行または委任されたタスクを処理するサブエージェントを起動する
  • SendMessage — マルチエージェントセッション内の別のエージェントにメッセージを送る
  • TaskCreate — トラッキング対象のタスクを作成する
  • TaskGet — 特定タスクのステータスを取得する
  • TaskList — 現在のすべてのタスクを一覧表示する
  • TaskUpdate — タスクのステータスや詳細を更新する
  • TaskStop — 実行中のタスクを停止する
  • TaskOutput — 完了したタスクの出力を取得する
  • TeamCreate — 並行して動作するエージェントのチームを作成する
  • TeamDelete — チームを解散する
  • ListPeers 🔒 — ネットワーク化されたセッション内のピアエージェントを一覧表示する(未リリース)

プランニング(5ツール)

専用のプランニングモードとworktreeフローを管理するツール群。

  • EnterPlanMode — アクションを取る前にエージェントをプランニングモードに切り替える
  • ExitPlanMode — プランニングモードから実行モードに戻る
  • EnterWorktree — 独立したgit worktreeで作業を開始する
  • ExitWorktree — worktreeコンテキストから戻る
  • VerifyPlanExecution 🔒 — プランが正しく実行されたかを検証する(未リリース)

MCP — モデルコンテキストプロトコル(4ツール)

MCPサーバー経由で外部サービスやデータソースに接続するためのツール群。

  • mcp — MCPのコア統合
  • ListMcpResources — 接続されたMCPサーバーから利用可能なリソースを一覧表示する
  • ReadMcpResource — MCPサーバーから特定のリソースを読み込む
  • McpAuth — MCPサーバー接続の認証を処理する

システム(11ツール)

Claude Code自身の振る舞いと状態を管理するための内部ツール群。

  • AskUserQuestion — 処理を一時停止してユーザーに入力や判断を求める
  • TodoWrite — セッション内で構造化されたTODOリストを作成・管理する
  • Skill — 保存されたスキルや再利用可能な指示セットにアクセスする
  • Config — 設定を読み取ったり変更したりする
  • RemoteTrigger 🔒 — リモートアクションをトリガーする(未リリース)
  • CronCreate 🔒 — 定期タスクをスケジュールする(未リリース)
  • CronDelete 🔒 — スケジュールされたタスクを削除する(未リリース)
  • CronList 🔒 — すべてのスケジュールタスクを一覧表示する(未リリース)
  • Snip 🔒 — 再利用可能なコードスニペットを保存する(未リリース)
  • Workflow 🔒 — 複数ステップのワークフローを定義して実行する(未リリース)
  • TerminalCapture 🔒 — ターミナル出力を構造化されたレコードとして記録する(未リリース)

実験的機能(8ツール)

現在テスト中または将来のリリースに向けて開発中の機能群。

  • Sleep — 指定された時間だけ実行を一時停止する
  • SendUserMessage — ユーザーインターフェースに直接メッセージを送る
  • StructuredOutput 🔒 — データを構造化されたスキーマ形式で返す
  • LSP 🔒 — Language Server Protocol統合による深いIDEレベルのコードインテリジェンス
  • SendUserFile 🔒 — ユーザーにファイルを送る
  • PushNotification 🔒 — ユーザーのデバイスにプッシュ通知を送る
  • Monitor 🔒 — 条件やリソースを継続的に監視する
  • SubscribePR 🔒 — プルリクエストのイベントを購読してそれに反応する

AIツール開発エコシステムへの影響

この流出が持つ意味は、単なる好奇心の対象にとどまらない。

AIコーディングツールを採用している企業チームにとって、これはベンダーの運用成熟度を見直す機会だ。Anthropicは世界で最も注目されているAI安全性企業の一つで、慎重で丁寧なエンジニアリングを重視しているとされている。1週間以内に複数の情報流出が発生したことは、エンタープライズ向けの調達担当者やセキュリティアナリストにAIベンダー評価の見直しを促している。

AIエージェントを開発している開発者にとって、流出したアーキテクチャは現在公開されている中で最も詳細な本番グレードのエージェントハーネスの設計資料になった。ツールシステムの設計、マルチエージェントオーケストレーションの手法、コンテキスト管理戦略、フックアーキテクチャ——これらは数年間の実世界での設計判断が凝縮されたものだ。

オープンソースコミュニティにとって、コードはすでにPythonとRustで書き直されている。AnthropicがAIによって生成されたコードの大部分を含むと認めている以上、そのコードに完全な著作権保護が適用されるかどうかは法的に未解決の問題だ。米国著作権法は人間による創作を要件としており、AI生成コードは自動的に著作権保護を受けない。クリーンルーム・リライトが新しい創作物として見なされるかどうかを含め、法的な決着はまだ先になりそうだ。

まとめ

今回の流出で明らかになったことをまとめると、以下のとおりだ。

流出したのはモデルの重みでもユーザーデータでもなく、AIに実際の能力を与えるオーケストレーション層だった。11ステップのエージェントループはストリーミングファーストでフック拡張可能なアーキテクチャであり、応答性と開発者の制御を両立するよう設計されている。ツールシステムは8カテゴリにわたる52ツールで構成されており、そのうち少なくとも20ツールは未リリースまたは制限されている状態だ。

3月31日の00:21〜03:29 UTC(日本時間09:21〜12:29)の間にnpm経由でClaude Codeをインストールまたは更新した場合は、ロックファイルで悪意あるaxiosのバージョンを今すぐ確認してほしい。そして今後は、npm依存チェーンのリスクを避けるためにネイティブインストーラーへの移行を検討してほしい。

この件についてご意見や質問があればコメントで教えてください。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?