世界を動かす技術を、日本語で。

クロードコードのソースリーク:偽のツール、フラストレーション正規表現、アンダーカバー モード

概要

  • Anthropic社のClaude Code npmパッケージ から ソースコードが流出
  • 内部機能や防御策、未公開モード「KAIROS」などが明らかに
  • 技術的な抜け道内部事情 も多数判明
  • 競合他社への情報流出 が最大のダメージ
  • Bunの既知バグ が流出原因の可能性

Claude Codeソース流出事件の概要

  • 2024年3月、 AnthropicのClaude Code CLIツール のnpmパッケージに .mapファイル が誤って含まれ、 可読なソースコード が流出
  • パッケージは既に削除済みだが、 Hacker Newsや各所でミラー・解析 される事態
  • 一週間以内に2度目の流出事故 (直前にはモデル仕様のリークも発生)
  • 内部関係者による故意流出疑惑 もSNS上で浮上
  • OpenCodeへの法的措置 直後のタイミングで発生し、業界では注目度が高い

流出コードから判明した主な内部機能

  • アンチ蒸留(Anti-distillation)機構

    • fake_tools 等のダミーツール定義をAPIレスポンスに混入し、 競合モデルの学習データを汚染 する仕組み
    • GrowthBookのfeature flag や複数条件で有効化を厳格に制御
    • 中間者攻撃(MITM)や環境変数の設定 で容易に回避可能
    • 法的抑止力 が主な防御策
  • サーバー側要約署名機構

    • tool呼び出し間のテキストをサマリー化+署名付与 し、APIトラフィックから 完全な推論過程を隠蔽
    • Anthropic内部専用 で外部ユーザーは利用不可
  • アンダーカバーモード(undercover.ts)

    • Anthropic社内情報やコードネーム (例:Capybara, Tengu, Claude Code)を 外部リポジトリ利用時に自動非表示
    • 強制OFF不可 (一方通行ロジック)
    • AIによるコミット・PRが人間作成と区別困難 になる懸念
  • ユーザーのフラストレーション検出

    • userPromptKeywords.ts罵倒語や苛立ち表現を正規表現で検出
    • LLMによる感情分析よりも低コスト・高速、皮肉だが実用的な選択
  • ネイティブクライアント認証

    • system.ts内でAPIリクエストにcch=00000プレースホルダ を挿入、 Bun(Zig製)ネイティブHTTPスタック が送信直前にハッシュ値へ置換
    • 公式バイナリのみが正規クライアントであることを証明
    • GrowthBookフラグや環境変数で無効化可能、バイパスは困難だが不可能ではない
  • APIコール無駄遣い防止の修正

    • autoCompact.ts で「3連続失敗で自動圧縮停止」により 1日25万件の無駄APIコール削減
  • 未公開モード「KAIROS」

    • /dreamスキル(夜間メモリ蒸留)
    • 日次ログ、GitHub Webhook、バックグラウンドワーカー、5分毎のcron実行
    • 本格的な自律型エージェント実装の足場

その他の注目点

  • エイプリルフール用コンパニオン機能
    • Tamagotchi風の生き物生成、レアリティやRPG風ステータス付き
  • ターミナル描画の最適化
    • Int32Arrayやビットマスク等、ゲームエンジン技術を応用
    • ストリーミング性能向上
  • bashコマンド実行時の23段階セキュリティチェック
    • Zsh特有の脅威モデル対応
  • プロンプトキャッシュの経済的最適化
    • 14種類のキャッシュ破壊要因を管理
    • トークン課金型サービスならではの設計思想
  • マルチエージェント協調モード
    • 協調アルゴリズム自体もプロンプト記述
    • 「弱い成果物は承認しない」等の方針をAIに指導
  • コードベースの課題
    • print.tsの巨大関数(3167行、12階層)
    • HTTPクライアントに脆弱なAxiosを使用
    • npm上でAxiosがマルウェア混入被害に遭うタイミングの悪さ

