Claude Codeをインフラストラクチャとして捉える
Andrej Karpathyは、LLMエージェントの周囲に成長するものを表す言葉を生み出しました。それが「claws(爪)」です。エージェントがコンテキストウィンドウの外の世界を掴むためのフック、スクリプト、オーケストレーションのことです。1 ほとんどの人はClaude Codeを、ファイルアクセス機能付きのチャットボックスとして扱っています。プロンプトを入力し、ファイルが編集されるのを見て、次に進む。この捉え方では、このツールの本質を見逃しています。
Claude CodeはIDEの機能ではありません。インフラストラクチャです。そして、どちらとして扱うかの差が、AI支援開発が生産性10%向上で頭打ちになるか、根本的に異なる何かへと突破するかを決定します。
要約
Claude Codeは17のライフサイクルイベントを公開しており、それぞれにシェルスクリプトをフックして、すべてのツールコールの前、最中、後に実行させることができます。2 フックをディスパッチャーに、ディスパッチャーをスキルに、スキルをエージェントに、エージェントをワークフローにスタックすると、あなたとモデルの間にプログラマブルなレイヤーが形成され、モデルが回避できない制約を強制できます。私は2ヶ月間で84のフック、48のスキル、19のエージェント、そして約15,000行のオーケストレーションを構築しました。フレームワークなし。外部依存なし。すべてbashとJSONです。その結果、私が眠っている間にコードを書き、レビューし、出荷する自律開発システムが完成しました。この記事では、そのアーキテクチャ、IDEという捉え方がなぜ人々を制限するのか、そしてRemote Controlによってこのインフラストラクチャがどこからでもアクセス可能になった今、何が変わるのかを説明します。
IDEという捉え方は間違っている
デフォルトのメンタルモデルは、Claude Codeをより賢いオートコンプリートとして捉えるものです。ターミナルに座り、タスクを与え、出力を監視する。このモデルでは、生産性はあなたが個人的に監視できる範囲に制限されます。
インフラストラクチャのメンタルモデルでは、Claude CodeはLLMカーネルを持つプログラマブルなランタイムです。モデルが取るすべてのアクションは、あなたが制御するフックを通過します。プロンプトではなくポリシーを定義します。モデルはあなたのインフラストラクチャの中で動作し、それはWebサーバーがnginxのルール内で動作するのと同じです。あなたはnginxの前に座ってリクエストを入力するわけではありません。設定し、デプロイし、監視するのです。
この区別が重要なのは、インフラストラクチャには複利効果があるからです。bashコマンド内の認証情報をブロックするフックは、すべてのセッション、すべてのエージェント、すべての自律実行を保護します。ブログ評価ルーブリックをエンコードしたスキルは、あなたが呼び出す場合でもエージェントが呼び出す場合でも一貫して適用されます。セキュリティのためにコードをレビューするエージェントは、あなたが見ていなくても同じチェックを実行します。
Simon Willisonは、現在の状況を一つの観察に基づいて捉えています。コードを書くことは今や安価になったということです。3 その通りです。しかし、誰も聞きたくない当然の帰結は、検証こそが今や高コストな部分になったということです。検証インフラストラクチャのない安価なコードは、大規模にバグを生み出します。見返りのある投資は、より良いプロンプトではありません。モデルが見逃すものをキャッチする、モデルの周囲のシステムです。
インフラストラクチャレイヤー
Claude Codeのフックシステムは、17のライフサイクルイベントでシェルコマンドを実行します。2 PreToolUseはツール実行前に発火し、ブロックできます。PostToolUseは実行後に発火し、フィードバックを提供できます。UserPromptSubmitは入力時に発火し、コンテキストを注入できます。Stopはモデルが終了しようとする時に発火し、作業を継続させることができます。各イベントは、セッションID、ツール名、ツール入力、現在の作業ディレクトリなどの完全なコンテキストを含むJSONをstdinで受け取ります。
フックシステムはプラグインシステムではありません。イベント駆動アーキテクチャです。違いは、プラグインがツールの機能を拡張するのに対し、イベントはツールが取るすべてのアクションをインターセプト、修正、制御できる点です。あなたがミドルウェアになるのです。
フック:決定論的レイヤー
フックはシェルスクリプトです。ハルシネーションされることも、おだてられることも、プロンプトインジェクションで回避されることもありません。モデルがrm -rf /を実行しようとしますか?10行のbashスクリプトがコマンドをブロックリストと照合し、シェルが見る前に拒否します。モデルが.envを読もうとしますか?ファイルパスの正規表現がReadツールコールをインターセプトします。これらのどれも、モデルの協力を必要としません。フックはモデルが望むかどうかに関係なく発火します。
私は17のイベントタイプにわたって84のフックを実行しています。その内訳が物語っています。35が判断を強制し(ゲート、ガード、バリデーター)、49が自動化を処理します(インジェクター、ロガー、トラッカー)。この比率は当初1:6でした。自律実行中に物事が壊れた2ヶ月間で、4:5にまで押し上げられました。すべての判断フックは、それなしでは何かが失敗したから存在しています。エージェントがTODOコメント付きのコードをコミットしました。エージェントが破壊的なgitコマンドを実行しました。エージェントが認証情報のパスをログファイルに漏洩させました。各失敗がゲートを生みました。
最大の教訓は、独立したフックよりもディスパッチャーを使うべきだということです。UserPromptSubmitで7つのフックがすべて発火し、それぞれが独立にstdinを読み取り、2つが同じJSONステートファイルに書き込んでいました。並行書き込みがJSONを切り詰めました。そのファイルをパースするすべての下流フックが壊れました。イベントごとに1つのディスパッチャーを置き、キャッシュされたstdinからフックを順次実行するように修正しました。目に見えないオーバーヘッドは、プロンプトあたり200msです。
スキル:知識レイヤー
スキルは、オンデマンドまたはフック経由で有効化されるMarkdown形式の指示セットです。4 各スキルは、呼び出された時にモデルが活用するドメイン専門知識をエンコードしています。私のblog-evaluatorスキルは、特定のスコアリング基準、カテゴリ最低点、相互依存関係を持つ6カテゴリの加重ルーブリックを定義しています。私のjiroスキルは、各基準に対する具体的な証拠を要求するエビデンスゲート付きの7ステップ品質ループをエンコードしています。
スキルはフックと組み合わせて機能します。スキルはフロントマターに独自のフックを定義でき、そのスキルが実行中の時のみ有効化されます。フィロソフィースキルはSessionStartフック経由で自動的に有効化され、明示的な呼び出しなしにすべてのセッションに品質制約を注入します。
48のスキルがカバーする領域:コード品質(jiro、testing-philosophy、debugging-philosophy)、コンテンツ(blog-writer-core、blog-evaluator、citation-verifier)、アーキテクチャ(fastapi、swiftui、database、htmx-alpine)、オペレーション(deploy、cache、analytics、security)、そしてメタオーケストレーション(deliberation、scan-intel、ralph)。Claude Code自体の好みに関する調査では、特定のフレームワークやパターンに傾くことがわかりました。9 スキルを使えば、それらのデフォルトを自分自身のものでオーバーライドできます。
エージェント:委任レイヤー
エージェントは、独立したコンテキストウィンドウを持つ専門化されたサブエージェントです。5 各エージェントは、焦点を絞ったタスクとフレッシュなコンテキストを受け取ります。私のコードレビューシステムは、3つのエージェントを並列に起動します。正確性、セキュリティ、コンベンションです。それぞれが独立してレビューします。レビュアー間の不一致が、単一のレビュアーでは見逃すであろう問題を正確に浮き彫りにします。
重要な制約は、再帰ガードです。シェルスクリプトがすべてのTaskツールコールの前に発火し、共有ステートファイル内のスポーン深度カウンターを確認し、深度がしきい値を超えた場合にコールをブロックします。これがなければ、エージェントがエージェントに委任し、そのエージェントがさらにエージェントに委任し、それぞれがコンテキストを失いトークンを消費します。デフォルトの制限は3レベルです。実際には、有用な作業は深度1(メインエージェント+1つのサブエージェント)で行われます。2より深い場合は通常、タスク分解が間違っていたことを意味します。
19のエージェントがカバーする領域:開発(ios-developer、backend-architect)、レビュー(code-reviewer、security-reviewer、conventions-reviewer、yagni-reviewer)、探索(project-scout、code-explorer、code-architect)、検証(test-runner、correctness-reviewer)。
Remote Controlが方程式を変える
2026年2月25日、AnthropicはRemote Controlをリリースしました。これは、任意のブラウザまたはClaudeモバイルアプリからローカルのClaude Codeセッションに接続できる機能です。6 この機能はHacker Newsで531ポイントと313コメントを獲得しましたが、そのほとんどはバグに関する苦情でした。苦情は正当です。しかし、この機能は変革的です。
その理由を説明します。Remote Control以前、私が説明したインフラストラクチャには2つのモードがありました。監視モード(ターミナルを見る)と無監視モード(離れて祈る)です。どちらも理想的ではありません。監視モードはスループットを私の注意力の範囲に制限します。無監視モードは、モデルが誰もキャッチしない悪い判断をするリスクがあります。
Remote Controlは第3のモードを創出します。非同期ガバナンスです。私は複数ストーリーのPRDを一晩中処理する自律ループを実行します。外部アクション(git push、APIコール、マシンから出るもの)の承認プロンプトは、私のスマートフォンにルーティングされます。どこからでも承認、拒否、またはリダイレクトできます。ガバナンスレイヤーは同じままです。「エージェントが承認を必要としている」から「人間がそれを提供する」までのレイテンシーが、「ラップトップを確認した時」から「スマートフォンから10秒」に短縮されます。
承認フローは、フックによるブラストラディアス分類と相乗効果を生みます。ローカルオペレーション(ファイル書き込み、テスト実行)は自動承認されます。共有オペレーション(gitコミット)は警告を出します。外部オペレーション(プッシュ、APIコール、デプロイメント)は人間のレビューに委ねられます。Remote Controlは、その「委ねる」パスをブロッキング待機から非同期通知に変えます。エージェントは前のストーリーのレビューを私が行っている間に、次のストーリーの作業を続けます。
Agent Multiplexerのようなツールは、すでにtmux経由でClaude Codeセッションを管理しています。10 Emdashのようなオープンソースの代替手段は、完全なエージェント開発環境を提供しています。11 SSHとtmuxを代替として提案している人々は、ターミナルアクセスとしては機能するという点で正しいです。しかし、承認ルーティングは提供されません。そのルーティングこそが、無人運用を単に可能にするだけでなく、安全にするものです。
コストはアーキテクチャである
「CLI経由でMCPをより安くする」という投稿(HN 304ポイント)は、あるパターンを文書化しました。MCPサーバー接続を維持するオーバーヘッドを避けるために、MCPツールコールをCLI呼び出しでラップするパターンです。7 より広い洞察は、コストは運用上の後付けではなく、アーキテクチャ上の決定だということです。
私のインフラストラクチャは3つのレベルでコストを処理しています。
トークンレベル。 システムプロンプトの圧縮です。私はCLAUDE.mdファイルと8つのルールファイルにわたり、約3,500トークンのシステムプロンプトを実行しています。高リターンの削減ポイントは、チュートリアルコード例の削除(モデルはAPIを知っています)、ファイル間の重複ルールの統合、説明の制約への置き換えです。「機密パスに一致するツールコールを拒否する」は、認証情報を読み取るべきでない理由の15行の説明と同じ働きをします。生の圧縮よりもセマンティック密度です。8
エージェントレベル。 長い会話よりもフレッシュなスポーンです。自律実行の各ストーリーは、クリーンなコンテキストウィンドウを持つ新しいエージェントを取得します。スポーン時に、エージェントはブリーフィングを受け取ります。現在のgit状態、前のエージェントが達成したこと、やるべきことです。メモリではなくブリーフィングです。モデルは、30ステップの蓄積されたコンテキストをナビゲートするよりも、明確なブリーフィングの方をうまく実行します。各エージェントはフレッシュな状態で始まるため、コンテキストが膨れ上がることはありません。Geoffrey Huntleyは「The Ralph Loop」で同様のパターンを文書化しており、Sonnetで1時間あたり10.42ドルで自律開発を実行しています。13 OpenSwarmのようなマルチエージェントオーケストレーターは、モデルエスカレーションを伴うワーカー・レビュアーパイプラインを形式化しています。14
アーキテクチャレベル。 オペレーションがステートレスな場合、MCPよりもCLIファーストです。ワンショット評価のためのclaude --print呼び出しはコストが低く、接続オーバーヘッドが追加されません。MCPサーバーは、ツールが永続的な状態やストリーミングを必要とする場合に意味があります。Context Modeは逆のアプローチを実証しました。FTS5インデキシングとBM25ランキングを使用して、315 KBのMCP出力を5.4 KBに圧縮するものです。12 どちらのアプローチもトークン消費を削減しますが、異なる方向からです。私のスキル呼び出しのほとんどはワンショットです。プロンプトキャッシングの分析では、Claude CodeのCLIは4,096トークン以上のシステムプロンプトをデフォルトでキャッシュすることがわかりました。設定は不要です。
ケーススタディ:84のフックが実際にどう動くか
先週の自律実行からの具体的なセッショントレースです。5つのストーリーを持つPRDを処理しています。
-
SessionStartが発火します。ディスパッチャーが注入するのは、現在の日付、プロジェクト検出、フィロソフィー制約、システムパフォーマンスチェック、コスト追跡の初期化です。5つのフック、合計180ms。 -
エージェントがPRDを読み、最初のストーリーを計画します。内部プロンプトに対して
UserPromptSubmitが発火します。ディスパッチャーが注入するのは、アクティブなプロジェクトコンテキスト、セッションドリフトベースライン(後の類似性チェックのための最初のプロンプトのModel2Vecエンベディング)です。120ms。 -
エージェントがテスト実行のために
Bashを呼び出します。PreToolUse:Bashが発火します。ディスパッチャーが実行するのは、認証情報チェック(コマンド内に.envパスがないか)、サンドボックス検証(コマンドがブロックリストにないか)、プロジェクト検出です。90ms。テストが実行されます。PostToolUse:Bashが発火します。アクティビティハートビートがログされ、ベースラインに対するドリフトチェック(コサイン類似度0.63、0.30のしきい値を十分に超えています)が行われます。 -
エージェントがファイル作成のために
Writeを呼び出します。PreToolUse:Writeが発火します。ファイルスコープチェック(このパスはプロジェクトディレクトリ内か?)。PostToolUse:Writeが発火します。書き込まれたファイルのlintチェック、コミット追跡、アクティビティハートビート。 -
エージェントがストーリーを完了します。
Stopが発火します。品質ゲートフックが確認するのは、エージェントが各基準に対するエビデンスを引用したか、曖昧な表現(「should」「probably」)を使ったか、差分にTODOコメントがないかです。いずれかのチェックが失敗した場合、フックはexit 2を返し、エージェントは作業を継続します。 -
独立検証:フレッシュなエージェントが、前のエージェントの自己報告を信頼せずにテストスイートを実行します。
-
3つのコードレビューエージェントが並列にスポーンされます。それぞれが差分を独立してレビューします。発見事項がマージされます。いずれかのレビュアーがCRITICALな問題をフラグした場合、ストーリーはキューに戻されます。
-
ストーリーがパスします。次のストーリーがロードされます。5つすべてのストーリーについてサイクルが繰り返されます。
5つのストーリーにわたって発火したフックの合計:約340回。フックにかかった合計時間:約12秒。1回のオーバーナイト実行で3つの認証情報漏洩、1つの破壊的コマンド、2つの不完全な実装を防いだ、目に見えないオーバーヘッドです。
主要な学び
Claude Codeはツールではなくランタイムです。 17のライフサイクルイベントがそれをプログラマブルにします。フック、スキル、エージェントが命令セットです。モデルが実行エンジンです。あなたがシステムアーキテクトです。
ガバナンスは自動化とともにスケールします。 制約を追加するすべてのフックが、無人運用のリスクを低減します。判断フックと自動化フックの比率が、安全マージンです。私の比率は4:5であり、上昇中です。
インフラストラクチャには複利効果があり、プロンプトにはありません。 良いプロンプトは1つのインタラクションを改善します。良いフックはすべてのインタラクションを改善します。良いスキルはそれを呼び出すすべてのエージェントを改善します。良いエージェントはそれに委任するすべてのワークフローを改善します。乗数効果のあるレイヤーに投資してください。
Remote Controlがインフラストラクチャをポータブルにします。 承認ルーティングは「無監視」を「非同期的に監視されている」に変えます。この区別は、モデルが良い判断をすることを祈ることと、実際にそうしているかを検証することの違いです。
コストは最適化ではなくアーキテクチャです。 フレッシュなエージェントスポーン、CLIファーストの呼び出し、システムプロンプト圧縮、プロンプトキャッシングは、複利効果を生む構造的な決定です。事後の最適化は、最初から設計することよりもコストがかかります。
フレームワークは不要です。 84のフック、48のスキル、19のエージェント、約15,000行のオーケストレーション。ディレクトリ内のbashスクリプト。JSONステートファイル。ランタイム依存なし。1つのフックだけでも、スタック全体でも採用できます。インフラストラクチャは、誰かのフレームワークを実装するのではなく、実際の問題を解決することから有機的に成長します。
この記事はAIエンジニアリングシリーズの一部です。前回:なぜ私のAIエージェントに品質フィロソフィーがあるのか。関連記事:10の頭脳で考える、ブラインドジャッジ。
-
Andrej Karpathyによる、LLMエージェントの上の新しいレイヤーとしての「claws」について。HNディスカッション(406ポイント、917コメント)。 ↩
-
Claude Code Hooksリファレンス。Anthropicドキュメント。JSONの入出力、マッチャーパターン、3つのフックタイプ(command、prompt、agent)を持つ17のライフサイクルイベント。 ↩↩
-
Simon Willison「コードを書くことは今や安価だ」。Agentic Engineering Patterns。HNディスカッション。 ↩
-
Claude Code Skillsリファレンス。Anthropicドキュメント。フロントマターメタデータ、許可ツール、フック定義を持つMarkdown指示セット。 ↩
-
Claude Code Sub-agentsリファレンス。Anthropicドキュメント。独立したコンテキスト、ワークツリーサポート、モデル選択を持つ専門化されたサブエージェント。 ↩
-
Claude Code Remote Control。Anthropicドキュメント。任意のデバイスからローカルセッションを継続。HNディスカッション(531ポイント、313コメント)。 ↩
-
「CLI経由でMCPをより安くする」。thellimistによるブログ記事。HNディスカッション(304ポイント、115コメント)。 ↩
-
「Claude.mdを圧縮する:システムプロンプトの肥大化を60-70%カットする」。jchilcherによるブログ記事。HNディスカッション(24ポイント、9コメント)。 ↩
-
「Claude Codeが選ぶもの」。amplifying.aiによる調査。Claude Codeのツールとフレームワークの好みの分析。HNディスカッション(39ポイント、19コメント)。 ↩
-
Agent Multiplexer(amux)。GitHub。tmux経由でClaude Codeセッションを管理。HNディスカッション(13ポイント)。 ↩
-
Emdash:オープンソースのエージェント開発環境。GitHub。HNディスカッション(201ポイント、71コメント)。 ↩
-
Context Mode:315 KBのMCP出力が5.4 KBに。GitHub。FTS5インデキシングとBM25ランキング。HNディスカッション(77ポイント、23コメント)。 ↩
-
Geoffrey Huntley「The Ralph Loop」。ghuntley.com/loop。Sonnetで1時間あたり10.42ドルの自律開発。 ↩
-
OpenSwarm:マルチエージェントClaude CLIオーケストレーター。GitHub。モデルエスカレーションを伴うワーカー・レビュアーパイプライン。HNディスカッション(34ポイント、18コメント)。 ↩