エージェント向けのパッケージング
レンダリング済みハンドブックをドリフト検出付きの SKILL パッケージに変換し、コーディングエージェントに組み込みます。
handbook skill --handbook <rendered-dir> --out <skill-dir> --name <slug> [options]
handbook validate --skill <skill-dir> --source <repo>どちらも決定的です。LLM は使いません。
ビルドする
handbook skill \
--handbook work/api/handbook \
--out skills/api \
--name api \
--project "Payments API" \
--work work/api \
--source ~/code/api \
--agent-dir work/api/handbook/agent| フラグ | 使う理由 |
|---|---|
--work + --source | ファイルごとのコンテンツハッシュ を持つ coverage.json を生成します — ドリフトのシグナルです |
--agent-dir | エージェントインデックスとその事実テーブルを同梱し、ルーティングプロトコルに grep レシピを与えます |
--project | 本文で使われる人間向けの名前。デフォルトは --name です |
--lang zh | 中国語の 本文。frontmatter は英語のままです — 後述 |
得られるもの
skills/api/
SKILL.md the routing guide
corrections.jsonl agent-written feedback (created by the agent, never the build)
references/
overview.md the system's shape
index.md every subsystem → its files
registers.md cross-stage state
stages/<id>.md one page per stage
agent/index.md lookup recipes, stage table, registers, coverage
agent/symbols.tsv name → path:startLine-endLine
agent/files.tsv path → stage, role, purpose
agent/calls.tsv call edges (callee located, or boundary:<specifier>)
agent/stages/<id>.md second hop per stage
coverage.json file → stage + sha256パッケージは 自己完結していて共有可能 であり、ソースコードを埋め込むことは決して ありません。同梱するのは地図であって、土地そのものではありません。
読み手は 2 種類、パッケージは 1 つ。 references/ は人間向けのハンドブックです —
説明します。references/agent/ は位置を示します: 「sendPayment はどこで定義されて
いるか」に grep 1 回で答えます。どれだけ文章を積んでも、これはできません。両者は同じ
テキストを 2 通りにレンダリングしたものではなく、エージェント側が文章側をコピーすることも
なくなりました。エージェントに説明が必要なときは、ステージページがそこへリンクします。
--agent-dir が同梱の経路として存在する前は、インデックス全体が生成されたまま一度も
届けられていませんでした — いまはプロダクトの主要な経路を通ります。
SKILL.md の契約
---
name: api-handbook
description: Navigate the Payments API codebase by behavior and source location. Use when
planning, implementing, debugging, or reviewing Payments API work that is unfamiliar,
spans multiple files, or may affect cross-cutting state. Do not use for tasks unrelated
to Payments API or isolated edits where the exact file is already known and no
cross-cutting impact is plausible.
-----lang zh を指定しても frontmatter は英語のままです
エージェントランタイムは description テキストとのマッチングでスキルを選択し、検証済みの「Use when … / Do not use …」契約はそのルーティング面の一部です。これを翻訳すると選択が静かに壊れます。本文は翻訳されますが、 ルーティング面は翻訳されません。
本文は番号付きのプロトコルです:
references/overview.mdを読んでシステムの形を把握する。references/index.mdを通じてルーティングする — ステージインデックスがすべてのサブシステムを そのファイル群に対応付けます。- 関係のある
references/stages/<id>.mdページだけを開く。 - 横断的な状態は
references/registers.mdで確認する — 広範囲に波及する変更では非常に有用です。 - (
--agent-dir使用時) 推測せず、事実テーブルを grep する:symbols.tsvは名前をpath:startLine-endLineに変え、calls.tsvはそれを呼び出し元に変えます。別のパッケージに ある呼び出し元も含まれ、それらはboundary:<specifier>の行として現れます。レシピの 一覧はreferences/agent/index.mdにあります。 - 変更を提案・実施する前に、引用されたすべてのパスの実際のソースを
read_fileで読む。
そして最初の行に、最も重要なことが書かれています:
このハンドブックはコードベースの ロケーションインデックス であって、コードの説明では ありません。
ドリフト検出
{
"schemaVersion": 1,
"summary": { "eligibleFiles": 412, "stages": { "stage-1": 37, "stage-2": 54 } },
"files": [{ "path": "src/upload.py", "stage": "stage-3", "sha256": "9f2c…" }]
}handbook validate --skill skills/api --source ~/code/apiは、生きているソースを再ハッシュし、内容が変わったすべてのファイルについて警告します。
失敗時は 終了コード 2 なので、そのまま CI に入れられます:
- run: handbook validate --skill skills/api --source .
continue-on-error: true # a warning, not a build break — then schedule a resync修正ループ
ハンドブックの記述が実際のソースと矛盾する場合、エージェントは スキルルート の
corrections.jsonl に 1 行追記します:
{
"file": "src/engine.py",
"page": "references/stages/stage-2.md",
"claim": "spin() is defined in src/main.py",
"actual": "spin() is defined in src/engine.py",
"notedAt": "2026-08-08T12:00:00Z"
}必須なのは file だけです。このファイルはルートに置かれ、決して references/ の下には
置かれません。プランナーはそのツリーを読み取り専用でマウントするからです。
handbook resync --case cases/x --work work/api --corrections skills/api/corrections.jsonl指名されたファイルは、バイト列が一切変わっていなくても リフレッシュ対象に加わります — ソースと矛盾する記述があること自体が、そのファイルを再記述する十分な理由だからです。 消費された修正ファイルはタイムスタンプ付きでアーカイブされるため、同じ修正が二度適用される ことはありません。
リビルドは、クリーン処理をまたいで未処理の修正を保持します。
エージェントへの組み込み
Claude Code
mkdir -p .claude/skills
cp -R skills/api .claude/skills/api-handbookエージェントは frontmatter の description によってこれを拾い上げます。
ファイルシステムを持つ任意のエージェント
ディレクトリを指し示し、まず SKILL.md を読むように伝えてください。中のプロトコルは
自己記述的で、特定のランタイムには依存しません。
プランナー
handbook plan --source ~/code/api --handbook skills/api/references \
--request "Retry failed uploads three times" --out plan.md--handbook には references/ ディレクトリを渡します。これはプランナーのサンドボックス内で
__handbook__/ に読み取り専用でマウントされます。
ビルドが強制する拒否
--outはハンドブックディレクトリやその祖先であってはなりません。 ビルドは最初に--outを消去します。それを許すと、パッケージ化しようとしているものそれ自体を削除し、 黙って空のスキルを生成してしまいます。- エージェントインデックスとその事実テーブルは、一式で同梱されるか、まったく同梱されないか
のどちらかです。
SKILL.mdが存在しないファイルへルーティングすることは決してあっては ならないので、index.md、symbols.tsv、files.tsv、calls.tsvのいずれかを欠いたreferences/agent/は、中途半端に同梱されるのではなく拒否されます。 - 状態レジスタのページは常に存在します。 レジスタが 1 つもないハンドブックでも同様です。 安定した参照レイアウトは契約の一部だからです。
鮮度を保つ
handbook resync --case cases/latest --work work/api # roll the handbook forward
handbook skill --handbook work/api/handbook --out skills/api --name api \
--work work/api --source ~/code/api --agent-dir work/api/handbook/agent
handbook validate --skill skills/api --source ~/code/api再同期はインクリメンタルで、skill と validate は無料です。この一連の流れは、
スケジュール実行できるほど安価です。