AI Navigate

Claude CodeがAnthropicに実際に送信している内容を見るために、MITMプロキシを作成しました

Dev.to / 2026/3/20

💬 オピニオンDeveloper Stack & InfrastructureTools & Practical Usage

要点

  • Claude Inspectorを作成しました。これはmacOSのデスクトップアプリで、Claude CodeのHTTPトラフィックをローカルのMITMプロキシを介して傍受し、リアルタイムで可視化します。すべてのデータはローカルホスト上にとどまります。
  • すべてのAPIリクエストにはCLAUDE.md、ルール、およびメモリをシステムリマインダーブロックとして先頭に追加します。その結果、ユーザー入力がある前に約12KBのオーバーヘッドが発生します。
  • MCPツールは遅延ロードされます。完全なJSONスキーマはリクエストごとにすべて同梱されますが、モデルが実際にそれらを要求したときのみ挿入され、未使用のツールのトークンコストを削減します。
  • スクリーンショットはJSONペイロード内にbase64で埋め込まれています。これにより、1枚の画像キャプチャがリクエストに数百キロバイトも追加される可能性があります。
  • スキルとコマンドの扱いは異なります。コマンドは結果としてのみ扱われますが、スキルは完全なプロンプトテキストを注入し、セッションを通じてそれを保持します。さらに、会話履歴全体が毎回のリクエスト時に再送されます。

Claude Code が裏で Anthropic API に実際に何を送っているのか、疑問に思ったことはありますか? 私はありました — だから Claude Inspector を作りました。これは macOS のデスクトップアプリで、Claude Code の HTTP トラフィックをローカルの MITM プロキシを介してリアルタイムに傍受・可視化します。

Claude Code CLI → Inspector (localhost:9090) → api.anthropic.com

すべてのトラフィックはローカルのままです。データは保存も共有もされません。

仕組み

  1. Claude Inspector を開いて、Start Proxy をクリックします
  2. プロキシ環境変数を付けて Claude Code を実行: ANTHROPIC_BASE_URL=http://localhost:9090 claude
  3. すべての API リクエストとレスポンスをリアルタイムでキャプチャして可視化します

私が見つけたこと

1. あなたの CLAUDE.md はすべてのリクエストで送信されます

各リクエストは、あなたのプロジェクト CLAUDE.md、グローバルルール、メモリファイルをシステムリマインダーブロックとして静かに先頭に付けます。構造は次のとおりです:

使用可能なスキルのリスト (~2KB)
CLAUDE.md + ルール + メモリ (~10KB)
実際のメッセージ (入力した内容)

これは、約12KBのオーバーヘッドです — そしてこれは毎回のリクエストで繰り返されます。

2. MCP ツールは遅延読み込みされる

内蔵ツール(27個)は、すべてのリクエストで完全な JSON スキーマを添えて送信されます。しかし MCP ツールは、名前のみのプレースホルダとして開始します。それらのスキーマは、モデルが実際に要求したときだけ動的に注入されます — したがって未使用の MCP ツール はトークンを消費しません。

3. スクリーンショットは高価です

画像は base64 でエンコードされ、JSON ボディに直接埋め込まれます。1 枚のスクリーンショットでリクエストに数百キロバイトが追加されることがあります。その「さっと撮ったスクリーンショット」1枚のコストは、想像以上に高いです。

4. スキルとコマンドは非常に異なる扱い

ローカルコマンド (/clear, /mcp)
→ モデルには結果のみが表示され、コマンド自体は表示されません

スキル (/commit, Skill("finish"))
→ 完全なプロンプトテキストが会話に挿入されます
→ そのプロンプトはセッションの残りの間ずっと残ります

スキルはその全プロンプトテキストを会話に挿入し、それはセッションの残りの間、そこに留まります。

5. 全対話履歴は毎回再送されます

すべての API リクエストには、最初からの全対話履歴が含まれます。セッションが長くなるほど、支払う額は直線的に増えます。

30ターンの対話で、1MB 以上の累積データがリクエストごとに送信されます。実際の処理が行われる前です。

6. サブエージェントは完全に分離されています

Claude が Agent ツールを介してサブエージェントを生成すると、親の会話履歴にアクセスできない、完全に独立した API 呼び出しが作成されます。各エージェントは初期状態から始まります。

この点についてすべきこと

これらの所見は、あなたのワークフローとコストに現実的な影響を及ぼします

  • CLAUDE.md を軽量に保ちましょう。各リクエストごとにすべての行が送信されます。活用されていないものは削除してください。

  • スクリーンショットは控えめに。1枚の画像は、トークンとして数段落分のテキストと同じくらいのコストになることがあります。

  • 長いセッションでは /clear を使いましょう。約20〜30ターン経過したら、コンテキストウィンドウをリセットするために /clear を実行してください。コストが節約できます。

  • 未使用の MCP ツールはトークンを消費しません(遅延ロードされます)が、数十個インストールしていると初期の名前リストが積み上がり、コストが増えます。

自分で試してみる

brew install --cask kangraemin/tap/claude-inspector && sleep 2 && open -a "Claude Inspector"

Or grab the DMG from GitHub Releases.

ソースコード: github.com/kangraemin/claude-inspector