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
@@ -25,7 +25,7 @@
|
||||
## Проверить боем
|
||||
|
||||
1. Выбирает ли текущий хост пользовательского агента по имени и показывает ли
|
||||
фактически использованную модель.
|
||||
фактически использованную модель после запуска новой сессии с TOML.
|
||||
2. Даёт ли набор быстрых ролей экономию без повторной работы сильной модели.
|
||||
3. Остаётся ли дерево неизменным после ревьюера с `workspace-write`.
|
||||
4. Доступны ли ревьюеру поиск и документация при текущих сетевых разрешениях.
|
||||
@@ -38,10 +38,36 @@
|
||||
- Мастер без истории исходного плейбука поднял исследователя и ревьюера,
|
||||
свёл их вывод в самодостаточную постановку и не вынес сырые журналы в
|
||||
итоговый контекст.
|
||||
- Доступный `spawn_agent` не позволил закрепить пользовательскую роль,
|
||||
модель или стоимость. Роли были только мандатами в промпте; мастер честно
|
||||
отметил неуправляемую стоимость.
|
||||
- Конкретный tool-backed хост скрыл из схемы `spawn_agent` поля `agent_type`,
|
||||
`model`, `reasoning_effort` и `service_tier`. Это ограничение той сессии,
|
||||
а не Codex в целом: актуальная нативная схема поддерживает все четыре поля.
|
||||
Роли в прогоне были только мандатами в промпте; мастер верно отметил
|
||||
стоимость той сессии как неуправляемую.
|
||||
- Исследователь обнаружил блокирующее правило `.gitignore` для будущих TOML,
|
||||
которое мастер без шумного обхода репозитория мог пропустить.
|
||||
- Исследователь без необходимости запустил полный набор тестов. Ограничение
|
||||
«карта команд, а не полный прогон» поглощено в `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` и позволяет выбрать агента по имени. Вызывай именованную
|
||||
роль; модель и глубину рассуждений закрепляй в её TOML-файле. Не наследуй
|
||||
плавающие настройки мастер-сессии для роли с известным бюджетом.
|
||||
`.codex/agents` и схема `spawn_agent` открывает `agent_type`, `model` и
|
||||
`reasoning_effort`. Для TOML-роли передавай `agent_type`, а модель и
|
||||
глубину бери из её файла. Для разового выбора передавай `model` и
|
||||
`reasoning_effort` без пользовательской роли с закреплённой моделью.
|
||||
Плейбук использует `fork_turns="none"` ради чистого контекста. Технически
|
||||
ограниченный fork числом тоже допускает переопределения; только полный
|
||||
fork `all` наследует модель мастера и отклоняет их.
|
||||
- **Неуправляемая стоимость.** Интерфейс запуска принимает только задачу и
|
||||
имя треда. Передавай роль мандатом в промпте, но не утверждай, что выбрана
|
||||
дешёвая или сильная модель. `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 до и
|
||||
после. Доступ к сети проверять отдельно: право записи не гарантирует поиск и
|
||||
доступ к документации. Непроверенную внешнюю механику отмечать как гипотезу.
|
||||
Для длинного или повторно используемого индекса нужен доступ на запись в
|
||||
обменный каталог; иначе вернуть короткий индекс один раз сообщением.
|
||||
|
||||
### `verifier`
|
||||
|
||||
@@ -123,7 +161,8 @@ developer_instructions = """
|
||||
```
|
||||
|
||||
Не подменяй выбор роли совпадением `task_name` с её именем: это работает
|
||||
только при явной гарантии хоста.
|
||||
только при явной гарантии хоста. После добавления или изменения TOML начни
|
||||
новую сессию и проверь, что имя роли появилось в описании `agent_type`.
|
||||
|
||||
## Пределы параллельности
|
||||
|
||||
|
||||
Reference in new issue
Block a user