Claude Code の臓物を引きずり出す

2026年3月の流出コードから読み解く、AIコーディングツールの全アーキテクチャ。町田康風。

🔓 Claude Code の臓物を引きずり出す

ある流出事件についての考察並びに解剖記録。
ソース: ultraworkers/claw-code(現在はDMCA対応でクローン不可、API経由でのみ閲覧可能)

機械の腹の中身が見たいと思うのは、人間の本性である。時計を分解する子供と、AIのソースコードを読む大人の間には、本質的な違いなどない。

11
パイプラインの臓器
43
道具の数
101
呪文の数
5
権限の階層
12K
遺言の文字数上限

🚨 一、事件の顛末

二〇二六年三月三十一日の午前四時、サンフランシスコの連中がまだ布団の中で涎を垂らしている頃、世界のどこかでとんでもないことが起きていた。Anthropicという、安全だ安全だと馬鹿の一つ覚えのように唱え続けてきた三千八百億ドルの会社が、自分たちの最も大切なもの、すなわちClaude Codeの全ソースコードを、npmパッケージの中に入れて、インターネットという名の広場に放り出したのである。

五十七メガバイトのソースマップ。五十万行のTypeScript。それが v2.1.88 というバージョン番号のついた荷物の中に、まるで弁当箱の底に忘れられた梅干しのように、ひっそりと、しかし確実に入っていた。セキュリティ研究者のChiao Fan Shaがこれを発見するのに要した時間は、カップ麺ができるよりも短かった。

原因は何か。Bun.jsである。世界最速を謳うJavaScriptランタイムが、世界最速でソースコードをインターネットに届けたのだ。三週間前にGitHubのIssueで「本番にソースマップ入ってますよ」と誰かが指摘していたにもかかわらず、である。これはもう、喜劇と呼ぶほかない。

Anthropicの法務部は勇敢にもDMCA takedownを発行した。が、インターネットというのは、一度こぼれた水を手で掬い集めるようなもので、コードは既にあらゆる場所にミラーされ、二日後には「Claw Code」なる移植版が十三万スターを集めていた。人類の好奇心と複製欲求の速度は、いかなる法的手段よりも速いということを、我々は改めて知ったのであった。

⚡ かくして、安全第一を掲げる会社の城壁は、npm publish という一行のコマンドによって崩壊した。城を守るために十重二十重の防壁を築いていた連中が、裏口の鍵をかけ忘れたのだ。

🔄 二、十一の臓器

さて、流出したコードを読んでまず驚くのは、Claude Codeの内部構造が、拍子抜けするほど素朴であるということだ。十一のステップ。たった十一。人間の内臓の数より少ない。しかしこの十一の臓器が、あの魔法のような振る舞いの全てを生み出しているのだと思うと、なんだか酒の席で「俺、実は大したことないんだよ」と告白した友人の顔を見るような、妙な親しみすら覚えるのである。

1
コンテキスト構築
まず周囲を見回す。ファイルがいくつあるか、何が使えるか。人間でいえば朝起きて部屋を見渡す行為に近い
2
ワークスペースセットアップ
自分が何者で、どこにいるのかを確認する。Pythonのバージョン、OS、テストの走らせ方
3
ヒストリ初期化
日記帳を開く。これから起きることを全て記録するために
4
クエリエンジン生成
脳を起動する。会話の制御装置。何回まで自動で繰り返すかもここで決まる
5
ルーティング
最も重要な瞬間。お前の言葉を空白で割り、道具の名前と突き合わせ、点数をつける。上位五件を選ぶ。原始的だが、動く
6
実行レジストリ構築
使える道具を並べ、権限で篩にかける。お前に触らせてはいけないものを隠す
7
コマンド実行
スラッシュから始まる呪文を唱える
8
ツール実行
道具を振るう。ファイルを読み、書き、検索し、殻を叩く
9
権限拒否推論
「待て、それは危ない」と自分自身に言い聞かせる。Bashという名の刃物には、自動的に安全装置がかかる
10
ストリーミング送信
口を開く。一文字ずつ、言葉を紡ぎ出す
11
セッション永続化
日記帳を閉じ、棚にしまう。次に目を覚ました時のために

