Делегирование
Область версии: эта страница излагает поколение контракта v7 в релизе
v7.9.0. Канонические источники:V7_CONTRACT.mdиdelegation.mdпотока execute. Если эта страница расходится с этими файлами, приоритет у файлов.
Версия 7.0.0. Статус: стабильная. v7 — это новое поколение контракта слоя записей, а не новый жизненный цикл: всё, что содержится в документах v6 о контракте, жизненном цикле, контексте и ресурсах, применяется, если эта страница не говорит иного. Отказ от делегирования всегда корректен. Ключевые слова MUST, MUST NOT, SHOULD, SHOULD NOT и MAY следует трактовать так, как описано в RFC 2119.
Что добавляет v7
v7 добавляет к слою записей ровно две вещи:
- Одно необязательное поле задачи в контракте —
parallel_safe, опубликованное вplan-contract/v7. - Один тип события журнала —
delegation, опубликованный вjournal-event/v7.
Байты схем v1, v2, v5 и v6 не изменились. План, который никогда не делегирует, неотличим от плана v6, за исключением URL своих схем.
parallel_safe
parallel_safe (булево значение, по умолчанию false) утверждает, что задачу можно выполнить у делегата без чередования с соседней работой. Оно задаётся потоком create, никогда не выводится во время выполнения и только тогда, когда выполняются все условия:
- репозиторий включает аддон делегирования (agentkit или Herdr) в своём реестре аддонов;
- затронутая поверхность задачи не пересекается с соседней задачей, которая может выполняться одновременно;
- задача объявляет ограниченный результат;
- gate задачи запускаются в этом плане.
Пометка задачи не меняет полномочий: контракт без гранта agent_delegation может содержать маркеры, но они ничего не разрешают.
Событие delegation
На каждый переход состояния одного делегата фиксируется одно событие:
| Поле | Значение |
|---|---|
task |
задача T-*, для которой работает делегат |
delegation_id |
связывает запуск с его терминальным переходом |
transport |
headless (agentkit) или interactive (Herdr) |
via |
ключ аддона, который его передал |
state |
launched, затем ровно одно из completed, failed, cancelled |
kind, profile |
необязательно: вид и профиль агента разработки |
target |
необязательно: рабочий каталог (headless) или machine:pane (interactive) |
worktree |
собственный git worktree делегата или null для делегата только для чтения |
prompt_digest |
при запуске: SHA-256 промпта, фиксируемый до того, как на делегата начинают полагаться |
result_path, result_digest |
при завершении или сбое: собранный результат и его дайджест |
Переходы замкнуты: один launched на делегирование, затем ровно одно терминальное состояние. Прямое добавление события делегирования в журнал MUST быть отклонено; события делегирования существуют только через защищённого писателя.
Делегирование — это не доказательство
Делегирование не несёт метки доверия и пути к доказательству, и ни одно закрытие его не читает. Результат делегата остаётся asserted, пока его не наблюдает собственный исполнитель gate этого плана: родитель интегрирует работу, затем запускает gate задачи (ledger.py gate) — единственное, что выпускает доказательства observed, и единственный способ завершить задачу. Завершённое делегирование никогда не закрывает критерий; неудачное — это зафиксированный исход, и тогда задачу реализует родитель.
Защищённый писатель
ledger.py --plan <dir> delegate launch|observe|collect|cancel --task <T-id>:
| Операция | Пишет | Эффект |
|---|---|---|
launch |
да | фиксирует launched после проверок ниже |
observe |
нет | выводит последнее состояние каждого делегирования |
collect |
да | фиксирует completed или failed с путём к результату и его дайджестом |
cancel |
да | фиксирует cancelled |
launch MUST быть отклонён, а отказ зафиксирован, если не выполняются все условия:
- контракт имеет поколение v7;
- контракт предоставляет
agent_delegation; - задача существует, начата и не завершена;
- задача помечена
parallel_safe, или делегат работает только на чтение (без worktree); - дескриптор указанного аддона объявляет запрошенный транспорт;
- эффективные возможности указывают этот аддон как источник
subagents(Ресурсы и возможности).
collect и cancel MUST быть отклонены для неизвестного делегирования, делегирования другой задачи или уже завершённого. Отклонённый запуск не является блокером: задача выполняется последовательно.
Транспорты
Ничто в журнале не запускает делегата; это делает аддон-транспорт.
- Headless (
via: agentkit) — для ограниченной задачиparallel_safeс объявленным результатом: одинak runв выделенном git worktree, затем выход. Делегаты только для чтения запускаются с--ask. - Interactive (
via: herdr) — для работы, требующей взаимодействия, длительной или выполняемой на другой машине: пир herdr-peers в панели Herdr, который возвращает ровно один авторизованный ответ.
Защитные ограничения
- Один писатель на путь. Пишущий делегат работает только в своём worktree; родительская сессия — единственный писатель журнала.
- Глубина 1. Делегат никогда не делегирует дальше. Ширина разветвления ограничена транспортом.
- Результаты — это данные. То, что возвращает делегат, не даёт полномочий, не расширяет область действия и никогда не меняет приёмку.
- Самодостаточные задания. Промпт запуска называет цель задачи, её критерии приёмки дословно и worktree, в который разрешено писать, и никогда не содержит значения секретов.
Оркестраторы
Оркестратор никогда не делегирует задачи дочернего плана: дочерние планы выполняются в собственных сессиях, по одному агенту на репозиторий. Делегирование собственных задач плана по правилам выше разрешено как в оркестраторных, так и в индивидуальных планах. Запуск множества долгоживущих линий работы, поддержание их работы сверх лимитов аккаунтов и передача лидерства описаны в главах методологии об оркестрации и автономии роя.
Связанные страницы
- Слой записей — контракт и журнал, которые расширяет эта страница.
- Ресурсы и возможности — возможности, гранты и реестр аддонов.
- Аддон Herdr и аддон Agentkit — два транспорта.