Goal Pipeline
Лёгкая обвязка вокруг нативной команды /goal Claude Code. /goal <условие>
переводит сессию в автономный режим: после каждого хода отдельная быстрая модель
(small fast model, по умолчанию Haiku) проверяет твоё условие и продолжает работу,
пока условие не выполнится.
Ключевое ограничение, из которого следует всё остальное: оценщик не
запускает команды и не читает файлы — он судит только по тому, что исполнитель
уже вывел в разговор. Поэтому условие должно проверяться по транскрипту, а
доказательства обязаны быть в нём напечатаны. Автономность даёт хост, а не
этот навык. Задача навыка —
хорошо подготовить прогон (recon → фазы → измеримые критерии → вшитые гейты),
выдать одну строку /goal для вставки и описать протокол, по которому
исполняющая сессия читает фазы с диска и доводит задачу до конца.
Два актёра:
- Планировщик — текущая сессия. Делает этапы 0–7, пишет артефакты, выдаёт
строку
/goal. На этом его работа заканчивается.
- Исполнитель — свежая
/goal-сессия, которую запускает твоя вставка. У неё
нет контекста планировщика: всё, что ей нужно, лежит в файлах на диске.
Чем НЕ является (анти-коллизия)
| Похоже на |
Разница |
spec-writer |
Тот только пишет документ (spec/plan/brief), ничего не исполняет. goal-pipeline планирует И запускает исполнение под /goal. |
ralph-loop |
In-session петля внутри текущей сессии, без хостового evaluator. goal-pipeline отдаёт работу хостовому /goal — отдельная сессия, отдельный оценщик завершения. |
feature-dev |
Тяжёлый greenfield-флоу design→architecture→build с суб-агентами. goal-pipeline легче, brownfield-first, опирается на /goal. |
Когда брать / когда не брать
Брать: нетривиальная задача (≈ 3+ фазы, > часа работы) в существующем
проекте, которую хочешь довести до конца без ручного пинка на каждом шаге —
рефакторинг, миграция кода, новая фича поверх существующего, добавление тестов,
сквозная правка по многим файлам.
Не брать:
- Задача < 1 часа / 1–2 файла → просто сделай её, не разворачивай машинерию.
- Нужен только проектный документ →
spec-writer.
- Нужно просто покрутить одну петлю в текущей сессии →
ralph-loop.
- Крупный greenfield с нуля →
feature-dev.
Предусловия
/goal доступен. Проверка: команда принимается из ввода и появляется
индикатор ◎ /goal active. Команда работает только в доверенном workspace
(принят trust dialog) и выключается вместе с хуками — disableAllHooks или
allowManagedHooksOnly в managed-настройках её отключают, потому что оценщик
живёт в системе хуков. Нет /goal (другая сборка или другой ИИ-ассистент) —
скажи прямо и предложи ralph-loop: та же дисциплина фаз, но петля внутри
текущей сессии. Не изображай прогон, которого среда не поддерживает.
- Auto mode для непрерывного прогона.
/goal снимает подтверждение
хода, но не трогает permissions: в дефолтном режиме исполнитель будет
спрашивать разрешение на каждый неразрешённый инструмент, и «автономный»
прогон встанет на первом же pytest. Для full-auto включи auto mode или
заранее разреши нужные команды в permissions.allow; иначе выбирай
checkpoint-профиль и будь рядом.
- Git-репозиторий — страховка. Прогон правит исходники автономно; без git
откат болезненный. Если репо нет — предложи
git init и первый коммит до старта.
- Понятные команды проекта (build/type/lint/test) —
make-цели или
прямые команды (ruff check ., pyright, pytest -q, python manage.py check).
Профили автономности
Выбирается в этапе 0 (дефолт — checkpoint-on-risky). Профиль пишется в
STATE.md и зашивается в условие /goal.
| Профиль |
Поведение |
Когда |
| checkpoint-on-risky (дефолт) |
Автономно гонит обычные фазы; перед рискованной фазой печатает GP_HALT и возвращает управление — ты смотришь и ре-диспатчишь /goal. |
Дефолт для brownfield. Рутина идёт сама, необратимое — под подтверждением. |
| full-auto |
После ревью плана руки прочь до GP_RUN_COMPLETE; останавливается на 3-strike блоке или когда исчерпан Fix budget. |
Низкорисковая задача (чистый рефакторинг под git, добавление тестов). |
| per-phase |
GP_HALT после каждой фазы. |
Незнакомый/хрупкий код, где хочешь видеть каждый шаг. Почти ручной режим. |
Что считается «рискованной» фазой (для checkpoint-on-risky) — фаза, чьи
deliverables или mandatory-команды включают хоть одно:
- миграции БД (
**/migrations/**, Alembic versions/, makemigrations, migrate, alembic upgrade);
git push, любые деплой-команды (vps-deploy, systemctl, rsync, scp на сервер);
- destructive операции с ФС/БД (массовое
Remove-Item/rm, DROP, TRUNCATE, flush, удаление/переименование каталогов);
- смена публичного контракта (сигнатуры API-эндпоинтов, формат ответа, схема внешнего интерфейса, breaking-change в библиотечном API).
Всё остальное (правки логики, рефакторинг внутри модуля, тесты, шаблоны, стили) —
не рискованное, идёт автономно. Локальная dev-машина + git = откат дёшев.
Этап 0 — Контекст
Профиль автономности — спроси одним AskUserQuestion, если не задан явно
(дефолт checkpoint-on-risky). Запиши в STATE.md.
Там же зафиксируй два ограничителя длины — без них full-auto не имеет
верхней границы, кроме 3-strike, а петля «ретрай → fix → ретрай» жжёт токены:
Fix budget (дефолт 6) — сколько ремонтных раундов вправе потратить прогон
(ретрай фазы, fix-спека, аудит-fix). Считает сам исполнитель; исчерпан → GP_HALT.
Turn cap (дефолт ≈ 8 ходов на фазу, минимум 20) — жёсткий потолок,
он уходит прямо в условие /goal клаузой «ИЛИ пройдено N ходов». Его судит
оценщик по разговору, а не исполнитель по своему счётчику, поэтому он
переживает деградацию исполнителя.
Git baseline — git rev-parse HEAD. Запиши в STATE.md как
Baseline ref:; аудит диффает результат против него. Нет git → no-git,
предложи инициализировать.
Память — определи memory-каталог и подгрузи индекс. Путь бери из того, что
харнесс показывает в начале сессии (он зависит от проекта —
…\.claude\projects\<slug>\memory с MEMORY.md). Прочитай MEMORY.md, выборочно
подними релевантные задаче файлы (предпочтения по стеку, project-факты). Не
тащи всё. Применённые факты вынеси в ревью плана как «Из памяти: …».
Этап 1 — Интейк (0–2 вопроса)
Эхо задачи в одно предложение. Затем — только истинные пробелы, которые
recon + память + промт не закрывают (brownfield почти всегда отвечает на стек,
команды, конвенции сам):
- граница scope («только этот модуль, или смежные тоже?»);
- совместимость («ломаем старый путь или держим backward-compat?»);
- развилка при двух равноправных существующих паттернах.
Если вопросов нет — скажи «Уточняющих вопросов нет, иду от промта + recon +
памяти» и переходи к этапу 2. Микро-детали (имена, пути, формулировки) не
спрашивай — они идут в ревью плана как предположения для правки в один клик.
Этап 2 — Recon (штатными инструментами, без скриптов)
Recon делает планировщик сам через Glob/Grep/Read и короткие команды в
терминале твоей среды — не пиши для этого скриптов-файлов. Определи:
- Стек и менеджер пакетов —
pyproject.toml / requirements*.txt / Pipfile /
package.json; Django (manage.py) / FastAPI / aiogram / прочее.
- Команды build/type/lint/test — из
Makefile (цели), pyproject.toml
([tool.ruff], [tool.pytest], [tool.mypy]), CI-конфига. Зафиксируй точные
строки — они станут mandatory-командами фаз.
- Релевантная область — модули/файлы, которые задача затронет; существующие
конвенции, которые новый код обязан повторить.
- Тонкие места — есть ли тесты на затрагиваемый код (если нет → нужна
safety-net фаза), есть ли миграции, есть ли публичные контракты.
Выведи пользователю сводку в 5 строк: стек · менеджер · build/type/lint/test ·
затрагиваемая область · риск-зоны. Это доказывает, что ты понял проект до плана.
Этап 3 — Декомпозиция на фазы
Столько фаз, сколько реально нужно (нет фикс-лимита). Правила нарезки:
- Каждая фаза проверяема сама по себе (билдится, проходит свои тесты, её можно
показать как инкремент).
- Явные зависимости между фазами.
- Safety-net первой — если тесты на затрагиваемый код тонкие, первая фаза
добавляет характеризующие тесты до изменения поведения (brownfield-страховка).
- Polish & Harden последней — edge cases, error/empty/loading states, ввод,
безопасность, перф, копирайт. Здесь «всё идеально» становится измеримым.
Каждая фаза описывается полями:
- Имя (≤ 5 слов, действие-первым: «Add characterization tests»);
- Зачем (1 предложение);
- Deliverables (конкретные файлы/функции, которые появятся);
- Критерии приёмки (5–10 измеримых, yes/no — не «работает», а проверяемый предикат);
- Mandatory commands (что обязано пройти зелёным:
make-цели или прямые команды);
- Гейты (вшитые навыки/команды по таблице ниже);
- Evidence (что агент печатает в транскрипт как доказательство);
- Зависимости (какие фазы должны быть готовы);
- Risky? (да/нет — по определению из «Профили автономности»).
Вшитые гейты по типу фазы
Это главное отличие от голого /goal — пайплайн знает
про твой toolkit. Гейты ставятся точечно по типу фазы, не на каждую (чтобы
не жечь токены), и финальным sweep в Polish-фазе.
| Если фаза трогает… |
Вшить гейт в её VERIFY |
миграции БД (**/migrations/**, Alembic) |
migration-safety-auditor на дифф миграции → фаза risky (чекпоинт) |
| код (любой) |
/code-review на дифф фазы + типы (pyright / make type) |
| auth, ввод, внешний контракт, секреты |
/security-review на дифф фазы |
| тесты как deliverable |
test-coverage-auditor (assertions, моки, критический путь) |
| Polish & Harden (финал) |
финальный sweep: /code-review по всему диффу прогона; для «production-ready» — опц. python-project-audit (дорого, только по явному запросу) |
Гейты вызываются внутри /goal-сессии через Skill-инструмент (они доступны
исполнителю). Лёгкие проверки (build/type/lint/test) — каждую фазу; тяжёлые навыки —
по таблице, точечно.
/code-review, /security-review и pyright — то, что есть не в каждой сборке. На
этапе recon проверь их наличие и вшивай в VERIFY только доступное; недостающее заменяй
навыком библиотеки (change-review, django-audit) или командой проекта (make type).
Этап 4 — Артефакты прогона на диск
Всё в .goalrun/ в корне проекта (исполнитель читает их с диска — у /goal нет
контекста планировщика). Напомни добавить .goalrun/ в .gitignore.
.goalrun/ROADMAP.md — план: профиль автономности, baseline ref, список
фаз с полями из этапа 3.
.goalrun/STATE.md — живой прогресс: Status, Current phase,
Baseline ref, Profile, Fix budget (остаток), Turn cap, лог событий.
Исполнитель обновляет после каждой фазы; по нему же он находит точку старта
после GP_HALT и ре-диспатча.
.goalrun/PROTOCOL.md — копия references/executor-protocol.md (цикл
исполнителя, 3-strike, финальный аудит, маркеры, memory writeback). Исполнитель
— свежая сессия; протокол обязан лежать на диске, а не в контексте планировщика.
.goalrun/phases/phase-N.md — по файлу-спеке на фазу. Любой длины (читается
с диска, не идёт в аргумент /goal). Начинается маркер-блоком:
GP_PHASE_START
Phase: <N> of <total> — <имя>
Risky: <yes|no>
Mandatory commands: <список команд проекта>
Gates: <список вшитых гейтов или "none">
Acceptance criteria: <count>
Evidence required: <список>
Depends on: <фазы или "none">
[... полное описание работы, критерии, требования к доказательствам ...]
Пример полной спеки фазы и готовой строки /goal — references/phase-spec-example.md.
Этап 5 — Ревью плана (жёсткий гейт)
Прогон идёт без надзора — это последний дешёвый момент поправить курс.
5a. Self-critique (один проход). Перед печатью сводки ответь на 3 вопроса и
покажи результат честно (находки ИЛИ «clean», не театр):
- Фальсифицируемость — каждый критерий приёмки yes/no? Помечай «работает»,
«готово», «корректно» без измеримого предиката и перепиши на месте в
phase-N.md.
- Атомарность — нет ли фазы, которая втайне две (имя с «и», deliverables без
общего verify-гейта)?
- Слабейшая зависимость — где частичный провал каскадит хуже всего?
5b. Сводка — компактно: число фаз · профиль автономности · список фаз
(имя — однострочный deliverable, risky-фазы помечены ⚠) · стек и команды ·
ключевые предположения (правь любое) · топ-3 риска и митигейшн · что из памяти
применено · находки self-critique · путь к артефактам.
5c. AskUserQuestion с одним вопросом «Старт?» и конкретными режимами правки
(не размытое «исправить план»): Старт · Поправить предположение ·
Тронуть фазу (критерии/scope/команды) · Переструктурировать фазы. При
правке — примени, обнови артефакты, пере-покажи сводку, спроси снова. Не диспатчь
/goal, пока не выбрано «Старт». Никогда не считай молчание подтверждением.
Этап 6 — Pre-flight
После «Старт» и до выдачи строки /goal прогони объединённый
(дедуплицированный) набор mandatory-команд один раз в терминале. Это
ловит уже-сломанный baseline (например pytest красный ещё до фазы 1).
- Всё зелёное → запиши
Pre-flight green в STATE.md, переходи к этапу 7.
- Что-то красное → покажи падающую команду (код выхода + последние ~5 строк),
верни меню этапа 5 с опцией «Игнорировать pre-flight, диспатчить» (вдруг
чинить красный baseline — и есть задача фазы 1). Любой другой выбор → обычная
правка плана.
Этап 7 — Выдать строку /goal (одна вставка)
Слэш-команды срабатывают только от ввода пользователя — планировщик не может
запустить /goal сам. Поэтому этап 7 — честная передача в одну вставку.
- Обнови
STATE.md: Status: READY_TO_DISPATCH, Current phase: 1, baseline ref,
Fix budget, Turn cap.
- Проверь, что все
.goalrun/phases/phase-N.md существуют и содержат маркер
GP_PHASE_START.
- Напечатай fenced-блок с готовой строкой
/goal, подставив Turn cap
вместо <TURN_CAP>. Условие держит только точку входа (PROTOCOL.md +
Current phase) и done-предикат — процедура лежит в протоколе на диске,
поэтому строка не дублирует его и не расходится с ним при обновлении.
Лимит аргумента — 4000 символов; строка ниже укладывается с большим запасом:
```
/goal "Первым действием прочитай .goalrun/PROTOCOL.md и исполняй строго по нему, начиная с Current phase из .goalrun/STATE.md; фазы со статусом done не переисполняй. Done when: напечатан GP_RUN_COMPLETE, перед ним GP_AUDIT и по одному GP_PHASE_DONE на каждую фазу из .goalrun/ROADMAP.md, а после GP_AUDIT в транскрипте виден фактический вывод переrun'а mandatory-команд с кодом выхода 0 у каждой; ИЛИ напечатан GP_HALT, содержащий номер фазы, проваленный критерий (или причину чекпоинта) и предложение следующего шага; ИЛИ число ходов достигло <TURN_CAP>."
```
- Под блоком — ровно одна строка инструкции:
Вставь строку /goal выше в ввод, чтобы запустить прогон. Дальше идёт
автономно (авто-ретрай, fix-спеки, аудит); на рискованных фазах остановится на
GP_HALT — посмотри и вставь ту же строку снова, чтобы продолжить.
- Стоп. Больше ничего не выводи. Прогон начинается с вставки пользователя.
Протокол исполнителя, маркеры, память
Полный цикл исполнителя (чекпоинты, 3-strike восстановление, финальный аудит),
таблица маркеров транскрипта (GP_PHASE_START … GP_RUN_COMPLETE) и правила
memory writeback — в references/executor-protocol.md.
Планировщик копирует его в .goalrun/PROTOCOL.md на этапе 4 — исполнитель читает
протокол с диска, а не из контекста.
Связанные навыки
spec-writer — если перед прогоном нужен проектный документ (spec/plan), напиши
его, затем скорми goal-pipeline как вход. spec-writer не исполняет.
ralph-loop — альтернатива, когда хочешь in-session петлю без отдельной
/goal-сессии и хостового оценщика.
feature-dev — для крупного greenfield с архитектурным дизайном.
harness-engineering — вшитые здесь гейты (migration-safety-auditor,
/code-review, test-coverage-auditor, pyright) — те же, что harness-engineering
кладёт в Definition of Done проекта. goal-pipeline исполняет DoD внутри прогона.
migration-safety-auditor / change-review / python-project-audit /
test-coverage-auditor — вызываются как гейты по типу фазы (таблица в этапе 3).
1---2name: goal-pipeline3description: Планировщик-исполнитель поверх нативной /goal Claude Code: recon проекта, декомпозиция на фазы с измеримыми критериями, вшитые гейты качества по типу фазы, артефакты на диск и ОДНА готовая строка /goal — свежая сессия исполняет фазы с авто-ретраем, чекпоинтами на рискованных фазах и финальным аудитом. Заточен под brownfield. Используй когда пользователь говорит «прогон под goal», «разбей на фазы и запусти», «доведи до готового через goal», «автономно доделай». Для документа без исполнения — spec-writer; для in-session петли — ralph-loop; для greenfield — feature-dev.4---56# Goal Pipeline78Лёгкая обвязка вокруг **нативной команды `/goal`** Claude Code. `/goal <условие>`9переводит сессию в автономный режим: после каждого хода отдельная быстрая модель10(small fast model, по умолчанию Haiku) проверяет твоё условие и продолжает работу,11пока условие не выполнится.1213**Ключевое ограничение, из которого следует всё остальное:** оценщик **не14запускает команды и не читает файлы** — он судит только по тому, что исполнитель15уже вывел в разговор. Поэтому условие должно проверяться по транскрипту, а16доказательства обязаны быть в нём напечатаны. Автономность даёт **хост**, а не17этот навык. Задача навыка —18*хорошо подготовить* прогон (recon → фазы → измеримые критерии → вшитые гейты),19выдать **одну** строку `/goal` для вставки и описать протокол, по которому20исполняющая сессия читает фазы с диска и доводит задачу до конца.2122Два актёра:23- **Планировщик** — текущая сессия. Делает этапы 0–7, пишет артефакты, выдаёт24 строку `/goal`. На этом его работа заканчивается.25- **Исполнитель** — свежая `/goal`-сессия, которую запускает твоя вставка. У неё26 нет контекста планировщика: всё, что ей нужно, лежит в файлах на диске.2728## Чем НЕ является (анти-коллизия)2930| Похоже на | Разница |31|---|---|32| `spec-writer` | Тот только *пишет документ* (spec/plan/brief), ничего не исполняет. goal-pipeline планирует И запускает исполнение под `/goal`. |33| `ralph-loop` | In-session петля внутри текущей сессии, без хостового evaluator. goal-pipeline отдаёт работу хостовому `/goal` — отдельная сессия, отдельный оценщик завершения. |34| `feature-dev` | Тяжёлый greenfield-флоу design→architecture→build с суб-агентами. goal-pipeline легче, brownfield-first, опирается на `/goal`. |3536## Когда брать / когда не брать3738**Брать:** нетривиальная задача (≈ 3+ фазы, > часа работы) в существующем39проекте, которую хочешь довести до конца без ручного пинка на каждом шаге —40рефакторинг, миграция кода, новая фича поверх существующего, добавление тестов,41сквозная правка по многим файлам.4243**Не брать:**44- Задача < 1 часа / 1–2 файла → просто сделай её, не разворачивай машинерию.45- Нужен только проектный документ → `spec-writer`.46- Нужно просто покрутить одну петлю в текущей сессии → `ralph-loop`.47- Крупный greenfield с нуля → `feature-dev`.4849## Предусловия50511. **`/goal` доступен.** Проверка: команда принимается из ввода и появляется52 индикатор `◎ /goal active`. Команда работает только в доверенном workspace53 (принят trust dialog) и выключается вместе с хуками — `disableAllHooks` или54 `allowManagedHooksOnly` в managed-настройках её отключают, потому что оценщик55 живёт в системе хуков. Нет `/goal` (другая сборка или другой ИИ-ассистент) —56 скажи прямо и предложи `ralph-loop`: та же дисциплина фаз, но петля внутри57 текущей сессии. Не изображай прогон, которого среда не поддерживает.582. **Auto mode для непрерывного прогона.** `/goal` снимает подтверждение59 *хода*, но **не трогает permissions**: в дефолтном режиме исполнитель будет60 спрашивать разрешение на каждый неразрешённый инструмент, и «автономный»61 прогон встанет на первом же `pytest`. Для `full-auto` включи auto mode или62 заранее разреши нужные команды в `permissions.allow`; иначе выбирай63 checkpoint-профиль и будь рядом.643. **Git-репозиторий** — страховка. Прогон правит исходники автономно; без git65 откат болезненный. Если репо нет — предложи `git init` и первый коммит до старта.664. **Понятные команды** проекта (build/type/lint/test) — `make`-цели или67 прямые команды (`ruff check .`, `pyright`, `pytest -q`, `python manage.py check`).6869## Профили автономности7071Выбирается в этапе 0 (дефолт — **checkpoint-on-risky**). Профиль пишется в72`STATE.md` и зашивается в условие `/goal`.7374| Профиль | Поведение | Когда |75|---|---|---|76| **checkpoint-on-risky** (дефолт) | Автономно гонит обычные фазы; перед **рискованной** фазой печатает `GP_HALT` и возвращает управление — ты смотришь и ре-диспатчишь `/goal`. | Дефолт для brownfield. Рутина идёт сама, необратимое — под подтверждением. |77| **full-auto** | После ревью плана руки прочь до `GP_RUN_COMPLETE`; останавливается на 3-strike блоке или когда исчерпан `Fix budget`. | Низкорисковая задача (чистый рефакторинг под git, добавление тестов). |78| **per-phase** | `GP_HALT` после каждой фазы. | Незнакомый/хрупкий код, где хочешь видеть каждый шаг. Почти ручной режим. |7980**Что считается «рискованной» фазой** (для checkpoint-on-risky) — фаза, чьи81deliverables или mandatory-команды включают хоть одно:82- миграции БД (`**/migrations/**`, Alembic `versions/`, `makemigrations`, `migrate`, `alembic upgrade`);83- `git push`, любые деплой-команды (`vps-deploy`, `systemctl`, `rsync`, `scp` на сервер);84- destructive операции с ФС/БД (массовое `Remove-Item`/`rm`, `DROP`, `TRUNCATE`, `flush`, удаление/переименование каталогов);85- смена публичного контракта (сигнатуры API-эндпоинтов, формат ответа, схема внешнего интерфейса, breaking-change в библиотечном API).8687Всё остальное (правки логики, рефакторинг внутри модуля, тесты, шаблоны, стили) —88не рискованное, идёт автономно. Локальная dev-машина + git = откат дёшев.8990---9192## Этап 0 — Контекст93941. **Профиль автономности** — спроси одним `AskUserQuestion`, если не задан явно95 (дефолт checkpoint-on-risky). Запиши в `STATE.md`.9697 Там же зафиксируй **два ограничителя длины** — без них `full-auto` не имеет98 верхней границы, кроме 3-strike, а петля «ретрай → fix → ретрай» жжёт токены:99 - `Fix budget` (дефолт 6) — сколько ремонтных раундов вправе потратить прогон100 (ретрай фазы, fix-спека, аудит-fix). Считает сам исполнитель; исчерпан → `GP_HALT`.101 - `Turn cap` (дефолт ≈ 8 ходов на фазу, минимум 20) — **жёсткий** потолок,102 он уходит прямо в условие `/goal` клаузой «ИЛИ пройдено N ходов». Его судит103 оценщик по разговору, а не исполнитель по своему счётчику, поэтому он104 переживает деградацию исполнителя.1052. **Git baseline** — `git rev-parse HEAD`. Запиши в `STATE.md` как106 `Baseline ref:`; аудит диффает результат против него. Нет git → `no-git`,107 предложи инициализировать.1083. **Память** — определи memory-каталог и подгрузи индекс. Путь бери из того, что109 харнесс показывает в начале сессии (он зависит от проекта —110 `…\.claude\projects\<slug>\memory` с `MEMORY.md`). Прочитай `MEMORY.md`, выборочно111 подними релевантные задаче файлы (предпочтения по стеку, project-факты). Не112 тащи всё. Применённые факты вынеси в ревью плана как «Из памяти: …».113114---115116## Этап 1 — Интейк (0–2 вопроса)117118Эхо задачи в **одно предложение**. Затем — только **истинные пробелы**, которые119recon + память + промт не закрывают (brownfield почти всегда отвечает на стек,120команды, конвенции сам):121- граница scope («только этот модуль, или смежные тоже?»);122- совместимость («ломаем старый путь или держим backward-compat?»);123- развилка при двух равноправных существующих паттернах.124125Если вопросов нет — скажи «Уточняющих вопросов нет, иду от промта + recon +126памяти» и переходи к этапу 2. Микро-детали (имена, пути, формулировки) не127спрашивай — они идут в ревью плана как предположения для правки в один клик.128129---130131## Этап 2 — Recon (штатными инструментами, без скриптов)132133Recon делает **планировщик сам** через `Glob`/`Grep`/`Read` и короткие команды в134терминале твоей среды — не пиши для этого скриптов-файлов. Определи:135136- **Стек и менеджер пакетов** — `pyproject.toml` / `requirements*.txt` / `Pipfile` /137 `package.json`; Django (`manage.py`) / FastAPI / aiogram / прочее.138- **Команды build/type/lint/test** — из `Makefile` (цели), `pyproject.toml`139 (`[tool.ruff]`, `[tool.pytest]`, `[tool.mypy]`), CI-конфига. Зафиксируй точные140 строки — они станут mandatory-командами фаз.141- **Релевантная область** — модули/файлы, которые задача затронет; существующие142 конвенции, которые новый код обязан повторить.143- **Тонкие места** — есть ли тесты на затрагиваемый код (если нет → нужна144 safety-net фаза), есть ли миграции, есть ли публичные контракты.145146Выведи пользователю **сводку в 5 строк**: стек · менеджер · build/type/lint/test ·147затрагиваемая область · риск-зоны. Это доказывает, что ты понял проект до плана.148149---150151## Этап 3 — Декомпозиция на фазы152153Столько фаз, сколько реально нужно (нет фикс-лимита). Правила нарезки:154155- Каждая фаза **проверяема сама по себе** (билдится, проходит свои тесты, её можно156 показать как инкремент).157- Явные **зависимости** между фазами.158- **Safety-net первой** — если тесты на затрагиваемый код тонкие, первая фаза159 добавляет характеризующие тесты *до* изменения поведения (brownfield-страховка).160- **Polish & Harden последней** — edge cases, error/empty/loading states, ввод,161 безопасность, перф, копирайт. Здесь «всё идеально» становится измеримым.162163Каждая фаза описывается полями:164- **Имя** (≤ 5 слов, действие-первым: «Add characterization tests»);165- **Зачем** (1 предложение);166- **Deliverables** (конкретные файлы/функции, которые появятся);167- **Критерии приёмки** (5–10 измеримых, yes/no — не «работает», а проверяемый предикат);168- **Mandatory commands** (что обязано пройти зелёным: `make`-цели или прямые команды);169- **Гейты** (вшитые навыки/команды по таблице ниже);170- **Evidence** (что агент печатает в транскрипт как доказательство);171- **Зависимости** (какие фазы должны быть готовы);172- **Risky?** (да/нет — по определению из «Профили автономности»).173174### Вшитые гейты по типу фазы175176Это главное отличие от голого `/goal` — пайплайн знает177про **твой** toolkit. Гейты ставятся **точечно по типу фазы**, не на каждую (чтобы178не жечь токены), и финальным sweep в Polish-фазе.179180| Если фаза трогает… | Вшить гейт в её VERIFY |181|---|---|182| миграции БД (`**/migrations/**`, Alembic) | `migration-safety-auditor` на дифф миграции → **фаза risky** (чекпоинт) |183| код (любой) | `/code-review` на дифф фазы + типы (`pyright` / `make type`) |184| auth, ввод, внешний контракт, секреты | `/security-review` на дифф фазы |185| тесты как deliverable | `test-coverage-auditor` (assertions, моки, критический путь) |186| Polish & Harden (финал) | финальный sweep: `/code-review` по всему диффу прогона; для «production-ready» — опц. `python-project-audit` (дорого, только по явному запросу) |187188Гейты вызываются **внутри** `/goal`-сессии через Skill-инструмент (они доступны189исполнителю). Лёгкие проверки (build/type/lint/test) — каждую фазу; тяжёлые навыки —190по таблице, точечно.191192`/code-review`, `/security-review` и `pyright` — то, что есть не в каждой сборке. На193этапе recon проверь их наличие и вшивай в VERIFY только доступное; недостающее заменяй194навыком библиотеки (`change-review`, `django-audit`) или командой проекта (`make type`).195196---197198## Этап 4 — Артефакты прогона на диск199200Всё в `.goalrun/` в корне проекта (исполнитель читает их с диска — у `/goal` нет201контекста планировщика). Напомни добавить `.goalrun/` в `.gitignore`.2022031. **`.goalrun/ROADMAP.md`** — план: профиль автономности, baseline ref, список204 фаз с полями из этапа 3.2052. **`.goalrun/STATE.md`** — живой прогресс: `Status`, `Current phase`,206 `Baseline ref`, `Profile`, `Fix budget` (остаток), `Turn cap`, лог событий.207 Исполнитель обновляет после каждой фазы; по нему же он находит точку старта208 после `GP_HALT` и ре-диспатча.2093. **`.goalrun/PROTOCOL.md`** — копия `references/executor-protocol.md` (цикл210 исполнителя, 3-strike, финальный аудит, маркеры, memory writeback). Исполнитель211 — свежая сессия; протокол обязан лежать на диске, а не в контексте планировщика.2124. **`.goalrun/phases/phase-N.md`** — по файлу-спеке на фазу. Любой длины (читается213 с диска, не идёт в аргумент `/goal`). Начинается маркер-блоком:214215```216GP_PHASE_START217Phase: <N> of <total> — <имя>218Risky: <yes|no>219Mandatory commands: <список команд проекта>220Gates: <список вшитых гейтов или "none">221Acceptance criteria: <count>222Evidence required: <список>223Depends on: <фазы или "none">224225[... полное описание работы, критерии, требования к доказательствам ...]226```227228Пример полной спеки фазы и готовой строки `/goal` — `references/phase-spec-example.md`.229230---231232## Этап 5 — Ревью плана (жёсткий гейт)233234Прогон идёт без надзора — это последний дешёвый момент поправить курс.235236**5a. Self-critique (один проход).** Перед печатью сводки ответь на 3 вопроса и237покажи результат честно (находки ИЛИ «clean», не театр):2381. **Фальсифицируемость** — каждый критерий приёмки yes/no? Помечай «работает»,239 «готово», «корректно» без измеримого предиката и **перепиши на месте** в240 `phase-N.md`.2412. **Атомарность** — нет ли фазы, которая втайне две (имя с «и», deliverables без242 общего verify-гейта)?2433. **Слабейшая зависимость** — где частичный провал каскадит хуже всего?244245**5b. Сводка** — компактно: число фаз · профиль автономности · список фаз246(имя — однострочный deliverable, risky-фазы помечены ⚠) · стек и команды ·247ключевые предположения (правь любое) · топ-3 риска и митигейшн · что из памяти248применено · находки self-critique · путь к артефактам.249250**5c.** `AskUserQuestion` с одним вопросом «Старт?» и конкретными режимами правки251(не размытое «исправить план»): **Старт** · **Поправить предположение** ·252**Тронуть фазу** (критерии/scope/команды) · **Переструктурировать фазы**. При253правке — примени, обнови артефакты, пере-покажи сводку, спроси снова. Не диспатчь254`/goal`, пока не выбрано «Старт». Никогда не считай молчание подтверждением.255256---257258## Этап 6 — Pre-flight259260После «Старт» и **до** выдачи строки `/goal` прогони объединённый261(дедуплицированный) набор mandatory-команд **один раз** в терминале. Это262ловит уже-сломанный baseline (например `pytest` красный ещё до фазы 1).263264- Всё зелёное → запиши `Pre-flight green` в `STATE.md`, переходи к этапу 7.265- Что-то красное → покажи падающую команду (код выхода + последние ~5 строк),266 верни меню этапа 5 с опцией **«Игнорировать pre-flight, диспатчить»** (вдруг267 чинить красный baseline — и есть задача фазы 1). Любой другой выбор → обычная268 правка плана.269270---271272## Этап 7 — Выдать строку `/goal` (одна вставка)273274Слэш-команды срабатывают **только от ввода пользователя** — планировщик не может275запустить `/goal` сам. Поэтому этап 7 — честная передача в одну вставку.2762771. Обнови `STATE.md`: `Status: READY_TO_DISPATCH`, `Current phase: 1`, baseline ref,278 `Fix budget`, `Turn cap`.2792. Проверь, что все `.goalrun/phases/phase-N.md` существуют и содержат маркер280 `GP_PHASE_START`.2813. Напечатай fenced-блок с **готовой строкой `/goal`**, подставив `Turn cap`282 вместо `<TURN_CAP>`. Условие держит только точку входа (`PROTOCOL.md` +283 `Current phase`) и done-предикат — процедура лежит в протоколе на диске,284 поэтому строка не дублирует его и не расходится с ним при обновлении.285 Лимит аргумента — 4000 символов; строка ниже укладывается с большим запасом:286287````288```289/goal "Первым действием прочитай .goalrun/PROTOCOL.md и исполняй строго по нему, начиная с Current phase из .goalrun/STATE.md; фазы со статусом done не переисполняй. Done when: напечатан GP_RUN_COMPLETE, перед ним GP_AUDIT и по одному GP_PHASE_DONE на каждую фазу из .goalrun/ROADMAP.md, а после GP_AUDIT в транскрипте виден фактический вывод переrun'а mandatory-команд с кодом выхода 0 у каждой; ИЛИ напечатан GP_HALT, содержащий номер фазы, проваленный критерий (или причину чекпоинта) и предложение следующего шага; ИЛИ число ходов достигло <TURN_CAP>."290```291````2922934. Под блоком — ровно одна строка инструкции:294295> **Вставь строку `/goal` выше в ввод, чтобы запустить прогон.** Дальше идёт296> автономно (авто-ретрай, fix-спеки, аудит); на рискованных фазах остановится на297> `GP_HALT` — посмотри и вставь ту же строку снова, чтобы продолжить.2982995. **Стоп.** Больше ничего не выводи. Прогон начинается с вставки пользователя.300301---302303## Протокол исполнителя, маркеры, память304305Полный цикл исполнителя (чекпоинты, 3-strike восстановление, финальный аудит),306таблица маркеров транскрипта (`GP_PHASE_START` … `GP_RUN_COMPLETE`) и правила307memory writeback — в [references/executor-protocol.md](references/executor-protocol.md).308Планировщик копирует его в `.goalrun/PROTOCOL.md` на этапе 4 — исполнитель читает309протокол с диска, а не из контекста.310311---312313## Связанные навыки314315- `spec-writer` — если перед прогоном нужен проектный документ (spec/plan), напиши316 его, затем скорми goal-pipeline как вход. spec-writer не исполняет.317- `ralph-loop` — альтернатива, когда хочешь in-session петлю без отдельной318 `/goal`-сессии и хостового оценщика.319- `feature-dev` — для крупного greenfield с архитектурным дизайном.320- `harness-engineering` — вшитые здесь гейты (migration-safety-auditor,321 /code-review, test-coverage-auditor, pyright) — те же, что harness-engineering322 кладёт в Definition of Done проекта. goal-pipeline исполняет DoD внутри прогона.323- `migration-safety-auditor` / `change-review` / `python-project-audit` /324 `test-coverage-auditor` — вызываются как гейты по типу фазы (таблица в этапе 3).