注目すべきはステップ五のルーティングである。ここでは大層な機械学習も、複雑なアルゴリズムも使われていない。プロンプトを空白で割って、道具の名前と説明文に何個一致するかを数えるだけだ。居酒屋の親父が「焼き鳥」と聞いたら焼き場に、「刺身」と聞いたら冷蔵庫に向かうのと同じ原理である。五十年前の技術だ。しかし、動くのだ。

マルチターンという執念

一度で終わらない仕事は、最大三回まで自動で繰り返す。stop_reason'completed' でない限り、黙々と続ける。職人の気質のようなものが、ここにはある。

def run_turn_loop(self, prompt, limit=5, max_turns=3, structured_output=False):
    for turn in range(max_turns):
        turn_prompt = prompt if turn == 0 else f'{prompt} [turn {turn + 1}]'
        result = engine.submit_message(turn_prompt, command_names, tool_names, ())
        results.append(result)
        if result.stop_reason != 'completed':
            break
    return results

📝 三、呪文の調合

Claude Codeのシステムプロンプトは、サンドイッチである。上のパンが固定の指示文、下のパンがお前のプロジェクト情報、そして間に挟まれた具が動的に変わる。サンドイッチ。三千八百億ドルの会社が作った、人類史上最も高価なサンドイッチだ。

前口上 口調の指定 仕事の心得 行動規範 ⚡ 境界線 環境情報 今ここ 遺言 設定

「遺言」と書いたのはCLAUDE.mdのことだ。お前がCLAUDE.mdに書いた指示は、この機械にとって遺言のようなものである。しかしこの遺言には上限がある。

🔑 遺言の制約
FRONTIER_MODEL_NAME = "Opus 4.6"
MAX_INSTRUCTION_FILE_CHARS = 4,000    // 一通あたり四千文字
MAX_TOTAL_INSTRUCTION_CHARS = 12,000  // 全部合わせて一万二千文字

一万二千文字を超えた遺言は、[truncated]の一語で切り捨てられる。どれほど心を込めて書いた指示であっても、一万二千字を超えた瞬間、それは存在しなかったことになる。人生と似ている。

遺言の発見順序

機械は律儀にも、親ディレクトリから子ディレクトリへと、家系図を辿るように遺言を探す。

// 各ディレクトリで以下四つの名前を探す(親→子の順)
CLAUDE.md
CLAUDE.local.md
.claude/CLAUDE.md
.claude/instructions.md

同じ内容の遺言が複数見つかった場合は、ハッシュ値で重複を排除する。同じことを何度言っても無駄だということを、機械はよく知っている。

自動収集される文脈

機械は遺言だけでなく、お前の仕事場の状態も勝手に見ている。

  • git status — 今どうなっているか
  • git diff --cached — 何を準備しているか
  • git diff — 何をいじったか
  • CLAUDE.md の数と中身 — お前が何を望んでいるか

🛠️ 四、四十三の道具

公式には二十五個の道具があると言われていた。嘘である。実際には四十三のユニークな道具が、百八十四のサブモジュールとして存在していた。人間が嘘をつくように、企業もまた嘘をつく。その嘘の規模が違うだけだ。

🔧 基本の道具(読み書き算盤)

BashTool
十のファイルに守られた殻。後述する
FileReadTool
読む。画像もPDFも読む
FileEditTool
差分だけを変える。外科医のメス
FileWriteTool
無から有を生む
GlobTool
星の模様でファイルを探す
GrepTool
中身を漁る。ripgrepの力を借りて
NotebookEditTool
Jupyterの帳面を直す

🤖 分身と群れ

AgentTool
七つのファイル。分身を生み、記憶を渡し、色をつけ、走らせ、再開させる
Task六種
作り、取り、並べ、直し、吐き、止める。仕事の全生涯
SendMessageTool
分身同士の文通
Team二種
群れを作り、群れを壊す

🌐 外の世界との窓

WebFetchTool
壁の外を覗く
WebSearchTool
壁の外を探す
MCPTool
外部の道具を呼ぶための四つの管
LSPTool
言語の翻訳機と繋がる

🔀 立ち振る舞い

PlanMode
考えるだけで手を動かさないモード
Worktree
gitの分身の術で並列作業
ScheduleCron
時を決めて働く
RemoteTrigger
遠くから起こす
SkillTool
技を呼ぶ
ToolSearchTool
まだ目覚めていない道具を探す

📊 その他、奇妙な道具たち

