mybook

第3章 — ハーネスの5層モデル

設計図を手に入れる

ミサキがユウキをホワイトボードの前に連れていった。

「ハーネスエンジニアリングの全体像を教える。コーディングエージェントのハーネスは 5つの層 で構成される」

ミサキは図を描き始めた。

Loading diagram...

「この5つが、エージェントの振る舞いを決めるすべてだ」

第1層: メモリ(Memory)

エージェントが常に知っていることを定義する層。セッションをまたいで持続する知識。

代表的な実装

実装説明
CLAUDE.mdプロジェクトルールコーディング規約、スタック情報
.claude/rules/パス限定ルールテストファイルの書き方
自動メモリAI が自分でメモを取るユーザーの好み、過去の修正
# CLAUDE.md の例
- TypeScript strict mode を使用
- テストカバレッジ 80% 以上を維持
- API: tRPC、DB: PostgreSQL + Drizzle ORM

重要な原則

WARNING

メモリは「助言(Advice)」である。「こうしてほしい」と書いても、AI が必ず従う保証はない。本当に強制したい場合は、上位の層(フックや権限)を使う。

「CLAUDE.md に『rm -rf を使うな』と書いても、AI が無視する可能性がある。でも Hook でブロックすれば、物理的に実行できない。この違いが決定的に重要なの」

第2層: ツール(Tools / MCP)

エージェントが何にアクセスし、何を操作できるかを定義する層。

ビルトインツール

  • Read — ファイルを読む
  • Write / Edit — ファイルに書く
  • Bash — シェルコマンドを実行する
  • WebSearch / WebFetch — Web を検索・取得する

MCP サーバー

外部ツールとの接続を標準化するプロトコル。

{
  "mcpServers": {
    "github": {
      "command": "gh",
      "args": ["mcp"]
    },
    "database": {
      "command": "mcp-server-postgres",
      "args": ["--connection-string", "postgresql://..."]
    }
  }
}

設計のポイント

ツールは最小権限の原則で設計する。エージェントに必要なツールだけを渡し、不要なアクセスは与えない。

第3層: 権限(Permissions)

エージェントが何をしていいか、何をしてはいけないかを定義する層。

3つのレベル

レベル意味
Allow確認なしで実行可能ファイルの読み取り
Ask実行前にユーザーに確認ファイルの書き込み
Deny絶対に実行不可機密ファイルの読み取り
{
  "permissions": {
    "allow": [
      "Read",
      "Write(src/**)",
      "Bash(pnpm test)"
    ],
    "deny": [
      "Bash(rm -rf *)",
      "Bash(git push --force)",
      "Read(.env)"
    ]
  }
}

第4層: フック(Hooks)

ツール呼び出しの前後に自動実行されるスクリプト。権限が「何ができるか」を決めるのに対し、フックは「実行時に何を強制するか」を決める。

メモリとフックの決定的な違い

Loading diagram...

INFO

「メモリは助言。フックは法律」——この区別が安全性の鍵。

フックの種類と用途

フックタイミング代表的な用途
PreToolUseツール実行前破壊的コマンドのブロック、秘密鍵の検出
PostToolUseツール実行後自動 lint/format、Mermaid 検証
Stop応答完了時セッション引き継ぎ資料の生成
SessionStartセッション開始時環境チェック、前回の引き継ぎ表示

第5層: 観測(Observability)

エージェントが何をしたか、どう振る舞ったかを記録し、後から確認できるようにする層。

なぜ重要か

本番 AI システムにおいて、観測可能性はオプションではなく必須。デバッグ、コスト管理、リスク低減——すべてが観測の上に成り立つ。

記録すべきもの

対象内容
メトリクストークン使用量、応答時間、成功率
トレースツール呼び出しの連鎖、判断の流れ
ログエージェントの決定内容、エラー情報
評価出力品質のスコアリング
コストAPI 呼び出しの費用追跡

業界標準: OpenTelemetry

業界は OpenTelemetry(OTEL) をエージェントのテレメトリデータ収集の標準として収束しつつある。ベンダーロックインを防ぎ、フレームワーク間の相互運用性を確保する。

2つの執行レイヤー

ミサキは最後に、重要な区別を強調した。

「ハーネスにはプロセス内部プロセス外部の2つの執行レイヤーがある」

Loading diagram...
レイヤー制御対象具体例
プロセス内部エージェントが発行できるツール呼び出し権限、フック、MCP スコープ
プロセス外部エージェントが実際に実行できることOS 権限、コンテナ、ネットワーク

「たとえばハーネスが『ファイルの書き込みを許可』しても、OS ユーザーにその権限がなければ実行されない。多層防御が大切」

5層の相互作用

Loading chart...

各層は独立ではなく、互いに補完し合う:

  • メモリが方向を示し、フックが強制する
  • 権限がアクセス範囲を決め、ツールが能力を提供する
  • 観測がすべてを可視化し、改善のサイクルを回す

ユウキはメモを取り終えて顔を上げた。「5層のうち、どこから始めればいいですか?」

「メモリ(CLAUDE.md)から。一番簡単で、一番効果が大きい。次の章で詳しくやろう」

次の章では、5層モデルの第1層——CLAUDE.md の設計——に踏み込む。