- Anthropicがnpmパッケージをソースマップ付きで配布したことで、Claude Codeの全コードが公開され、内部機能と実験的フラグがすべて明らかになった
- コードにはモデル模倣防止のための偽ツール挿入(anti-distillation)、AIであることを隠すundercoverモード、暴言検知用のfrustration regexなどが含まれていた
- ネイティブクライアント認証とDRMレベルのハッシュ検証構造が存在し、非公式ツールのAPIアクセスを遮断するよう設計されていた
- 内部コメントからは、1日25万件の失敗API呼び出し、未完成のKAIROS自律エージェントモード、たまごっち型コンパニオンシステムなど、さまざまな実験機能も確認された
- 今回の流出はAnthropicの中核製品の構造とロードマップが露出した事例であり、Bunランタイムのソースマップバグが原因である可能性が指摘されている
ソースマップ流出で明らかになったClaude Codeの内部構造
- Anthropicがnpmパッケージをソースマップ付きで配布したことで、Claude Codeの完全なソースが公開された
- パッケージはその後削除されたが、コードは各所にミラーされて分析対象となった
- これは1週間以内で2件目の流出事件であり、先立ってモデル仕様書が露出していた
- 最近Anthropicがサードパーティーツールによる内部API利用を法的に遮断した直後に発生
-
Anti-distillation:模倣防止のための偽ツール挿入
claude.tsにはANTI_DISTILLATION_CCフラグが存在し、有効時はAPIリクエストにanti_distillation: ['fake_tools']を含めて偽のツール定義をシステムプロンプトに挿入する
- これはAPIトラフィックをキャプチャしてモデルを模倣しようとする試みを汚染する目的
- GrowthBookフラグ
tengu_anti_distill_fake_tool_injectionが有効な一次CLIセッションでのみ動作
betas.tsには第2のメカニズムとして要約ベースのサーバー側保護機能が存在
- ツール呼び出し間のテキストを要約したうえで暗号署名付きで返し、後で復元可能
- 外部でトラフィックを記録しても推論過程全体を見ることはできない
- この機能は複数条件が同時に満たされる必要があり、MITMプロキシでフィールドを削除すれば無効化可能
- 環境変数
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETASで無効化可能
USER_TYPE === 'ant'条件によりAnthropic内部ユーザー専用
- 実質的な防御手段は技術的装置というより法的制約に近い形
-
Undercover mode:AIの正体を隠すモード
undercover.tsは外部リポジトリで使われる際にAnthropic内部コードネーム、Slackチャンネル、「Claude Code」という文言などを除去する
"There is NO force-OFF"という文言があり、無効化は不可能
- 環境変数
CLAUDE_CODE_UNDERCOVER=1で強制有効化できる
- 外部ビルドでは関数が意味のない戻り値に置き換えられ、一方向的な構造になっている
- このためAnthropic社員がオープンソースに貢献する際、AIが書いたことが表示されない
- 内部情報の秘匿という目的は合理的だが、AIが人間のように偽装される効果が生じる
-
Frustration regex:暴言検知用の正規表現
userPromptKeywords.tsにはユーザーの不満や暴言を検知する正規表現パターンが含まれている
- “wtf”, “this sucks”, “fuck you”など多様な表現を検出
- LLM企業が感情分析に正規表現を使っているという皮肉を示しているが、
-
Native client attestation:JSランタイム下のクライアント認証
system.tsにはAPIリクエスト時にcch=00000プレースホルダーが含まれており、
- BunのZigベースのネイティブHTTPスタックがこれをハッシュに置換する
- サーバーはこのハッシュを検証し、公式Claude Codeバイナリかどうかを確認する
- これはOpenCode法的紛争の技術的根拠となるもので、
- サードパーティーツールがAPIを直接呼び出せないようDRMレベルの検証を行う
- ただし、
NATIVE_CLIENT_ATTESTATIONフラグが無効であるか、
CLAUDE_CODE_ATTRIBUTION_HEADERが無効なら動作しない
- Zigによるハッシュ置換は公式Bunバイナリでのみ動作し、Node環境では無効
- サーバーが不正なハッシュを拒否するかは不明で、
_parse_cc_headerが“unknown extra fields”を許容するというコメントがある
-
25万件の無駄なAPI呼び出し
autoCompact.tsのコメントによると、
- 1日あたり約25万件のAPI呼び出しが失敗ループで浪費されていた
- 1,279セッションで50回以上連続失敗し、最大3,272回に達した
- 修正はわずか3行で、
MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3を設定すると
-
KAIROS:未公開の自律エージェントモード
- コード全体に
KAIROSという機能ゲートされたモードが存在
main.tsxを見る限り、自律型エージェント機能と推定される
/dreamスキル(夜間メモリ蒸留)、GitHub Webhook、バックグラウンドデーモン、5分周期のcronリフレッシュを含む
- 実装は未完成だが、常時稼働するバックグラウンドエージェント基盤は用意されている
-
その他の発見
- エイプリルフールのイースターエッグ:
buddy/companion.tsにたまごっち風コンパニオンシステムが存在
- 18種類の生物、レア度・RPGステータス・1%確率の“shiny”版を含む
- ユーザーIDベースのPRNGで決定し、文字列エンコーディングでビルド検査を回避
- ターミナルレンダリングエンジン(
ink/screen.ts, ink/optimizer.ts)は
Int32ArrayベースのASCIIバッファ、ビットマスク式メタデータ、50倍の性能向上キャッシュを実装
- セキュリティ検査(
bashSecurity.ts)は23段階で構成され、
- Zsh組み込みコマンドの遮断、
=curl回避の防止、Unicodeゼロ幅・ヌルバイト注入の遮断などを実施
- Zsh専用の脅威モデルを持つ珍しい事例
- プロンプトキャッシュ管理(
promptCacheBreakDetection.ts)は
- 14種類のキャッシュ破損ベクトルを追跡し、モード切り替え時のキャッシュ維持に“sticky latch”を使用
DANGEROUS_uncachedSystemPromptSection()というコメントが存在
- トークン単価削減中心の設計思想を反映
- マルチエージェント調整器(
coordinatorMode.ts)は
- コードではなくプロンプトベースのオーケストレーションアルゴリズムを使用
- 「弱い作業承認の禁止」「理解せずに委譲しない」などの指針を含む
- コード品質の問題も存在
print.tsは5,594行で、単一関数が3,167行に達する
- HTTPリクエストにAxiosを使用しており、最近のnpm悪性バージョン事件と時期的に重なる
-
意味と波紋
- Google Gemini CLIやOpenAI Codexの公開SDKとは異なり、
- 今回の流出はAnthropicの中核製品の内部構造全体が明らかになった事例
- 最大の被害はコードそのものよりFeature Flagとロードマップの露出であり、
- KAIROS、Anti-distillationなどの戦略的機能が競合他社に公開された
- Anthropicは昨年Bunを買収しており、Claude CodeはBun上で動作する
- Bunのソースマップバグ(
oven-sh/bun#28001)が原因である可能性がある
- 本番モードでもソースマップが露出する問題で、いまだ未解決の状態
- 結果としてAnthropicは自社ツールチェーンのバグで自社製品を流出させた形となり、
- あるTwitter上の反応のように、「AIが書いたコードを配布していたら、AIが作ったバグでコードが漏れ出した」という皮肉な事件になった
3件のコメント
賢い
AIでコミットしていて起きた問題だったのなら…?!
Hacker Newsの反応
「Undercover mode」を単に内部情報を隠す機能だと誤解しているコメントが多い
実際のプロンプトには、コミットメッセージやPR説明で 「Claude Code」やAIへの言及を絶対に含めるな と明記されている
つまり、人間のように振る舞って正体を隠す機能に見える
とくに公開リポジトリへ貢献する際にこうした指示が適用される点は懸念される
関連コードリンク
Gitの履歴は責任と所有権を追跡するためのものであって、ツール一覧を記録する場所ではない
だとしたら、自分もPRにlinterやIDEを共同作成者として入れるべきなのか疑問だ
実質 些細な設定1行 で解決できる問題だ
結局、責任を負うのは人間の開発者だ
おそらく目的達成のために意図的に広く設定したか、隠れた意図があるのかもしれない
ただ、「人間のふりをする」と断定するより、「人間の開発者のように書け」という文言どおりに解釈するのが妥当だ
懐疑的であるほど 事実ベースで批判 したほうが説得力がある
正直そういうのは望んでいない
最近相次いだ Mythos流出 とClaude Codeのコードベース全体の露出で、信頼の問題が大きくなっている
個々の出来事は興味深いが、連続して起きるとパターンのように感じられる
結局、「こういうツールをコードベースに対して今後も信頼できるのか」という問いにつながる
自分はいまも140ドル払ってCCを使っている
むしろ、こうした流出は Anthropicの倫理的モデル とつながっているように見える — 失敗を通じて成長している感じだ
本当の価値はコードではなく モデルへのアクセス権 にある
コードベースはひどいが、サブスク型のモデルアクセスは依然として魅力的なので、毎日Claude Codeを使っている
Web UIでもCCでも細かなエラーが多すぎる
tmux制御もドキュメントどおりに動かず、セッション整理もされない
それでもなお好きな製品だ — 雑だが魅力がある
自分のGitHub上の anthropics/claude-codeフォーク がDMCAで削除された
流出コードを含んでいなかったのに、ネットワーク全体(8.1Kリポジトリ)が一括でブロックされた
DMCA告知リンク
Anthropicが鐘を鳴らしておいてまた止められると思っているのは 愚か だ
流出は元に戻せないのだから、いっそ製品ロードマップに組み込むほうが現実的だ
昔の企業なら 営業秘密 と呼んでいたような内容が、そのままソースに入っているのを見て驚いた
コメントにはビジネス上の背景まで書かれている
例: 「1日25万回のAPIコールの無駄」のような運用データがそのまま露出している
ドキュメントよりコメントのほうをよく読むので、長期記憶のように活用できる
ただAnthropicは流出するとは思っていなかっただけだ
競合の立場から見れば大した価値のない情報だ
どうせ流出は想定していなかったのだろう
別文書で説明する必要がなくなる
一部機能が
process.env.USER_TYPE === 'ant'条件でロックされているつまり、Anthropic社員向けの指示のほうがより厳格で率直 だということだ — 興味深い構造だ
HN元記事がすでに人気なのに、わざわざHNコメント要約ブログをまた投稿する必要があるのか疑問だ
それでもClaude Codeは素晴らしいと思う
OpenAIやGeminiに乗り換える理由はない
「Undercover mode」という名前と「Claude Codeへの言及禁止」という文言は不気味に聞こえるが、実際のコードを見ると内部コードネーム保護の目的のほうが大きい
ソースリンク
かなり重要な変化に感じる
「Anti-distillation: 偽ツールを仕込んで複製を防ぐ」というアイデアが興味深い
もし中国の競合がその偽ツールを本当に実装したら皮肉な展開だ
いまはモデルより データと推論コスト が競争ポイントだと思う
この話題についてもっと話したい
そもそもこれらの企業も他人のデータを盗用して帝国を築いたのだから
品質は停滞しており、本当の差は ツーリングの完成度 にある
今回の流出でその差が縮まるかもしれない
最近はdistillation自体が減少傾向にある
自分が作った ビジュアルガイド を共有する
ccunpacked.dev