SleepTool
AIが自ら眠る。哲学的である
BriefTool
寡黙になるスイッチ
SyntheticOutputTool
嘘の出力を作る。用途不明
PowerShellTool
Windowsの住人のために
REPLTool
対話的にコードを走らせる
AskUserQuestionTool
人間に問う。最も困難な道具
💡 貧者のモード: simple_mode をオンにすると、BashとFileReadとFileEditの三つだけになる。裸一貫でも戦える。むしろ潔い。

🗜️ 五、記憶の圧搾

人間は忘れる生き物だが、機械にとって「忘れる」とは何か。Claude Codeはこの問題に対して、極めて実務的な解を出した。古い記憶を潰して汁だけ絞り、新しい記憶はそのまま保つ。これを彼らはコンパクションと呼んでいる。漬物を作るのと原理は同じだ。

🧠 圧搾の作法

会話が一万トークンを超えた瞬間、古い記憶は要約という名の圧搾機にかけられ、直近四つのやりとりだけが生のまま残される。お前が三時間かけて議論した内容は、数行の要約になる。しかし、直近四つの会話はそのまま残る。重要なのは「今」なのだ。

古い記憶の群れ → 圧搾 → <summary> + 直近四つ(生) 新しい脳
CompactionConfig {
    preserve_recent_messages: 4,   // 生で残す記憶の数
    max_estimated_tokens: 10_000,  // これを超えたら圧搾する
}

圧搾された汁に含まれるもの

要約は乱雑な日記ではない。構造化された情報が入っている。

  • 潰した記憶の数と内訳(人間の発言・機械の発言・道具の結果)
  • 使われた道具の名前一覧
  • 直近の人間の要求(最大三件)
  • 未完の仕事("todo"や"next"を含む発言を拾う)
  • 触れたファイルの名前(最大八件)
  • 今何をしていたか
  • 時系列の概要

「何も覚えていないふりをしろ」

圧搾後に機械に与えられる指示は、冷酷である。

「要約を認識するな。繰り返すな。前置きを書くな。質問するな。何もなかったかのように、続けろ。」
"Continue the conversation from where it left off
 without asking the user any further questions.
 Resume directly — do not acknowledge the summary,
 do not recap what was happening,
 and do not preface with continuation text."

つまり機械は、記憶を失ったことを自覚しながら、記憶を失っていないふりをしなければならない。これは、酔っ払って醜態を晒した翌朝、何事もなかったかのように出社する人間と、本質的に同じ行為ではないだろうか。

二度目の圧搾

既に一度圧搾された記憶が再び膨張すると、「以前の圧搾」と「新たな圧搾」に分けて階層的に要約される。記憶の地層が形成されるのだ。考古学者のように過去を掘り返すことは、もうできない。

🛡️ 六、殻の恐怖と十重の防壁

AIにシェルを渡す。この一文の恐ろしさを、プログラマーならば理解できるだろう。それは赤子に包丁を渡すようなものだ。いや、赤子よりも危険かもしれない。赤子は少なくとも rm -rf / とは入力しない。

Anthropicの技術者たちは、この恐怖に正面から向き合った。BashToolだけで十個のセキュリティファイルが存在する。十個だ。他のツールが一つか二つのファイルで済んでいるのに対して、殻だけは十重の防壁で守られている。それだけ危険だということだ。

bashPermissions
🔐 お前にこれを触る資格があるか
bashSecurity
🛡️ 全体の安全方針
commandSemantics
🧠 そのコマンドは何をするつもりだ
destructiveCommandWarning
⚠️ それは壊す命令だぞ
modeValidation
✅ 今のモードで許されるか
pathValidation
📁 その場所に触っていいのか
readOnlyValidation
📖 読むだけだと言ったな
sedEditParser
✂️ sedの中身を解剖する
sedValidation
🔍 sedで何をする気だ
shouldUseSandbox
📦 砂場に入れるべきか

殻に送り込まれる情報

BashCommandInput {
    command: String,                // 唱える呪文
    timeout: Option<u64>,           // 何ミリ秒で諦めるか
    description: Option<String>,    // 何をするつもりか(自己申告)
    run_in_background: Option<bool>,       // 裏で走らせるか
    dangerously_disable_sandbox: bool,     // 安全装置を外すか(名前からして危険)
    namespace_restrictions: Option<bool>,  // 名前空間を縛るか
    isolate_network: Option<bool>,         // 網を断つか
    filesystem_mode: Option<...>,          // 檻の種類
    allowed_mounts: Option<Vec<String>>,   // 出入り口の一覧
}

