メインコンテンツまでスキップ

Agent = Model + Harness

AI エージェントを実際に運用すると、モデルを賢いものに替えても期待ほど安定しない、という壁にぶつかります。同じモデルでも、設定の仕方しだいで「指示を守る確率」が大きく変わるからです。この差を生んでいるのがハーネスです。

中核の等式

このガイドが下敷きにしている考え方を 1 行で書くと、こうなります。

Agent = Model + Harness

エージェント(実際に仕事をこなす存在)は、モデル単体ではなく、モデルとハーネスの組み合わせで決まる、という意味です。ここでいうハーネスとは、モデルの周りを固める仕掛けの総称で、具体的には次のようなものを指します。

  • rules — 守ってほしい規範(命名規約、検証の手順、禁止事項)
  • skills/debug のような、手順がパッケージ化されたコマンド
  • agents — レビューやリファクタを担当する専門の subagent
  • hooks — 特定のタイミングで自動実行されるスクリプト
  • MCP — 外部ドキュメントや構造化推論を呼び出すツール群
  • memory — セッションをまたいで学びを残す仕組み
  • verification loop — 出力を検証してから完了とみなすループ(/debug の Verify で実際にテストを走らせ、出力を「直った」証跡とする)

これらは「Claude Code が機構を提供し(📦)、中身を使い手が書く(🔧)」という分担で成り立っています(区分の詳細は凡例)。

モデルは「エンジン」、ハーネスは「車体」に当たります。どれだけ高出力のエンジンでも、ハンドル・ブレーキ・センサーがなければ公道はまともに走れません。エージェントの信頼性は、エンジンの馬力よりも、この車体の設計品質に強く依存します。

なぜモデルだけでは足りないのか

LLM は本質的に「直前のトークンの続きを確率的に予測するモデル」です。賢くはなっても、指示を 100% 守るわけではありません。「テストを実行してから完了と言う」「秘密情報をハードコードしない」といった約束も、確率的にすり抜けます。ハーネスは、この「確率的なすり抜け」を構造的に塞ぐための仕掛けです。

ハーネスがある場合・ない場合

同じ依頼を、ハーネスの有無で比べてみます。

ハーネスなし(モデル任せ)
依頼: 「この関数のバグを直して」
→ それらしい修正を出す
→ テストは実行しないことがある
→ 「直りました」と言うが、実は別の箇所が壊れている
→ 秘密鍵をうっかりコードに直書きしても気づかない
ハーネスあり(このガイドの環境)
依頼: 「この関数のバグを直して」
→ /debug skill が起動し、仮説を立てて検証する手順に乗る
→ 常時ロード済みの rule(検証ファースト原則)が効いていて、テスト実行が促される
→ .env への書き込みは hook が事前にブロックする
→ 応答の最後に Stop hook が出力を点検し、平文での質問などをその場で言い直させる

(上記 2 つは思考実験としての例示で、筆者環境での実測ログではありません)

違いは「モデルが賢いかどうか」ではありません。良い振る舞いを期待するか、構造で強制するかの違いです。ハーネスエンジニアリングとは、後者を設計する営みを指します。

このガイドで「動き」を見る理由

ハーネスの各要素は、設定ファイルを眺めているだけでは関係が見えてきません。rules/ のファイル、hooks/ のスクリプト、MCP のツールが、それぞれ独立して置かれているからです。

ところが、1 つのコマンドを実行すると、これらが順番に発火して 1 つの流れを作ります。次章からは /debug を題材に、その発火の連鎖を時系列で追います。その前に、まず「どんな要素を、どう分類して捉えると見通しが良いか」を次の章で押さえます。

この章のまとめ

要点は次のとおりです。

  • エージェントの信頼性は、モデルよりハーネスの設計で決まる(Agent = Model + Harness
  • LLM は確率的にしか指示を守らず、ハーネスがそれを構造で補う
  • 個々の設定は静的だが、コマンド実行時に連鎖して 1 つのワークフローになる

次は Guides と Sensors の十字分類 で、ハーネスの要素を整理する枠組みを学びます。