CLIファーストという命題
1週間でHacker Newsスレッド3件。合計1,638ポイント。1つの結論:IDEは人間のためのもの、CLIはエージェントのためのものです。123
Boris Taneの計画/実行分離アプローチ(716ポイント)は完全にターミナル上で動作します。1「CLIによるMCPコスト削減」の分析(304ポイント)では、MCPのツール呼び出しをclaude --printに置き換えることで94%のトークン削減を計測しました。3 Vercelのjust-bashプロジェクト(87ポイント)は、エージェントのツールの80%を削除することで、すべてがより速く、安く、信頼性が高くなることを実証しました。4 別のベンチマークでは、同等のタスクに対してCLIアプローチがMCPの35分の1のトークンしか使用しないことが判明しています。10
このパターンが繰り返し現れるのは、アーキテクチャがそれを必然的に導くからです。エージェントには構成性、スクリプタビリティ、最小限のオーバーヘッドが必要です。CLIはその3つすべてを提供します。IDEはいずれも提供しません。
TL;DR
CLIファーストのエージェントアーキテクチャは、MCPベースのアプローチと比較してトークンオーバーヘッドを94%削減し、3.5倍高速に動作し、標準的なUnixツールと連携できます。計画/実行分離が機能するのは、CLIの成果物がIDEの状態ではなく、ポータブルなMarkdownファイルだからです。Remote Controlにより、構成性の利点を犠牲にすることなく、CLIエージェントをリモートから監督できるようになりました。すべての本格的なエージェントシステムがターミナルに収束するのは、ターミナルこそが自動化がすでに存在する場所だからです。
計画/実行の分離
Boris Taneは、454人のHNコメント投稿者がそれぞれの変形で検証した3フェーズワークフローを文書化しました。リサーチ、計画、実装です。1 重要な観察:書かれた計画をレビューし承認するまで、エージェントにコードを書かせてはいけません。
このワークフローは各段階でMarkdownの成果物を生成します。research.mdにはコードベース分析が記録されます。plan.mdにはコードスニペットを含む実装戦略が記録されます。開発者はエディタでレビューし、インラインで注釈を追加し、「まだ実装しないでください」という明示的な指示とともに注釈付き計画を返送します。この注釈サイクルは、1行のコードが書かれるまでに1〜6回繰り返されます。
ループ全体がclaudeを通じてターミナルで実行されます。IDEプラグインなし。ビジュアルdiffツールなし。Markdownファイルが入力され、Markdownファイルが出力されます。成果物はファイルとして存在し、会話の状態としてではないため、コンテキストウィンドウの圧縮後も残り続けます。
私の自律ループは、同じ分離をマシンスケールで実装しています。PRDファイルが受け入れ基準付きのストーリーを定義します。各ストーリーごとに新しいエージェントが生成され、現在のgit状態と前のエージェントが達成したことのブリーフィングを受け取ります。エージェントが実装し、独立した検証者がテストを実行し(エージェントの自己報告は信用しません)、3人のコードレビュアーが並行してdiffを評価します。オーケストレーション全体がbashスクリプト内のclaude --print呼び出しで実行されます。フレームワークなし、ランタイムなし、サーバーなし。
計画/実行の分離がターミナルで機能するのは、ターミナルがその分離を構造的なものにするからです。計画はファイルを生成します。実行はファイルを消費します。2つのフェーズ間の境界はディスク上のファイルであり、可視的で監査可能です。IDEプラグイン内部に埋もれた状態遷移ではありません。
エージェントにとってCLIがIDEに勝る理由
この主張は3つの柱に基づいています:コスト、構成性、コンテキスト効率です。
コスト:94%のトークン削減
Kan Yilmazは4つのシナリオにわたってMCPとCLIのトークンオーバーヘッドを計測しました。3 数字がすべてを物語っています:
| シナリオ | MCPトークン数 | CLIトークン数 | 削減率 |
|---|---|---|---|
| セッション開始(ツール使用0回) | ~15,540 | ~300 | 98% |
| 単一ツール使用 | ~15,570 | ~910 | 94% |
| 10ツール使用 | ~15,840 | ~964 | 94% |
| 100ツール使用 | ~18,540 | ~1,504 | 92% |
MCPはすべての会話にツールスキーマを注入します。84個のツールがある場合、エージェントが何か作業を始める前にスキーマのオーバーヘッドだけで15,540トークンを消費します。CLI呼び出しにはスキーマのオーバーヘッドがありません。モデルはすでに標準的なコマンドラインインターフェースを理解しているからです。10 あるユーザーは、MCP_DOCKERが135個のツールで125,964トークンを消費したと報告しています。14
Jannik ReinhardはIntuneコンプライアンスタスクで並行ベンチマークを実施しました:同等の出力に対してMCP経由で145,000トークン、CLI経由で4,150トークンでした。10 CLIエージェントはコンテキストウィンドウの95%を推論に利用できました。MCPエージェントは予算の大部分をツール定義に費やしていました。
構成性:Unixパイプがすでに機能している
Vercelのv0チームはエージェントのツールの80%を削除し、単一のbash環境に置き換えました。9 結果は以下の通りです:
| 指標 | 変更前(15以上のツール) | 変更後(bashのみ) | 変化 |
|---|---|---|---|
| 実行時間 | 274.8秒 | 77.4秒 | 3.5倍高速 |
| 成功率 | 80% | 100% | +20% |
| トークン使用量 | ~102k | ~61k | -37% |
| 必要ステップ数 | ~12 | ~7 | -42% |
Andrew Quはその理由を説明しました:「モデルが自力で処理できる問題を解決しようとしていたのです。」ファイルシステム、grep、パイプ、リダイレクトはすでに構成可能です。モデルはそれらを理解しています。cat | grep | jqがネイティブに処理できる操作のためにカスタムMCPツールを構築することは、能力を追加せずにオーバーヘッドだけを追加します。13
Anthropic自身のドキュメントもこのパターンを確認しています。Claude CodeはUnix哲学に従います:ログをパイプで渡し、CI内で実行し、他のツールとチェーンします。5 ヘッドレスモード(claude -p)は構造化されたJSON出力、スキーマの強制、キャプチャされたセッションIDによるセッション再開をサポートしています。AnthropicはヘッドレスモードをCI/CDおよびスクリプトワークフローの主要な統合パスとして位置づけています。5
Simon Willisonはその含意を次のように表現しています:コードを書くことは今や安価です。6 誰も聞きたくない帰結は、検証こそが今や高価な部分だということです。CLIエージェントは既存の検証インフラストラクチャと連携できます。テストランナー、リンター、型チェッカー、セキュリティスキャナー、デプロイメントパイプライン:すべてコマンドラインツールです。IDEエージェントはそれぞれにプラグインが必要です。CLIエージェントはそれらにパイプするだけです。
コンテキスト効率:ノイズではなくシグナルに対する推論
コンテキストウィンドウは有限です。ツールスキーマ、会話履歴、MCPオーバーヘッドに費やされるすべてのトークンは、推論に使えないトークンです。CLIアーキテクチャは設計上、コンテキスト予算を軽量に保ちます。
新しいclaude --print呼び出しは、完全な会話コンテキスト(~100K以上のトークン)を継承する代わりに、集中したプロンプト(~2Kトークン)を受け取ります。各操作はクリーンな状態から始まります。蓄積された状態なし。古いツール定義なし。会話のドリフトなし。
私のインフラストラクチャは17のライフサイクルイベントにわたる84のフックを実行しており、すべてCLI呼び出しでオーケストレーションされています。各エージェント生成時にはブリーフィングが与えられます:現在のgit状態、前のエージェントが達成したことの要約、そしてその1つのタスクの受け入れ基準です。メモリではなくブリーフィング。モデルは30ステップの蓄積されたコンテキストをナビゲートするよりも、明確なブリーフィングをより良く実行します。
エージェントシステムにおけるUnix哲学の学術的分析がこの原則を形式化しました:多様なインターフェースを統一的な抽象化に集約し、構成性とトラクタビリティと引き換えに専門性の一部を失うことを受け入れます。11 ファイルライクな抽象化とコードベースの仕様は、認知的および工学的負担を軽減します。CLIエージェントはその設計思想の50年分の蓄積を継承しています。
Remote Controlが状況を変える
CLIファーストエージェントへの明白な反論:IDEのビジュアルフィードバックを失います。Anthropicは2026年2月25日にその答えを出荷しました。Remote Controlは任意のブラウザまたはClaudeモバイルアプリからローカルのClaude Codeセッションに接続します。2 この機能はHacker Newsで531ポイントと313コメントを獲得しました。
Remote Controlはクラウドに何も移動しません。エージェントはローカルで実行され続けます。ターミナルセッションはTLS経由でAnthropicのAPIに登録し、作業をポーリングします。すべてのトラフィックはアウトバウンドHTTPSを通過します。インバウンドポートは開きません。2
この機能は監督のギャップを解消します。Remote Control以前、CLIエージェントには2つのモードしかありませんでした:監督付き(ターミナルの前に座る)または監督なし(離席して祈る)。Remote Controlは3番目のモードを創出します:非同期ガバナンスです。承認プロンプトがスマートフォンに転送されます。どこからでも承認、拒否、またはリダイレクトできます。
私のフックシステムは操作を影響範囲で分類します。ローカル操作(ファイル書き込み、テスト実行)は自動承認。共有操作(gitコミット)は警告。外部操作(プッシュ、デプロイ)は人間のレビューに委ねます。Remote Controlはその「委ねる」パスをブロッキングな待機から非同期通知に変えます。エージェントは次のストーリーの作業を続け、私はスマートフォンから前のストーリーをレビューします。
IDEは表示レイヤーになり、実行環境ではなくなります。Remote Controlで進捗を監視します。品質ゲートが問題をフラグした時に介入します。CLIエージェントが作業を行います。IDEはその結果を表示します。
Bashエージェントパターン
Vercelのjust-bashは、AIエージェント専用に構築された、インメモリ仮想ファイルシステムを備えたシミュレートされたbash環境です。4 この設計はエージェントアーキテクチャに関する3つの信念をエンコードしています:
サンドボックスよりも分離。 各呼び出しは分離されて実行されます。環境変数、関数、作業ディレクトリは呼び出し間でリセットされます。ファイルシステムは永続化されます。遅延ファイル読み込みにより、ファイルは最初の読み取り時にロードされキャッシュされ、エージェントが読み取る前に書き込んだファイルは読み込まれません。エージェントは操作間で自身の環境を汚染できません。
カスタムツールよりも既存ツール。 grepは50年の歴史があり、カスタム検索MCPツールが再現するものをまさに処理します。jqはJSONをパースします。curlはURLをフェッチします。モデルは訓練データからこれらのインターフェースを知っています。カスタムツールにはスキーマの注入とドキュメントが必要です。標準ツールにはどちらも不要です。
フレームワークアーキテクチャよりも最小限のアーキテクチャ。 Andrew Quはこの原則を次のように表現しました:「モデルはよりスマートになり、コンテキストウィンドウはより大きくなっています。最良のエージェントアーキテクチャとは、ほとんどアーキテクチャがないことかもしれません。」13
私のハーネスはこのパターンをプロダクションスケールで検証しています。Claude Codeをオーケストレーションする約15,000行のbash。17のイベントタイプにわたる84のフック。ディスパッチャー、品質ゲート、セマンティック検索統合、自律ループ。Pythonランタイムなし、フレームワーク依存なし。bashの粗い部分(ネイティブJSONなし、非同期なし、適切なデータ構造なし)は現実的ですが解決可能です。jqがJSONを処理します。逐次処理は実際には機能です:ゲートは順番に実行されるべきであり、競合すべきではありません。
このパターンが機能するのは、エージェントオーケストレーションが根本的にstdinを読み取り、判断を下し、stdoutに書き込むことだからです。この説明はbashの設計目的と正確に一致します。それ以上に複雑なものは、ツールではなくタスク分解が間違っていることを示しています。
アーキテクチャ決定としてのコスト
コスト決定は複利で増えます。ステートレス操作でMCPの代わりにCLIを選択すると、呼び出しごとに94%節約できます。3 1日100回の操作で、ツール定義のオーバーヘッドだけで月$228の節約になります。3 その節約がより多くの操作の予算を確保し、さらなる節約を生みます。アーキテクチャが自ら元を取るのです。
3つのコスト層が独立して複利効果を生みます:
トークン層。 システムプロンプトの圧縮。私はCLAUDE.mdファイルと8つのルールファイルで~3,500トークンのシステムプロンプトを実行しています。制約は説明よりも高い性能を発揮します。「機密パスに一致するツール呼び出しを拒否する」は、認証情報を保護すべき理由の15行の説明と同じ仕事をします。Anthropicのベストプラクティスドキュメントも同じ点を強調しています:コンテキストウィンドウのパフォーマンスは埋まるにつれて劣化します。7 無駄なトークンはすべて二重のコストを発生させます:直接的なAPI料金と、推論品質の劣化です。
エージェント層。 長い会話よりもフレッシュスポーン。自律実行の各ストーリーはクリーンなコンテキストウィンドウを持つ新しいエージェントを取得します。Geoffrey Huntleyは「The Ralph Loop」と呼ばれる同様のパターンを文書化し、Sonnetで$10.42/時間の自律開発を実行しました。12 各エージェントがフレッシュスタートするため、コンテキストが膨張することはありません。システムプロンプトのキャッシュヒットは90%安価(Opus 4.6で100万トークンあたり$5.00に対し$0.50)なので、フレッシュスポーン間で繰り返されるシステムプロンプトのオーバーヘッドは最小限です。8
アーキテクチャ層。 ステートレス操作にはCLI、ステートフル操作にはMCP。ワンショット評価のためのclaude --print呼び出しは接続オーバーヘッドを追加しません。MCPはツールが永続的な状態やストリーミングを必要とする場合に意味があります。ほとんどのエージェント操作はワンショットの評価、分類、またはコード生成タスクです。CLIはそれらすべてをより低コストでシンプルなデバッグで処理します。
先週の自律ループからの具体例:5つのPRDストーリーを一晩で処理しました。15 各ストーリーはフレッシュエージェント(~2Kトークンのブリーフィング)を生成し、実装を実行し(平均~15Kトークン)、その後3つのレビューエージェント(各~2Kトークン)を生成しました。ストーリーあたりの合計:~23Kトークン。同じワークフローを長時間実行のMCP会話で行った場合、ストーリー3つ目にはストーリーあたり~100K以上のトークンの蓄積されたコンテキストを運ぶことになります。CLIによる5ストーリー:合計~115Kトークン。MCP会話による5ストーリー:合計~500K以上のトークン。コスト比率はストーリーが追加されるたびに複利で増大します。
MCPが依然として勝つ場面
CLIの命題はMCPを普遍的に否定するものではありません。CLIが不十分な特定のシナリオではMCPが勝ちます。
ステートフルなツールサーバー。 呼び出し間で接続プールを維持するデータベースブラウザは、MCPの永続サーバーモデルの恩恵を受けます。CLI呼び出しのたびに再接続すると、レイテンシと認証オーバーヘッドが追加されます。ツールが呼び出し間で状態を必要とする場合、MCPが正しい選択です。
構造化されたバリデーション。 MCPのツールスキーマは入出力のコントラクトを強制します。CLI呼び出しは任意のテキストを受け付けます。エージェントが精密なスキーマに一致する構造化入力(APIキーフォーマット、日付範囲、列挙オプション)を提供する必要がある場合、MCPスキーマはツールが処理する前に不正な入力を検出します。CLIのバリデーションにはツール自体またはラッパースクリプトによる制約の強制が必要です。
マルチテナントのアクセス制御。 MCPサーバーはユーザーごとの権限を一元的に強制できます。CLIツールはオペレーティングシステムユーザーの権限を継承します。異なるエージェントが異なるアクセスレベルを必要とするチーム環境では、MCPがより細かい粒度の認可を提供します。
ストリーミングレスポンス。 インクリメンタルな出力を生成する長時間実行操作(ログテーリング、ビルド進捗、データベースエクスポート)は、完了までブロックするCLI呼び出しよりも、MCPのストリーミングプロトコルの方がうまく機能します。
判断ルール:操作がステートレスでワンショットならCLIを使います。操作が永続的な状態、構造化されたコントラクト、またはストリーミングを必要とするならMCPを使います。私のハーネスでは、操作の約90%がステートレスです。MCPを必要とする10%は真にその恩恵を受けています。90%を最適化することが最大のリターンをもたらします。
今日から構築できるもの
3つのパターン。それぞれ半日で構築可能。それぞれが互いに複利効果を生みます。
パターン1:計画/実行の分離
# Plan phase: research and plan, no implementation
claude -p "Research the codebase and write research.md" \
--allowedTools "Read,Glob,Grep,Write"
# Review: read annotations in research.md, write plan.md
claude -p "Read my annotations in research.md and write plan.md" \
--allowedTools "Read,Write"
# Implement: follow the approved plan
claude -p "Implement the plan in plan.md" \
--allowedTools "Read,Write,Edit,Bash"
各フェーズにスコープされたツール権限が与えられます。計画エージェントはコードを編集できません。実装エージェントはウェブを閲覧できません。ファイル境界が分離を強制します。--allowedToolsフラグがCLIレベルで強制を行います。設定ファイルなし。プラグイン設定なし。呼び出しごとに1つのフラグで、そのフェーズに必要な権限だけにスコープされます。
注釈サイクルが「より良いプロンプティング」との主要な差別化要因です。エディタで計画をレビューします。同意しない部分を取り消します。余白にメモを追加します。エージェントが注釈付きファイルを読み、修正します。2つの異なる知性(人間のドメイン知識とモデルのコード生成能力)が同じドキュメント上で収束するため、計画は各パスで改善されます。
パターン2:タスクごとのフレッシュスポーン
for story in $(jq -r '.stories[].id' prd.json); do
# Each story gets fresh context with a focused briefing
criteria=$(jq -r ".stories[] | select(.id==\"$story\")" prd.json)
state=$(git diff --stat HEAD~1)
briefing="Git state: $state --- Story: $criteria"
claude -p "Implement: $briefing" \
--output-format json \
--allowedTools "Read,Write,Edit,Bash,Glob,Grep" \
| jq -r '.result'
# Independent verification: never trust self-report
python -m pytest -v
done
蓄積されたコンテキストなし。会話のドリフトなし。各エージェントは集中したブリーフィングを持つクリーンなウィンドウを取得します。--output-format jsonフラグはセッションIDを含む構造化出力をキャプチャし、ストーリーにフォローアップ作業が必要な場合の確定的な会話再開を可能にします。
独立した検証ステップは実装ステップよりも重要です。エージェントは、テストを実行せずにパスしたと主張するPhantom Verificationと呼ばれる行動を示します。エージェントのコンテキストウィンドウの外でpytestを実行することで、この失敗モードを完全に排除できます。エージェントは自分が生成していない結果を偽って報告することはできません。
パターン3:並列レビューパイプライン
diff=$(git diff HEAD~1)
# Three reviewers with independent context
claude -p "Review for bugs: $diff" --output-format json > /tmp/correctness.json &
claude -p "Review for vulnerabilities: $diff" --output-format json > /tmp/security.json &
claude -p "Review for style issues: $diff" --output-format json > /tmp/conventions.json &
wait
# Merge findings from all three
jq -s 'map(.result)' /tmp/correctness.json /tmp/security.json /tmp/conventions.json
3つのエージェント。3つの視点。共有状態ゼロ。レビュアー間の不一致は、単一のレビュアーが見逃す問題をまさに浮き彫りにします。&演算子とwaitビルトインが並列処理を担当します。非同期ランタイムなし。スレッドプールなし。オーケストレーションフレームワークなし。bashのジョブ制御が仕事をします。
このパターンの力:各レビュアーがその1つの関心事に対してフルコンテキストウィンドウを取得します。正確性、セキュリティ、スタイルに注意を分散させる単一のレビュアーは、専用のコンテキストを持つ3人のスペシャリストよりもパフォーマンスが劣ります。各呼び出しが独立したメモリを持つ独立したプロセスであるため、CLIはこの分離を簡単にします。
重要なポイント
エージェントシステムを構築する開発者へ:
- すべてのエージェント生成にclaude -pから始めてください。永続的な状態が必要な場合にのみMCPを追加してください。
- フェーズごとにツール権限をスコープしてください。計画エージェントは読み取り。実装エージェントは書き込み。レビューエージェントはdiffの読み取り。
- ステートレス操作でMCPの代わりにCLIを選択することで、トークンオーバーヘッドを94%削減できます。3
自律ワークフローをスケールするチームへ: - フレッシュエージェントスポーンはコンテキストのドリフトを防止し、操作ごとのトークンコストに上限を設けます。 - Remote ControlはCLIアーキテクチャを変更することなく、「監督なし」を「非同期監督」に変えます。2 - Vercelのデータは直感に反する結果を証明しています:ツールが少ないほど成功率が高くなり、低くなるのではありません。4
エージェントインフラストラクチャを選択するアーキテクトへ: - CLIエージェントは既存のCI/CD、テスト、デプロイメントツールと連携します。統合作業は不要です。 - Unix哲学(パイプで小さなツールを構成する)は、すべてのエージェント固有フレームワークに先行し、それらを上回ります。11 - 10%の生産性の壁は、エージェントをチャットツールとして扱うのをやめ、インフラストラクチャとして扱い始めたときに突破されます。
AIエンジニアリングシリーズの一部です。こちらもご覧ください:インフラストラクチャとしてのClaude Code、Clawの解剖学、自律ループ、10%の壁。
-
Boris Tane, “How I Use Claude Code: Separation of Planning and Execution.” Blog post. HN discussion (716 points, 454 comments). ↩↩↩
-
Claude Code Remote Control. Anthropic documentation. HN discussion (531 points, 313 comments). ↩↩↩↩
-
Kan Yilmaz, “Making MCP Cheaper via CLI.” Blog post. HN discussion (304 points, 115 comments). ↩↩↩↩↩↩
-
Vercel, just-bash: Bash for Agents. GitHub repository. HN discussion (87 points, 48 comments). ↩↩↩
-
Claude Code Headless Mode. Anthropic documentation. ↩↩
-
Simon Willison, “Writing Code is Cheap Now.” Agentic Engineering Patterns. ↩
-
Claude Code Best Practices. Anthropic documentation. ↩
-
Anthropic Model Pricing. Pricing page. Opus 4.6: $5/MTok input, $0.50/MTok cache hit. ↩
-
Andrew Qu, “We Removed 80% of Our Agent’s Tools.” Vercel blog. ↩
-
Jannik Reinhard, “Why CLI Tools Are Beating MCP for AI Agents.” Blog post. 35x token reduction, 33% TES advantage. ↩↩↩
-
Deepak Babu Piskala, “From ‘Everything is a File’ to ‘Files Are All You Need’: How Unix Philosophy Informs the Design of Agentic AI Systems.” arXiv:2601.11672, January 2026. ↩↩
-
Geoffrey Huntley, “The Ralph Loop.” ghuntley.com/loop. Autonomous development at $10.42/hour on Sonnet. ↩
-
“The Key to Agentic Success? BASH Is All You Need.” The New Stack, February 2026. ↩↩
-
MCP token overhead analysis. Context pollution guide. One user hit 144,802 tokens from MCP tools alone. ↩
-
Author’s analysis based on autonomous loop sessions processing multi-story PRDs via Claude Code CLI. ↩