fix(agents): исправлена оркестрация моделей и контекста
- Зачем: - следующая сессия должна управлять стоимостью субагентов без повторной загрузки длинных отчётов в контекст мастера. - Что: - разделены TOML-роли и разовые переопределения модели, уточнены fork и service tier. - добавлен файловый обмен, жизненный цикл временного каталога и нативные скелеты промптов. - синхронизированы полевые заметки и handoff с проверенной механикой Codex. - Проверка: - quick_validate.py agents/.agents/skills/codex-subagent-playbook. - git diff --cached --check. - независимое ревью: VERDICT: APPROVED.
This commit is contained in:
1 parent
0d2fc9af65
commit
60182ab493
5 files changed
+249
-57
No files matched your search
@@ -15,13 +15,26 @@ description: Координация одной нетривиальной инж
|
|||||||
|
|
||||||
## Договор делегирования
|
## Договор делегирования
|
||||||
|
|
||||||
- Запускай свежих исполнителей без истории мастера (`fork_turns="none"`),
|
- Запускай свежих исполнителей без истории мастера (`fork_turns="none"`).
|
||||||
когда среда это поддерживает. Передавай путь к самодостаточному
|
Если схема `spawn_agent` открывает `agent_type`, `model` и
|
||||||
файлу-задаче, а не пересказ разговора.
|
`reasoning_effort`, выбери один источник истины: для TOML-роли передай
|
||||||
|
только `agent_type`; для разового выбора передай `model` и
|
||||||
|
`reasoning_effort` без роли с закреплённой моделью. Полный fork `all`
|
||||||
|
несовместим с этими переопределениями; плейбук использует `none` ради
|
||||||
|
чистого контекста. Передавай путь к самодостаточному файлу-задаче, а не
|
||||||
|
пересказ разговора.
|
||||||
- Давай каждому субагенту одну роль и проверяемый результат. Выбирай самый
|
- Давай каждому субагенту одну роль и проверяемый результат. Выбирай самый
|
||||||
дешёвый уровень, который надёжно справится с этой ролью.
|
дешёвый уровень, который надёжно справится с этой ролью. Если хост скрыл
|
||||||
|
параметры модели, пометь стоимость как незакреплённую.
|
||||||
|
- В начале прогона создай один обменный каталог во временном каталоге ОС с
|
||||||
|
непредсказуемым именем (`mktemp -d` или аналог) и передай агентам его
|
||||||
|
абсолютный путь. Индекс держи у мастера; длинные отчёты, журналы и
|
||||||
|
повторно используемые промпты — файлами. Прочитай полезную нагрузку один
|
||||||
|
раз, дальше передавай путь: аргументы `spawn_agent`, `send_message` и
|
||||||
|
`followup_task` остаются в истории мастера.
|
||||||
- Проси вернуть только итог, доказательства, вопросы-решения и следующий
|
- Проси вернуть только итог, доказательства, вопросы-решения и следующий
|
||||||
шаг. Полные журналы оставляй в `/tmp` или в принятом проектом каталоге.
|
шаг. Полные журналы оставляй в обменном каталоге. В репозиторий клади
|
||||||
|
только долговечные артефакты, предусмотренные его правилами.
|
||||||
- Продолжай того же исполнителя для починки его кода. Для независимого
|
- Продолжай того же исполнителя для починки его кода. Для независимого
|
||||||
ревью запускай свежий тред.
|
ревью запускай свежий тред.
|
||||||
- Держи одного владельца рабочего дерева. Пока он пишет, другие агенты не
|
- Держи одного владельца рабочего дерева. Пока он пишет, другие агенты не
|
||||||
@@ -40,33 +53,20 @@ description: Координация одной нетривиальной инж
|
|||||||
При развитии скилла или первом прогоне в новой среде прочитай
|
При развитии скилла или первом прогоне в новой среде прочитай
|
||||||
[полевые заметки](references/field-notes.md) и проверь открытые предположения.
|
[полевые заметки](references/field-notes.md) и проверь открытые предположения.
|
||||||
|
|
||||||
|
Точные договоры заданий и результатов бери из нужного раздела
|
||||||
|
[скелетов нативных промптов](references/prompt-templates.md). Это их
|
||||||
|
единственный источник; не переписывай форматы в других файлах.
|
||||||
|
|
||||||
## Формат возврата
|
## Формат возврата
|
||||||
|
|
||||||
Каждому субагенту задай этот договор результата:
|
Если результат понадобится следующему агенту, полный отчёт сначала запиши в
|
||||||
|
отдельный файл обменного каталога. Финальный ответ ограничь состоянием,
|
||||||
```text
|
счётчиками, коротким индексом и путём. Для параллельных агентов используй
|
||||||
ИТОГ: завершено | есть вопросы | заблокировано
|
разные пути. Не возвращай один полный отчёт одновременно файлом и сообщением.
|
||||||
ДОКАЗАТЕЛЬСТВА: изменённые файлы, команды и итоговые счётчики
|
До запуска выбери канал: агент с записью в обменный каталог сохраняет полный
|
||||||
РЕШЕНИЯ: только вопросы, которые должен решить мастер или пользователь
|
отчёт файлом; `read-only`-агент возвращает короткий индекс один раз
|
||||||
НАХОДКИ: SEVERITY файл:строка — суть — как проверить
|
сообщением. Для длинного переиспользуемого отчёта заранее выбери
|
||||||
СЛЕДУЮЩИЙ ШАГ: одно конкретное действие или «нет»
|
`workspace-write`, запрети правки исходников и сверь Git до и после.
|
||||||
```
|
|
||||||
|
|
||||||
Пустые разделы пропускаются. Сырой вывод и ход рассуждений в ответ не
|
|
||||||
включаются.
|
|
||||||
|
|
||||||
Для ревьюера замени общий раздел `ИТОГ` на обязательный договор:
|
|
||||||
|
|
||||||
```text
|
|
||||||
ВЕРДИКТ: APPROVED | REVISE
|
|
||||||
ПОКРЫТИЕ: проверенные области, файлы и команды
|
|
||||||
ДОКАЗАТЕЛЬСТВА: результаты проверок или воспроизведения
|
|
||||||
НАХОДКИ: SEVERITY файл:строка — сценарий сбоя — как проверить
|
|
||||||
```
|
|
||||||
|
|
||||||
Пустой индекс принимай только с заполненными покрытием и доказательствами.
|
|
||||||
Для дорогого ревью попроси также сохранить индекс в `/tmp` и вернуть путь:
|
|
||||||
сообщение может потеряться после завершения треда.
|
|
||||||
|
|
||||||
## Конвейер
|
## Конвейер
|
||||||
|
|
||||||
@@ -114,21 +114,28 @@ description: Координация одной нетривиальной инж
|
|||||||
|
|
||||||
### 5. Провести слепое ревью
|
### 5. Провести слепое ревью
|
||||||
|
|
||||||
Запусти свежего ревьюера без контекста исполнителя. Для высокого риска
|
Создай один канонический файл ревью на всех слепых ревьюеров. Запусти свежего
|
||||||
запусти двух ревьюеров параллельно с разными фокусами. Внешнюю модель
|
ревьюера без контекста исполнителя; в `message` передай путь к этому файлу и
|
||||||
подключай дополнительной линией, если она доступна и её стоимость оправдана.
|
выбранный канал результата. Для `workspace-write` добавь уникальный путь
|
||||||
Ревьюеры исследуют и проверяют гипотезы, но возвращают только индекс находок
|
файла, для `read-only` запроси один короткий индекс сообщением. Для высокого
|
||||||
и не исправляют код.
|
риска запусти двух ревьюеров параллельно с разными фокусами и каналами,
|
||||||
|
которые не конфликтуют.
|
||||||
|
Внешнюю модель подключай дополнительной линией, если она доступна и её
|
||||||
|
стоимость оправдана. Ревьюеры исследуют и проверяют гипотезы, но не
|
||||||
|
исправляют код. Канал результата выбери по правилам раздела «Формат
|
||||||
|
возврата»; точный договор — в скелете слепого ревью.
|
||||||
|
|
||||||
Этап завершён, когда все запрошенные вердикты получены, а рабочее дерево не
|
Этап завершён, когда все запрошенные вердикты получены, а рабочее дерево не
|
||||||
содержит неназванных правок.
|
содержит неназванных правок.
|
||||||
|
|
||||||
### 6. Закрыть находки
|
### 6. Закрыть находки
|
||||||
|
|
||||||
Дословно передай общий индекс исполнителю этапа 3. Он исправляет находку,
|
Продолжи исполнителя этапа 3 и передай пути к исходным индексам без
|
||||||
сужает исправление или отклоняет её через контракт, код и проверку. Мастер
|
пересказа. Он исправляет находку, сужает исправление или отклоняет её через
|
||||||
проверяет серьёзные и спорные отклонения, решает вопросы объёма и риска.
|
контракт, код и проверку. Мастер проверяет серьёзные и спорные отклонения,
|
||||||
Исправления отправляй прежнему ревьюеру на узкую повторную проверку.
|
решает вопросы объёма и риска. Исполнитель сохраняет отчёт о решениях
|
||||||
|
файлом; прежнему ревьюеру передай только путь к нему и запрос на узкую
|
||||||
|
проверку собственных находок.
|
||||||
|
|
||||||
Этап завершён, когда по каждой находке записано решение и принятые
|
Этап завершён, когда по каждой находке записано решение и принятые
|
||||||
исправления перепроверены.
|
исправления перепроверены.
|
||||||
@@ -138,16 +145,22 @@ description: Координация одной нетривиальной инж
|
|||||||
Используй отчёт этапа 4. Повтори только проверки, которые обесценили более
|
Используй отчёт этапа 4. Повтори только проверки, которые обесценили более
|
||||||
поздние правки. Сам проверь ключевые артефакты и решения, которые нельзя
|
поздние правки. Сам проверь ключевые артефакты и решения, которые нельзя
|
||||||
делегировать. Обнови файл-задачу. Коммит делай только по просьбе
|
делегировать. Обнови файл-задачу. Коммит делай только по просьбе
|
||||||
пользователя.
|
пользователя. После завершения всех агентов перенеси нужные долговечные
|
||||||
|
артефакты по правилам проекта и удали только обменный каталог этого прогона.
|
||||||
|
|
||||||
Этап завершён, когда критерии приёмки закрыты, финальные счётчики известны,
|
Этап завершён, когда критерии приёмки закрыты, финальные счётчики известны,
|
||||||
неназванных изменений нет, а пользователь получил краткий итог.
|
неназванных изменений нет, а пользователь получил краткий итог.
|
||||||
|
|
||||||
## Сбои координации
|
## Сбои координации
|
||||||
|
|
||||||
- Агент исчез без отчёта: сначала проверь сохранённый файл, затем один раз
|
- После запуска жди через `wait_agent` с реалистичным сроком только когда
|
||||||
запроси итог. После повторной тишины подними свежего агента с
|
результат блокирует следующий шаг. Тайм-аут, idle и сводка об обновлении
|
||||||
файлом-задачей и уже собранным индексом.
|
не являются результатом; не засоряй историю статусными пингами.
|
||||||
|
- Агент завершился без отчёта: сначала проверь сохранённый файл, затем один
|
||||||
|
раз запроси короткий итог через `followup_task`. После повторной тишины
|
||||||
|
подними свежего агента с файлами задачи и уже собранного индекса.
|
||||||
|
- При блокировке перенеси нужные для продолжения данные в долговечный
|
||||||
|
артефакт по правилам проекта и удали остальной обменный каталог прогона.
|
||||||
- Агент вернул длинный рассказ: не тащи его дальше. Попроси повторить ответ по
|
- Агент вернул длинный рассказ: не тащи его дальше. Попроси повторить ответ по
|
||||||
договору возврата.
|
договору возврата.
|
||||||
- Два писателя пересеклись: останови их, установи владельца каждой правки и
|
- Два писателя пересеклись: останови их, установи владельца каждой правки и
|
||||||
|
|||||||
+33
-6
@@ -11,12 +11,15 @@ Codex и проверит полный конвейер на боевой зад
|
|||||||
- выбор ролей и уровней — [`../references/roles.md`](../references/roles.md);
|
- выбор ролей и уровней — [`../references/roles.md`](../references/roles.md);
|
||||||
- перенесённые уроки и открытые проверки —
|
- перенесённые уроки и открытые проверки —
|
||||||
[`../references/field-notes.md`](../references/field-notes.md);
|
[`../references/field-notes.md`](../references/field-notes.md);
|
||||||
|
- точные договоры нативных агентов —
|
||||||
|
[`../references/prompt-templates.md`](../references/prompt-templates.md);
|
||||||
- явный вызов скилла — [`../agents/openai.yaml`](../agents/openai.yaml).
|
- явный вызов скилла — [`../agents/openai.yaml`](../agents/openai.yaml).
|
||||||
|
|
||||||
Нативные TOML-роли ещё не созданы. В текущем интерфейсе `spawn_agent` роль,
|
Нативные TOML-роли ещё не созданы. В интерфейсе пробной tool-backed сессии
|
||||||
модель и глубина рассуждений не выбираются явно, поэтому первый пробный
|
хост скрыл поля `agent_type`, `model`, `reasoning_effort` и `service_tier`,
|
||||||
прогон использовал роли только как мандаты в промпте и честно пометил
|
поэтому прогон использовал роли только как мандаты в промпте и честно
|
||||||
стоимость как неуправляемую.
|
пометил стоимость как неуправляемую. Это не общее ограничение Codex:
|
||||||
|
нативная схема поддерживает все четыре поля.
|
||||||
|
|
||||||
## Принятые решения
|
## Принятые решения
|
||||||
|
|
||||||
@@ -27,9 +30,20 @@ Codex и проверит полный конвейер на боевой зад
|
|||||||
`policy.allow_implicit_invocation: false` в `openai.yaml`.
|
`policy.allow_implicit_invocation: false` в `openai.yaml`.
|
||||||
- Модели закрепляются в файлах ролей, а не в `SKILL.md`, чтобы процесс не
|
- Модели закрепляются в файлах ролей, а не в `SKILL.md`, чтобы процесс не
|
||||||
зависел от смены модельной линейки.
|
зависел от смены модельной линейки.
|
||||||
|
- Для TOML-роли передаётся `agent_type`; для разового выбора — `model` и
|
||||||
|
`reasoning_effort` без роли с закреплённой моделью. Плейбук использует
|
||||||
|
`fork_turns="none"` ради чистого контекста; полный fork `all` наследует
|
||||||
|
модель мастера.
|
||||||
- Один агент владеет рабочим деревом. До записи сохраняется точка отсчёта,
|
- Один агент владеет рабочим деревом. До записи сохраняется точка отсчёта,
|
||||||
включая хэши неотслеживаемых файлов.
|
включая хэши неотслеживаемых файлов.
|
||||||
- Критичный отчёт ревьюера возвращается сообщением и сохраняется в `/tmp`.
|
- Полный отчёт ревьюера сохраняется файлом; сообщение содержит только
|
||||||
|
вердикт, счётчики и путь. `read-only`-ревьюер возвращает короткий индекс
|
||||||
|
один раз сообщением.
|
||||||
|
- На прогон создаётся один обменный временный каталог. Полные отчёты и
|
||||||
|
повторно используемые промпты передаются между агентами путями; мастер не
|
||||||
|
вставляет их повторно в tool-call.
|
||||||
|
- После завершения или сохранения блокирующего handoff обменный каталог
|
||||||
|
этого прогона удаляется.
|
||||||
- Нативный конвейер не зависит от вложенного запуска `codex exec`.
|
- Нативный конвейер не зависит от вложенного запуска `codex exec`.
|
||||||
|
|
||||||
## Что проверено
|
## Что проверено
|
||||||
@@ -58,9 +72,15 @@ Codex и проверит полный конвейер на боевой зад
|
|||||||
проверить смысловые договоры ролей, повторную установку, стороннюю роль и
|
проверить смысловые договоры ролей, повторную установку, стороннюю роль и
|
||||||
конфликт совпадающего имени.
|
конфликт совпадающего имени.
|
||||||
6. Проверить обнаружение ролей установленным Codex CLI в отдельном
|
6. Проверить обнаружение ролей установленным Codex CLI в отдельном
|
||||||
`CODEX_HOME`. Синтаксический разбор TOML не доказывает поддержку схемы.
|
`CODEX_HOME`. Затем начать новую сессию и проверить, что её схема
|
||||||
|
`spawn_agent` открывает `agent_type`, `model`, `reasoning_effort` и
|
||||||
|
`service_tier`.
|
||||||
|
Синтаксический разбор TOML не доказывает поддержку схемы.
|
||||||
7. Прогнать этапы 3–7 на подходящей задаче, обновить полевые заметки только
|
7. Прогнать этапы 3–7 на подходящей задаче, обновить полевые заметки только
|
||||||
подтверждёнными фактами и убрать поглощённый осадок.
|
подтверждёнными фактами и убрать поглощённый осадок.
|
||||||
|
8. Измерить, сколько длинных отчётов реально попало в контекст мастера.
|
||||||
|
Цель — каждый полный артефакт читается не более одного раза и больше не
|
||||||
|
пересказывается между агентами.
|
||||||
|
|
||||||
## Известные ловушки
|
## Известные ловушки
|
||||||
|
|
||||||
@@ -71,8 +91,15 @@ Codex и проверит полный конвейер на боевой зад
|
|||||||
от сохранённой точки отсчёта, не очищать и не включать их в коммиты.
|
от сохранённой точки отсчёта, не очищать и не включать их в коммиты.
|
||||||
- `task_name` нативного `spawn_agent` — имя треда, а не доказанный выбор
|
- `task_name` нативного `spawn_agent` — имя треда, а не доказанный выбор
|
||||||
пользовательской конфигурации агента.
|
пользовательской конфигурации агента.
|
||||||
|
- Полный fork `all` несовместим с другой ролью, моделью и глубиной. Плейбук
|
||||||
|
использует `none` для свежего контекста; ограниченный fork числом
|
||||||
|
технически допускает переопределения.
|
||||||
|
- Некоторые tool-backed хосты скрывают поля управления моделью, хотя Codex
|
||||||
|
их поддерживает. Проверять фактическую схему в начале сессии.
|
||||||
- Права `workspace-write` не гарантируют сеть. Проверку документации и поиск
|
- Права `workspace-write` не гарантируют сеть. Проверку документации и поиск
|
||||||
отмечать как непроверенные, если сеть недоступна.
|
отмечать как непроверенные, если сеть недоступна.
|
||||||
|
- Длинный текст в `spawn_agent`, `send_message` или `followup_task` остаётся
|
||||||
|
в истории мастера. Передавать путь к файлу и короткий вопрос.
|
||||||
|
|
||||||
## Suggested skills
|
## Suggested skills
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
## Проверить боем
|
## Проверить боем
|
||||||
|
|
||||||
1. Выбирает ли текущий хост пользовательского агента по имени и показывает ли
|
1. Выбирает ли текущий хост пользовательского агента по имени и показывает ли
|
||||||
фактически использованную модель.
|
фактически использованную модель после запуска новой сессии с TOML.
|
||||||
2. Даёт ли набор быстрых ролей экономию без повторной работы сильной модели.
|
2. Даёт ли набор быстрых ролей экономию без повторной работы сильной модели.
|
||||||
3. Остаётся ли дерево неизменным после ревьюера с `workspace-write`.
|
3. Остаётся ли дерево неизменным после ревьюера с `workspace-write`.
|
||||||
4. Доступны ли ревьюеру поиск и документация при текущих сетевых разрешениях.
|
4. Доступны ли ревьюеру поиск и документация при текущих сетевых разрешениях.
|
||||||
@@ -38,10 +38,36 @@
|
|||||||
- Мастер без истории исходного плейбука поднял исследователя и ревьюера,
|
- Мастер без истории исходного плейбука поднял исследователя и ревьюера,
|
||||||
свёл их вывод в самодостаточную постановку и не вынес сырые журналы в
|
свёл их вывод в самодостаточную постановку и не вынес сырые журналы в
|
||||||
итоговый контекст.
|
итоговый контекст.
|
||||||
- Доступный `spawn_agent` не позволил закрепить пользовательскую роль,
|
- Конкретный tool-backed хост скрыл из схемы `spawn_agent` поля `agent_type`,
|
||||||
модель или стоимость. Роли были только мандатами в промпте; мастер честно
|
`model`, `reasoning_effort` и `service_tier`. Это ограничение той сессии,
|
||||||
отметил неуправляемую стоимость.
|
а не Codex в целом: актуальная нативная схема поддерживает все четыре поля.
|
||||||
|
Роли в прогоне были только мандатами в промпте; мастер верно отметил
|
||||||
|
стоимость той сессии как неуправляемую.
|
||||||
- Исследователь обнаружил блокирующее правило `.gitignore` для будущих TOML,
|
- Исследователь обнаружил блокирующее правило `.gitignore` для будущих TOML,
|
||||||
которое мастер без шумного обхода репозитория мог пропустить.
|
которое мастер без шумного обхода репозитория мог пропустить.
|
||||||
- Исследователь без необходимости запустил полный набор тестов. Ограничение
|
- Исследователь без необходимости запустил полный набор тестов. Ограничение
|
||||||
«карта команд, а не полный прогон» поглощено в `SKILL.md` и `roles.md`.
|
«карта команд, а не полный прогон» поглощено в `SKILL.md` и `roles.md`.
|
||||||
|
|
||||||
|
## 2026-07-10 — проверка документации и исходного кода Codex
|
||||||
|
|
||||||
|
- Нативный `spawn_agent` принимает `agent_type`, `model`,
|
||||||
|
`reasoning_effort` и `service_tier`.
|
||||||
|
- Полный fork `all` наследует модель мастера и отклоняет роль, модель и
|
||||||
|
глубину. Плейбук выбирает `none` ради чистого контекста; ограниченный fork
|
||||||
|
числом технически совместим с переопределениями.
|
||||||
|
- Хост может намеренно скрыть эти поля из видимой схемы. В такой сессии
|
||||||
|
мастер не может гарантировать стоимость через нативный вызов.
|
||||||
|
- TOML-роли остаются правильным способом закрепить модель и глубину. После
|
||||||
|
их установки нужна новая сессия и проверка фактической схемы инструмента.
|
||||||
|
- `service_tier` не блокируется полным fork, но задаётся только по явному
|
||||||
|
запросу.
|
||||||
|
|
||||||
|
## 2026-07-10 — ретро утечки контекста прародителя
|
||||||
|
|
||||||
|
- Главная утечка была не в работе агентов, а в повторной передаче одного
|
||||||
|
текста через мастера: отчёт, новый промпт, повторная проверка и tool-call.
|
||||||
|
- Нативный Codex не наследует буквально поведение Claude `SendMessage`, но
|
||||||
|
длинные аргументы `spawn_agent`, `send_message` и `followup_task` всё равно
|
||||||
|
остаются в истории мастера.
|
||||||
|
- Лечение поглощено в `SKILL.md` и `prompt-templates.md`: файловый канал,
|
||||||
|
один канонический промпт и ожидание только на критическом пути.
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
# Скелеты нативных промптов
|
||||||
|
|
||||||
|
Читай только тот раздел, который нужен на текущем этапе. Полный текст
|
||||||
|
задания и отчёта живёт в обменном временном каталоге; вызов агента содержит
|
||||||
|
короткую обёртку с абсолютными путями.
|
||||||
|
|
||||||
|
## Общий договор результата
|
||||||
|
|
||||||
|
Полный отчёт, независимо от канала:
|
||||||
|
|
||||||
|
```text
|
||||||
|
ИТОГ: завершено | есть вопросы | заблокировано
|
||||||
|
ДОКАЗАТЕЛЬСТВА: изменённые файлы, команды и итоговые счётчики
|
||||||
|
РЕШЕНИЯ: только вопросы, которые должен решить мастер или пользователь
|
||||||
|
НАХОДКИ: SEVERITY файл:строка — суть — как проверить
|
||||||
|
СЛЕДУЮЩИЙ ШАГ: одно конкретное действие или «нет»
|
||||||
|
```
|
||||||
|
|
||||||
|
Пустые разделы пропускаются. Сырой вывод и ход рассуждений не включаются.
|
||||||
|
При файловом канале этот договор заполняется в файле, а финальное сообщение
|
||||||
|
содержит только `ИТОГ`, счётчики и `АРТЕФАКТ: абсолютный путь`. При
|
||||||
|
`read-only` договор возвращается один раз сообщением без поля `АРТЕФАКТ`.
|
||||||
|
|
||||||
|
## Исполнитель
|
||||||
|
|
||||||
|
Файл задачи должен содержать:
|
||||||
|
|
||||||
|
```text
|
||||||
|
ЦЕЛЬ: одна проверяемая цель
|
||||||
|
КРИТЕРИИ: исчерпывающий список
|
||||||
|
ГРАНИЦЫ: разрешённые и запрещённые изменения
|
||||||
|
СНАЧАЛА ПРОЧИТАТЬ: пути к контрактам и образцам
|
||||||
|
ПРОВЕРКИ: узкие команды разработки
|
||||||
|
ОТЧЁТ: отдельный путь в обменном каталоге
|
||||||
|
```
|
||||||
|
|
||||||
|
Короткий вызов: прочитать файл задачи и выполнить буквально. Агент с записью
|
||||||
|
в обменный каталог сохраняет полный отчёт по заданному пути и финальным
|
||||||
|
сообщением возвращает состояние, счётчики и путь. `read-only`-агент
|
||||||
|
возвращает короткий результат один раз сообщением. Коммит не делать.
|
||||||
|
|
||||||
|
## Слепое ревью
|
||||||
|
|
||||||
|
Один канонический файл на всех ревьюеров:
|
||||||
|
|
||||||
|
```text
|
||||||
|
АРТЕФАКТ: задача и изменённый объём
|
||||||
|
ФОКУС: корректность, контракт, краевые случаи, честность тестов
|
||||||
|
МАНДАТ: исследовать и проверять гипотезы, исходники не исправлять
|
||||||
|
ФОРМАТ: severity, файл:строка, сценарий сбоя, доказательство, проверка
|
||||||
|
ВЕРДИКТ: APPROVED | REVISE
|
||||||
|
```
|
||||||
|
|
||||||
|
Вызов каждого ревьюера добавляет только его фокус и канал результата:
|
||||||
|
|
||||||
|
- `workspace-write`: уникальный путь файла; финальное сообщение — вердикт,
|
||||||
|
счётчики по severity и путь; исходники не менять, Git сверить до и после;
|
||||||
|
- `read-only`: короткий индекс один раз финальным сообщением, без требования
|
||||||
|
записать файл.
|
||||||
|
|
||||||
|
## Закрытие находок
|
||||||
|
|
||||||
|
Исполнителю передаются пути к исходным индексам ревью и такой короткий
|
||||||
|
мандат:
|
||||||
|
|
||||||
|
```text
|
||||||
|
По каждой находке: исправить, сузить или отклонить через контракт и проверку.
|
||||||
|
Не менять соседний объём. Полный отчёт решений записать по указанному пути.
|
||||||
|
Финальным сообщением вернуть счётчики, проверки и путь.
|
||||||
|
```
|
||||||
|
|
||||||
|
Не переписывай находки в сообщение или новый файл: исходные индексы уже
|
||||||
|
являются неизменяемым входом.
|
||||||
|
|
||||||
|
## Узкая перепроверка
|
||||||
|
|
||||||
|
Прежнему ревьюеру передаются путь к его исходному индексу и путь к отчёту
|
||||||
|
решений исполнителя:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Проверь только прежние находки и новые правки рядом с ними.
|
||||||
|
По каждой: CLOSED | NOT_CLOSED | REJECTION_VALID | REJECTION_INVALID.
|
||||||
|
Полный повторный обход не выполнять.
|
||||||
|
```
|
||||||
|
|
||||||
|
Финальное сообщение: `ALL_CLOSED` или `ISSUES_REMAIN`, счётчики и путь к
|
||||||
|
файлу перепроверки.
|
||||||
@@ -15,9 +15,13 @@
|
|||||||
и его конфигурацию.
|
и его конфигурацию.
|
||||||
|
|
||||||
- **Управляемая стоимость.** Хост видит агентов из `~/.codex/agents` или
|
- **Управляемая стоимость.** Хост видит агентов из `~/.codex/agents` или
|
||||||
`.codex/agents` и позволяет выбрать агента по имени. Вызывай именованную
|
`.codex/agents` и схема `spawn_agent` открывает `agent_type`, `model` и
|
||||||
роль; модель и глубину рассуждений закрепляй в её TOML-файле. Не наследуй
|
`reasoning_effort`. Для TOML-роли передавай `agent_type`, а модель и
|
||||||
плавающие настройки мастер-сессии для роли с известным бюджетом.
|
глубину бери из её файла. Для разового выбора передавай `model` и
|
||||||
|
`reasoning_effort` без пользовательской роли с закреплённой моделью.
|
||||||
|
Плейбук использует `fork_turns="none"` ради чистого контекста. Технически
|
||||||
|
ограниченный fork числом тоже допускает переопределения; только полный
|
||||||
|
fork `all` наследует модель мастера и отклоняет их.
|
||||||
- **Неуправляемая стоимость.** Интерфейс запуска принимает только задачу и
|
- **Неуправляемая стоимость.** Интерфейс запуска принимает только задачу и
|
||||||
имя треда. Передавай роль мандатом в промпте, но не утверждай, что выбрана
|
имя треда. Передавай роль мандатом в промпте, но не утверждай, что выбрана
|
||||||
дешёвая или сильная модель. `task_name` — идентификатор треда, а не выбор
|
дешёвая или сильная модель. `task_name` — идентификатор треда, а не выбор
|
||||||
@@ -26,6 +30,38 @@
|
|||||||
Если способ выбора роли не виден в доступном инструменте, считай стоимость
|
Если способ выбора роли не виден в доступном инструменте, считай стоимость
|
||||||
неуправляемой и отметь это в итоговом отчёте.
|
неуправляемой и отметь это в итоговом отчёте.
|
||||||
|
|
||||||
|
Вызов TOML-роли:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"task_name": "explore_code",
|
||||||
|
"message": "Исследуй код и верни выжимку по договору роли.",
|
||||||
|
"fork_turns": "none",
|
||||||
|
"agent_type": "explorer"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Разовый выбор модели без TOML-роли с закреплёнными настройками:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"task_name": "explore_code",
|
||||||
|
"message": "Исследуй код и верни выжимку по договору результата.",
|
||||||
|
"fork_turns": "none",
|
||||||
|
"model": "<быстрая модель>",
|
||||||
|
"reasoning_effort": "medium"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Не смешивай режимы: роль применяется отдельным слоем конфигурации и может
|
||||||
|
перекрыть прямые параметры. `service_tier` передавай только по явному запросу;
|
||||||
|
он технически совместим и с полным fork. Если TOML-роль закрепляет
|
||||||
|
`service_tier`, значение роли перекрывает аргумент вызова; для гарантированного
|
||||||
|
разового tier используй роль без закреплённого tier.
|
||||||
|
|
||||||
|
Основание: [официальная документация о субагентах](https://learn.chatgpt.com/docs/agent-configuration/subagents)
|
||||||
|
и [актуальная схема `spawn_agent`](https://github.com/openai/codex/blob/main/codex-rs/core/src/tools/handlers/multi_agents_spec.rs).
|
||||||
|
|
||||||
## Выбор уровня
|
## Выбор уровня
|
||||||
|
|
||||||
| Уровень | Для чего | Настройка |
|
| Уровень | Для чего | Настройка |
|
||||||
@@ -97,6 +133,8 @@
|
|||||||
`workspace-write`, запретить правки исходников мандатом и сверить Git до и
|
`workspace-write`, запретить правки исходников мандатом и сверить Git до и
|
||||||
после. Доступ к сети проверять отдельно: право записи не гарантирует поиск и
|
после. Доступ к сети проверять отдельно: право записи не гарантирует поиск и
|
||||||
доступ к документации. Непроверенную внешнюю механику отмечать как гипотезу.
|
доступ к документации. Непроверенную внешнюю механику отмечать как гипотезу.
|
||||||
|
Для длинного или повторно используемого индекса нужен доступ на запись в
|
||||||
|
обменный каталог; иначе вернуть короткий индекс один раз сообщением.
|
||||||
|
|
||||||
### `verifier`
|
### `verifier`
|
||||||
|
|
||||||
@@ -123,7 +161,8 @@ developer_instructions = """
|
|||||||
```
|
```
|
||||||
|
|
||||||
Не подменяй выбор роли совпадением `task_name` с её именем: это работает
|
Не подменяй выбор роли совпадением `task_name` с её именем: это работает
|
||||||
только при явной гарантии хоста.
|
только при явной гарантии хоста. После добавления или изменения TOML начни
|
||||||
|
новую сессию и проверь, что имя роли появилось в описании `agent_type`.
|
||||||
|
|
||||||
## Пределы параллельности
|
## Пределы параллельности
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user