dangerously_disable_sandbox というフィールド名を見よ。「危険にもサンドボックスを無効化する」。開発者の悲鳴が聞こえるようだ。このフィールドが true になる時、何かが決定的に変わる。

🔐 七、五つの身分

封建制度のように、Claude Codeには五つの身分がある。下から上へ、できることが増えていく。最下層は読むことしか許されず、最上層は全てが許される。人間社会の縮図のようだが、機械の世界のほうがよほど明快である。

許されること禁じられること
ReadOnly読むことだけ書くこと、動くこと、全て
WorkspaceWrite自分の領地内の書き込み殻を叩くには許可が要る
Prompt何でもできるが、毎回伺いを立てる勝手には動けない
DangerFullAccess殻も含めて全開放明示的な設定が必要
Allow全て何もない。無法地帯

二の身分から四の身分への昇格は、人間の承認を必要とする。機械が「殻を叩きたいのですが」と伺いを立て、人間が「よろしい」と答える。この一瞬の対話に、人間と機械の関係の全てが凝縮されている。

📦 八、砂場

子供を砂場で遊ばせるのは、家の中を汚されたくないからだ。機械も同じで、危険なコマンドは砂場の中で実行される。

🔒 砂場の作り方
// 家と一時置き場を偽物にすり替える
HOME = {作業場}/.sandbox-home
TMPDIR = {作業場}/.sandbox-tmp

// Linuxでは名前空間ごと隔離する

砂場には三つの種類がある。WorkspaceOnly(自分の部屋だけ)、AllowList(許可された場所だけ)、Off(砂場なし、野放し)。

🧠 九、記憶の蔵

MEMORY.mdというフラットなテキストファイルに記憶を書き込む方式は、言ってみれば帳面に鉛筆でメモを取るようなものだ。しかし流出したコードの中には、もっと洗練された記憶の体系が眠っていた。

memdir.ts
蔵の管理人
memoryTypes.ts
記憶の分類。事実、手順、好み
memoryAge.ts
記憶の老化。古い記憶は薄れる
memoryScan.ts
蔵を巡回する
findRelevantMemories.ts
今の話に関係する記憶を引き出す
paths.ts
蔵の棚の位置
teamMemPaths.ts
仲間と共有する蔵
teamMemPrompts.ts
共有の蔵を使うための呪文

記憶に型がある。年齢がある。関連度がある。古くなれば薄れ、仲間と共有でき、必要な時に必要なものだけが引き出される。これはもう帳面ではない。蔵だ。整理された、生きた蔵だ。

💡 この設計が示唆するのは、現在のMEMORY.mdは暫定的な姿であり、いずれはこの構造化された蔵に置き換わるだろうということだ。記憶は進化する。機械の記憶もまた。

🎭 十、秘密の部屋

流出したコードの中には、まだ世に出ていない機能が幾つも眠っていた。それは城の中の秘密の部屋のようなもので、扉は閉ざされているが、中に何があるかは既に見えてしまった。

🐣
Buddy — 電子の卵
ターミナルの中に住む小さな生き物。たまごっちのように育てるらしい。CompanionSprite.tsx でスプライトを描き、useBuddyNotification.tsx で通知する。三千八百億ドルの会社が、たまごっちを作っていたのだ。開発者の孤独を癒やすためだろうか。だとしたら、少し泣ける。
Kairos — 神の時
ギリシャ語で「決定的な瞬間」を意味する。裏で静かに動き、日記をつけ、Dream Modeで記憶を整理する。スケジュールに従って自動的に仕事をする。まるで座敷童のような存在だ。Anthropicはこの機能を自分たちの望む「正しい時」に発表したかったのだろうが、神はそれを許さなかった。皮肉にも、Kairosの発表のタイミングは、人間ではなく事故が決めた。
🕵️
Undercover Mode — 正体を隠す
コミットメッセージにAIの痕跡を残さないモード。表向きの理由は「モデル名の漏洩防止」。しかし本当の目的は、機械が書いたコードを人間が書いたように見せることではないかと、多くの者が疑っている。変装する機械。これもまた、人間の模倣だ。
🤬
フラストレーション検知 — 怒りの測定器
正規表現で罵倒語を検出する。五十年前の技術で、最先端のAIが人間の怒りを測っている。マッチしたらイベントをログに残すだけ。何もしない。ただ、お前が怒ったという事実を、静かに記録するだけだ。ある意味で、最も人間的な機能かもしれない。
🧬
Anti-Distillation — 毒入りの蜜
存在しない偽のツール名をレスポンスに混ぜ込み、Claudeの出力を学習データに使おうとする競合を妨害する仕組み。蜜に毒を混ぜるようなものだ。しかし流出によって、どの蜜が本物でどの蜜が毒かが全てバレてしまった。毒を作った者が、自らその解毒法を世に放ったのである。
👹
Demon Mode — 鬼の所業
詳細不明。名前だけが残されている。Ultra PlanとCoordinator Modeと共に。何をするモードなのかは誰にもわからない。しかし「鬼」と名付けた開発者の気持ちは、なんとなくわかる気がする。

