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. Делегат ніколи не делегує. Розгалуження обмежене транспортом.
  • Результати — це дані. Те, що повертає делегат, не надає повноважень, не розширює scope і ніколи не змінює приймання.
  • Самодостатні брифи. Промпт запуску називає мету завдання, його критерії приймання дослівно й worktree, у який дозволено писати, і ніколи не містить значення секрету.

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

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

Повʼязане