Упаковка для вашего агента
Превратите отрендеренный handbook в пакет 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 | Тело на китайском. Фронтматтер остаётся английским — см. ниже |
Что вы получаете
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Пакет самодостаточен и пригоден для передачи, и он никогда не содержит исходный код. Он поставляет карту, а не территорию.
Две аудитории, один пакет. references/ — это handbook для человека, он объясняет.
references/agent/ указывает местоположение: он одним grep отвечает на вопрос «где
определён sendPayment», чего никакая проза не делает. Это не два рендеринга одного
текста, и агентская сторона больше не копирует прозаическую; там, где агенту нужно
объяснение, страница этапа на него ссылается. Пока --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
Среды выполнения агентов выбирают скиллы, сопоставляя текст описания, а проверяемый контракт «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реального исходника по каждому процитированному пути, прежде чем предлагать или вносить изменения.
А первая строка тела говорит самое важное:
Этот handbook — индекс местоположений для кодовой базы, а не описание кода.
Обнаружение дрейфа
{
"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Цикл исправлений
Когда утверждение handbook противоречит реальному исходнику, агент дописывает одну строку
в corrections.jsonl в корне скилла:
{
"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Агент подхватывает скилл по описанию во фронтматтере.
Любой агент с файловой системой
Укажите ему каталог и попросите сначала прочитать SKILL.md. Протокол внутри
самоописателен и не зависит от конкретной среды выполнения.
Планировщик
handbook plan --source ~/code/api --handbook skills/api/references \
--request "Retry failed uploads three times" --out plan.md--handbook принимает каталог references/, который монтируется только для чтения в
__handbook__/ внутри песочницы планировщика.
Отказы, которые обеспечивает сборка
--outне должен быть каталогом handbook или его предком. Сборка начинается с очистки--out; иначе она удалила бы то самое, что упаковывается, а затем тихо произвела бы пустой скилл.- Индекс для агента и его таблицы фактов поставляются комплектом или не поставляются
вовсе.
SKILL.mdникогда не должен маршрутизировать к файлу, которого нет, поэтомуreferences/agent/, в котором не хватаетindex.md,symbols.tsv,files.tsvилиcalls.tsv, отвергается, а не поставляется недособранным. - Страница регистров существует всегда, даже для handbook без единого регистра, потому что стабильная раскладка справочных материалов — часть контракта.
Поддержание свежести
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/apiResync инкрементален, а skill + validate бесплатны. Вся эта последовательность
достаточно дешева, чтобы выполнять её по расписанию.
Рендеринг результатов
Markdown, HTML-сайт, одна самодостаточная страница, локаторный индекс для агентов и llms.txt — всё детерминировано и бесплатно для повторного запуска.
Планирование изменения
Дайте планировщику запрос и handbook — получите байт-точный план правок и машиночитаемую декларацию того, чего он касается.