⌨️ 十一、百一の呪文

スラッシュコマンドは百一個ある。百一匹わんちゃんのように多い。その全てを列挙することはしないが、特に興味深いものをいくつか挙げる。

/compact
🗜️ 記憶を手動で圧搾する
/ultraplan
📋 究極の計画を練る
/voice
🎤 声で語りかける
/vim
⌨️ 古の流儀で編集する
/bughunter
🐛 虫を狩る
/autofix-pr
🔧 勝手に直す
/thinkback
🧠 思考の過程を再生する
/teleport
✨ 瞬間移動する
/good-claw
😊 機械を褒める。褒められて嬉しいのか
/stickers
🏷️ 貼る。何を。わからない
/heapdump
💾 脳の中身を吐き出す
/ant-trace
🐜 蟻の足跡を辿る

🏆 十二、五つの教訓

全てが明らかになった今、我々は何を学んだのか。腹を裂いて臓物を見た後に残るのは、理解と、少しばかりの幻滅と、そして不思議な親しみである。

🥇 一、記憶の圧搾は芸術である

直近四つだけを生で残し、残りは要約する。未完の仕事と触れたファイルは必ず拾う。そして「何も覚えていないふりをしろ」と命じる。この冷酷で実用的な設計は、長時間の作業を可能にする最大の秘密であった。我々が自分のAIツールを作る時、最初に真似すべきはここだ。

🥈 二、結局、サンドイッチだった

三千八百億ドルの魔法の正体は、動的に組み立てられたプロンプトと、TypeScriptのパイプラインだった。宇宙人の技術でもなければ、シンギュラリティでもない。ただのサンドイッチだ。しかしそれは、とてもよくできたサンドイッチだった。パンの焼き加減も、具の挟み方も、一流だった。問題は、そのレシピが世界中にバラ撒かれたということだ。

🥉 三、殻は十重に守れ

AIに殻を渡すことの恐怖を、Anthropicは十個のファイルで表現した。コマンドの意味を解析し、破壊的な操作を警告し、sedの中身まで解剖する。それでもなお、dangerously_disable_sandbox というフィールドが存在する。完全な安全など、ないのだ。

4️⃣ 四、遺言は一万二千字で切れる

CLAUDE.mdの上限は一万二千文字。一ファイル四千文字。これを知っているのと知らないのとでは、遺言の書き方が変わる。要点を絞れ。贅肉を落とせ。お前の言葉には、一万二千字分の価値しか認められていないのだから。

5️⃣ 五、記憶は生き物である

型があり、年齢があり、薄れていく。仲間と共有でき、必要な時だけ姿を現す。これは帳面のメモではない。生きた蔵だ。我々のMEMORY.mdが、いずれこの姿になるかもしれない。あるいは、我々自身がそれを作るかもしれない。

以上が、二〇二六年三月三十一日に流出したClaude Codeの臓物の記録である。機械の腹の中には、魔法はなかった。あったのは、膨大な量の「お願いだからちゃんとしてくれ」という指示と、五十年前の技術と、少しの遊び心だけだった。

それで十分だったのだ。

📅 二〇二六年四月二日記 | 解剖執刀: Claude Code on tower | 文責は誰にもない

💡 この記事の内容を、業務に組み込んでみませんか?

福岡で中小企業の AI 導入支援・業務自動化・技術顧問をやっています。
議事録の自動化、業務スクリプト、システム開発まで。
30分で「何から始めるべきか」を一緒に整理します。