Цикл взаимодействия с агентом · теория
Hint Contract · 5 маркеров
Когда CLI или MCP-инструмент возвращает результат - что агенту делать дальше? Без явного маркера он перечитывает CLAUDE.md, гадает, иногда галлюцинирует и зацикливается. Каждое угадывание - это токены и риск ошибки. Hint Contract убирает двусмысленность: каждый ответ Forgeplan несёт детерминированный next-action в одной из пяти форм.
01 · Почему этот контракт вообще нужен
Без явного next-action агент платит «налог на угадывание»
Представьте дорогу без светофоров и знаков. Каждый перекрёсток - водитель угадывает: кто едет первым? Поворот разрешён? Нужно ли остановиться? Каждая догадка - это секунды задержки и риск столкновения. Светофоры убирают неопределённость: цвет - действие.
Forgeplan - это методологический движок. Каждая команда / MCP-вызов - один шаг длинного процесса (Shape → Validate → Code → Evidence → Activate). Когда после ответа агенту не сказано, что делать дальше, он:
- Перечитывает CLAUDE.md, чтобы переоткрыть методологию
- Угадывает следующий шаг, иногда галлюцинирует команду
- Зацикливается на одной и той же фазе
- Подставляет placeholder вроде
EVID-NNNв реальную команду - Видит три равноправных опции - paradox of choice
- Читает
Next:и выполняет команду как написано - На
Wait:ставит retry с условием - На
Done.переходит к следующей задаче, не зацикливается - На
Fix:запускает remediation немедленно - На
Or:использует fallback только если primary блокирует
Hint Contract - это обещание формата: любой output Forgeplan (CLI text / CLI JSON / MCP success / MCP error) гарантированно содержит либо next-action, либо явный terminal-сигнал. Никаких «silent gaps». Этого достаточно, чтобы Claude Code / Cursor / Windsurf и любой кастомный orchestrator читали output одинаково, без переоткрытия методологии каждый раз.
02 · Пять правил контракта
Каждый output Forgeplan - независимо от поверхности - удовлетворяет этим правилам
Каждое правило закрывает один конкретный класс ошибок, который возникал до v0.25.0 - когда инструмент возвращал результат, а агент не знал, что с ним делать.
Done., не фейк «all done!».
CLI text · последние строки stdout (Next:, Fix:, Wait:, Done.). ·
CLI JSON · top-level поле _next_action. ·
MCP · top-level _next_action в response. ·
Спец-случай: list --json и tree --json сохраняют bare-array
(backward compat для jq) - hint уходит в stderr.
03 · Пять маркеров · язык next-action
Каждый маркер - однозначное действие для агента
Маркеры не пересекаются по смыслу. Если в одном ответе есть Next: и
Or: - это primary action и fallback. Если есть Error: и
Fix: - это ошибка и команда восстановления. Done. никогда не
идёт вместе с другими маркерами - это терминальный сигнал.
Error:. Запустить немедленно.Good vs Bad hints
Контракт enforced двумя механизмами: integration test
crates/forgeplan-cli/tests/hint_contract.rs - десятки тестов, фейлится CI,
если команда не несёт маркер. Audit script scripts/audit-hints.sh -
coverage 100% всех команд. Это не «договорённость», это проверка на pre-commit.
Три паттерна порядка работы · как контракт работает в реальности
Типовой штатный путь. Каждый шаг возвращает Next: с конкретной командой следующего шага. Агент идёт по цепочке без переоткрытия методологии.
Команда вернула ошибку - но не «вот текст ошибки, разбирайся», а Error: + Fix: с готовой командой восстановления.
Несколько агентов работают параллельно. Если claim занят другим - Or: предлагает альтернативу, не блокирует worker.
Краткий справочник
Распечатать и держать рядом. Если в output Forgeplan нет маркера и состояние не terminal - это баг, а не «нужно подумать».
_next_action (JSON / MCP) · Special: list/tree --json → hint on stderr