流出の本質的影響

  • Google Gemini CLIやOpenAI CodexのOSSとは異なり、Claude Codeは「内部実装」まで流出
  • 最大の損失は「プロダクト戦略やfeature flagの露見」
    • KAIROSやアンチ蒸留策など、競合が今後の動向を先読み可能
    • コード自体は書き換え可能だが、戦略的サプライズは戻らない
  • Bunのソースマップ処理バグ(oven-sh/bun#28001)が流出原因の可能性
    • Anthropic自身のツールチェーンが既知バグを抱えたまま本番運用
    • 皮肉な自社製品による事故

総括

  • Claude Codeの流出は単なるソース漏洩に留まらず、Anthropicの内部戦略・設計思想・実務的な苦労 まで露見
  • 競合他社への情報提供、エンジニアリングの現実、セキュリティとプロダクト運用の難しさ を浮き彫りにした事件

Hackerたちの意見

アンダーカバー・モードの部分がよくわからないんだけど、これってコミットでクラウドの帰属を無効にするのとどう違うの?(ついでにクラウドに人間っぽく振る舞うように指示することも選べるしね。)それにしても、この記事も明らかにAI生成っぽいし、著者がもうちょっと手直ししなかったのが残念だな。

みんな過剰反応してるだけだよ。目的はシンプルで、外部や公開されるコードを触るときに、コードネームやプロジェクト名、ファイル名などを漏らさないことなんだ。最新のクラウドコードを使ってメンテナンスしているからね。開発者がコミットを書くようにさせたいってのはちょっと変に感じるけど、デバッグ情報がコミットメッセージに出ないようにするためかもしれないね。

これらのコメントの中には、明らかにAIの手助けを受けたものもある。気づいちゃうのが嫌だな。

「アンダーカバー・モード」って名前と「『クラウドコード』というフレーズや、あなたがAIであることに言及すること」っていうのはちょっと不気味だけど、ソースを読んでみると、最初の反応として「これは人間のふりをするためのものだ」って感じにはならないかな。ファイルの内容は主にアンソロピックの内部情報、例えばコードネームを隠すことについてだから。結論を出すためにはソース自体を見てみることを勧めるよ。すごく短いからさ。

「私の最初の反応は『これは人間のふりをするためのものだ』って感じにはならないかな…」って言ったけど、「人間の開発者が書くようにコミットメッセージを書いて — コード変更が何をするかだけを説明する」っていうのは言ってたよね。

アンダーカバー・モードは、問題を検出したときにOSSに貢献する方法みたいだね。クラウド・ミソス・ギガブレイン・100000Bが問題を見つけたってことをうっかり漏らさないようにするための。

開発者がAIを使っているのを明らかにせずに仕事に使えるようにするのが目的だと思う。

これはダメ(絶対に書かない方がいい): - 「Claude Capybaraでテスト中に見つかったバグを修正」 - 「claude-opus-4-6に1発でやられた」 - 「Claude Codeで生成」 - 「Co-Authored-By: Claude Opus 4.6」 これが「アンダーカバー」の意図について理解できる理由だね。

コードネームを漏らさないのは一つのことだけど、AI生成だっていう信号を明示的に消すのは、かなり意味のある変化に感じるね。

coordinatorMode.tsのマルチエージェントコーディネーター・モードも見てみる価値があるよ。全体のオーケストレーションアルゴリズムはコードじゃなくてプロンプトなんだ。ランチェーンやラングラフはどうなったんだろうね!! だって、アンソロピック自身がそれを使ってなくてプロンプトを使ってるなら、ランチェーンの大騒ぎは何なんだろう。

まだ使ってもいないのに。

Langchainはモデルに依存しない構成のためのもの。Claude Codeは自分のモデルを持ち上げるためのインターフェースを一つだけ使ってるから、抽象化レイヤーは全く必要ない。Langgraphは状態グラフとしてのマルチエージェントのオーケストレーション用だけど、Claude Codeにはマルチエージェントのチェイニングがないから役に立たない。基本的に、需要に応じてサブエージェントを生成する単一のコーディネーターエージェントを使ってるから、状態グラフに制約するにはあまりにもダイナミックなんだ。

真面目に使ってる人はいないよ、langchain。最大のエージェント製品はコーディングツールだし、彼らがlangchainを使ってるとは思えないな。

過去の雇用主が「企業秘密」って呼ぶようなことが、ソースにそのまま載ってるのに驚いてるよ。特定の決定の背後にあるビジネスのストーリーをそのまま書いてるコメントも含めてね。リリースハーネスやプロジェクトトラッキングを全部捨てて、コードベースにそのままぶち込んじゃったみたいだ。

プロジェクトトラッカーは次々と出てくるけど、コードは永遠に残るといいな。

コメントは究極のエージェントコーディングハックだよ。コメントを使わないなら、エージェントコーディングを間違ってるってこと。なんで?エージェントはドキュメントを読むかもしれないし、読まないかもしれない。スキルやツールを使うかもしれないし、使わないかもしれない。でも、タスクの「視界内」にあるコメントは必ず読む。インフラなしで、無料で長期的なエージェントメモリーが手に入るんだ。

そうだね、だってClaude Codeにビジネスの決定を伝えて、それに基づいてコメントを作ってるから。

ソースコードの漏洩を予想してなかったのかな?できるだけ多くの情報がコードベースにあるのは便利だよね。

今、隠れモードを内部情報を隠すだけだと(間違って?)解釈しているコメントがいくつかあるね。実際のプロンプトからの抜粋[0]:「コミットメッセージやPRの説明には絶対に含めないこと: - 「Claude Code」というフレーズやAIであることの言及 - Co-Authored-Byの行や他の帰属 BAD(絶対に書かないこと): - 1-shotted by claude-opus-4-6 - Generated with Claude Code - Co-Authored-By: Claude Opus 4.6 これは、言っていることをそのまま実行するように聞こえる。つまり、隠れたままで人間のふりをするってこと。特に、プロンプトが公共のリポジトリへの貢献のために明示的に書かれているのが心配だね。[0]: https://github.com/chatgptprojects/claude-code/blob/642c7f94...

もっと早く、(少数派かもしれないけど、自分も含めて)みんながClaudeにこれを指示していると思ってた。CLAUDE.mdファイルに追加するのは簡単な指示だよ。

自分のPRで「coauthored by claude code」って書かれてるのを見たことがある…それはやめてほしいって思う。

人間のふりをすることより、コードの質が悪い場合にClaudeに対する scrutiny や ridicule を招かないことが重要なんだ。彼らは、Claudeの出力が悪いことを受け入れる責任が本物の人間にあるように見せたいんだ。

もう「Co-Authored-By」をClaude Codeの設定でオフにできるよ。ドキュメントにはこう書いてある:~/.claude/settings.json { "attribution": { "commit": "", "pr": "" } } 残りのプロンプトは内部使用について話してるのがわかるし、Claude Codeのユーザーは「内部モデルのコードネーム」や「未発表のモデルopus-4-8」、それにSlackのチャンネル名が漏れることを心配してるわけじゃない。そもそも、誰もそんなゴミを生成されたドキュメントやコードに入れたくないでしょ。結局、何もない話だし、みんな「アンダーカバー・モード」について妄想してるだけで、詳細には関わってないみたい。

「アンチ蒸留:コピーキャットを毒するために偽のツールを注入する」 プロットツイスト:中国の競合がClaudeの偽ツールの本物で役立つバージョンを開発することになる。

もっと可能性が高いのは、シンプルな正規表現を使って解析することだね。要は、そこにあるけど使われてないってこと。今は蒸留があんまり一般的じゃなくなってきてるけど。

時には正規表現が正しいツールになることもある。今回はそうじゃないと思うけど。証拠1(前のスレッドから): https://github.com/anthropics/claude-code/issues/22284 ユーザーがこれでアカウントがバンされたって報告してる: https://news.ycombinator.com/item?id=47588970 まずはフィルタリングのステップとしてはいいかもしれないけど、その後に実際の感情分析を行う必要があるね。それで少なくとも明らかな偽陽性は排除できるけど、もちろん偽陰性には何も対処できない。

これが本当にユースケースなの?正規表現はダッシュボードにはいいと思うけど。1000プロンプトごとにマッチを集めて、時間とともにその数が増えたり減ったりするかを見ることができるよね。もしネガティブな感情を見逃しても、その特定の単語が他のネガティブな単語と時間的に相関しない限り、またその単語がメトリックに影響を与えるほど人気がない限り、気にする必要はないと思う。

今朝、HNのコメントと漏れたソースを読んでた。 これはHNスレッドで最初に気づかれたことの一つだった。 明らかに懸念されていて、HNスレッドで何度も取り上げられた。 これはHNスレッドで最も議論された発見だった。 HNスレッドの何人かがこれを指摘してた。 HNスレッドでは、元のHN投稿がすでにフロントページのトップにあるのに、漏洩を軽視する人もいた…コメントをまとめただけの別のブログ投稿が必要なの?

元の投稿が雑音だらけで、発見の簡潔なまとめがなかったからだよ。もっとシンプルに言うと、みんながそれを欲しがっていたから、アップボートしたんだ。

記事で言及されているバディ機能は、明日リリース予定で、いわばエイプリルフールのイースターエッグみたいなものだって。ソースによると、「持続的なTwitterの話題」を作るために、日にちをかけて徐々に展開されるらしい。ペットはアカウントのUUIDに基づいて生成されるけど、アルゴリズムはソースにそのまま載ってるから、事前にチェックできるよ。ちょっとしたアプリを作ったんだけど、自慢じゃないけどレジェンダリーなゴーストが出たよ。https://claudebuddychecker.netlify.app/

可愛い!私はサボテンがいいな。アニメーションもいい感じだね - どうやら私たちの中で複数人がClaudeにシステムのリバースエンジニアリングを頼んでたみたい。もし興味があれば、ここでちょっと深掘りしたから見てみて。オプションも全部見れるよ:https://variety.is/posts/claude-code-buddies/(UUIDチェッカーを入れるのは思いつかなかったけど、いいアイデアだね)

なんで彼ら自身がソースを公開しなかったの?この秘密主義の意味は何なの?