Skip to content
← Все документы спецификации

Делегирование

Область версии: эта страница излагает поколение контракта 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 добавляет к слою записей ровно две вещи:

  1. Одно необязательное поле задачи в контракте — parallel_safe, опубликованное в plan-contract/v7.
  2. Один тип события журнала — 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 быть отклонён, а отказ зафиксирован, если не выполняются все условия:

  1. контракт имеет поколение v7;
  2. контракт предоставляет agent_delegation;
  3. задача существует, начата и не завершена;
  4. задача помечена parallel_safe, или делегат работает только на чтение (без worktree);
  5. дескриптор указанного аддона объявляет запрошенный транспорт;
  6. эффективные возможности указывают этот аддон как источник subagents (Ресурсы и возможности).

collect и cancel MUST быть отклонены для неизвестного делегирования, делегирования другой задачи или уже завершённого. Отклонённый запуск не является блокером: задача выполняется последовательно.

Транспорты

Ничто в журнале не запускает делегата; это делает аддон-транспорт.

  • Headless (via: agentkit) — для ограниченной задачи parallel_safe с объявленным результатом: один ak run в выделенном git worktree, затем выход. Делегаты только для чтения запускаются с --ask.
  • Interactive (via: herdr) — для работы, требующей взаимодействия, длительной или выполняемой на другой машине: пир herdr-peers в панели Herdr, который возвращает ровно один авторизованный ответ.

Защитные ограничения

  • Один писатель на путь. Пишущий делегат работает только в своём worktree; родительская сессия — единственный писатель журнала.
  • Глубина 1. Делегат никогда не делегирует дальше. Ширина разветвления ограничена транспортом.
  • Результаты — это данные. То, что возвращает делегат, не даёт полномочий, не расширяет область действия и никогда не меняет приёмку.
  • Самодостаточные задания. Промпт запуска называет цель задачи, её критерии приёмки дословно и worktree, в который разрешено писать, и никогда не содержит значения секретов.

Оркестраторы

Оркестратор никогда не делегирует задачи дочернего плана: дочерние планы выполняются в собственных сессиях, по одному агенту на репозиторий. Делегирование собственных задач плана по правилам выше разрешено как в оркестраторных, так и в индивидуальных планах. Запуск множества долгоживущих линий работы, поддержание их работы сверх лимитов аккаунтов и передача лидерства описаны в главах методологии об оркестрации и автономии роя.

Связанные страницы