Перейти к содержимому
AUTHORВЫПУСК №008 → АВТОМАТИЗАЦИЯ АГЕНТАМИ: 90% НЕ ПРОМПТ / имейте совесть, когда будете делиться или копировать
>AISTUDY_
СЕРИЯ 005 · SHEET 005 REV·01 · SCALE NTS BY · AUTHOR · 2026 ВЫПУСК ГОТОВ
005 СЕРИЯ 005 / SHEET 005
· · ·  ПИШЕМ РАБОЧИЙ КОД С ПЕРВОГО РАЗА  · · ·
REV·01 / SCALE 1:1 / RU · 2026-05-20

PRE-FLIGHT · ВЫБЕРИ АУДИТОРИЮ · 2 РЕЖИМА

ВЫБЕРИ, КАК ЧИТАТЬ

Выпуск идёт в двух версиях. Выбери одну — выбор сохранится при возврате, переключиться можно сверху страницы в любой момент. Один и тот же сюжет в двух языках: для тех, кто читает код, и для тех, кто за него платит.

КОНЦЕПТ · МЕНЕДЖЕРАМ · РОУДМАП · ИНЖЕНЕРАМ · ПРОМПТЫ

РЕЖИМ:

OUTPUT ВЫПУСК №005 · ИЗ ПРОИЗВОДСТВЕННОЙ ПРАКТИКИ

005ПИШЕМ РАБОЧИЙ КОД С ПЕРВОГО РАЗА

Разделил замысел и реализацию — агент перестал забывать биллинг. И ещё научился работать ночами. Расскажу на двух кейсах: фоновая генерация в проекте A (одна папка плана, девять провайдеров, ноль повторов) и параллельные фичи в проекте B (один план-механизм — две агентские реализации, разные стек и шаблоны, общий результат).

СЕРИЯFOLDER 005
ВЫПУСК005 / 20.05.26
ОБЪЁМ≈ 5 200 СЛОВ
УРОВЕНЬСРЕДНИЙ+
01
B01КОНЦЕПТ Что такое /plan и /work, и зачем они нужны

«пишем рабочий код с первого раза» — рабочая формулировка, которая по факту проверилась только на разработке. На статьях этот же подход у меня же провалился — об этом в финале.

Что это в одном абзаце

Когда вы даёте агенту задачу больше чем «поменяй цвет кнопки», происходит знакомая беда — агент пишет «работающий» код, который через час падает в проде. Он забыл про оплату. Забыл, что будет если сеть моргнёт. Где-то перепутал, какие данные возвращать. Через две недели у вас три такие фичи, и каждую вы лечите руками.

/plan и /workмои авторские слэш-команды для Claude Code, которые я построил себе сам. Они решают эту беду одним приёмом: разделяют замысел и реализацию. Сначала вы с агентом договариваетесь, что именно делаете, зачем, и что точно не делаете. Это записывается в папке. Потом агент идёт реализовывать — но не «как ему показалось», а строго по записанному.

Эти команды лежат у меня в ~/.claude/commands/plan.md и ~/.claude/commands/work.md — это не стандартная фича Claude Code из коробки, а кастомная инфраструктура. Дальше в блоке 5 даю шаблон, чтобы вы могли построить такую же у себя.

Привязки к Claude нет. Это процесс, не фича одного инструмента. Те же самые шаги (4 вопроса, шесть полок, циклы критиков) переносятся в Codex CLI (там слэш-команды лежат в своей папке), в Gemini CLI (своя структура), в Kimi CLI (можно прямо kimi --print запустить из shell). Меняется внешняя обёртка — где лежит файл команды, какие инструменты ей доступны через MCP — но плановая папка с шестью файлами и протокол «4 вопроса → этапы → ревью между фазами» одинаковые для всех. У меня это Claude Code как primary, а Kimi я подключаю как внешнего ревьюера через CLI. У вас может быть любая другая раскладка.

На каких задачах выигрывает

  • Фича трогает больше 3 файлов
  • Есть несвязанные части (фронт + бэк + база)
  • Нужен биллинг, авторизация, миграция схемы — любое место, где ошибка стоит дороже отката
  • Хочется отдать задачу агенту «на ночь» и проснуться с готовой работой, а не с кашей

Где не нужно

  • Опечатка, переименование, мелкий фикс — /plan для них перегрузка
  • Эксперимент в песочнице, где код всё равно выкинете
  • Когда сами не знаете, что хотите получить — /plan не заменит вам думанья над продуктом

Что конкретно делает /plan

Я набираю в чате /plan «нужна фоновая генерация картинок с биллингом». Команда не идёт сразу писать код. Она запускает разговор-опросник:

  1. Перечитывает всю переписку этой сессии — не только то, что я написал после слэша, а весь предшествующий чат. Достаёт оттуда замысел, термины, упомянутые альтернативы и запреты.
  2. Кладёт черновики в папку .claude/memory/plans/<имя-фичи>/ — четыре файла: «что строим», «словарь терминов», «принятые решения», «запреты».
  3. Задаёт мне ровно четыре вопроса по этим черновикам — узнаю ли я свой замысел, верно ли определены термины, какие альтернативы упустил, что точно не должно быть в реализации. Без ответов дальше не идёт.
  4. После ответов разбивает работу на 3-7 этапов с проверками между ними и пишет это в файл plan.md. Каждый этап имеет свой сценарий проверки в продукте.
  5. Прогоняет всё через внешнего проверяющего (другая модель — Kimi). Та читает план и ищет дыры: упомянут ли каждый пункт замысла, нет ли противоречий между решениями, можно ли проверить каждый этап продуктово. До трёх циклов правок. Только потом план считается готовым к работе.

Через 20-40 минут у меня в папке полный план: что строим, почему, какие альтернативы рассмотрены, какие запреты, конкретные этапы и сценарии проверки в продукте. До этого ни строчки кода не написано.

Что конкретно делает /work

Запускаю /work — команда берёт первый незавершённый этап из plan.md и идёт по нему по нотам. Что важно:

  1. Не читает весь план целиком — только нужные секции (для этой фазы по «References»). Это позволяет работать с большими планами без переполнения контекста.
  2. Перед каждым этапом показывает мне: что сейчас будет делать, на какой пункт замысла это опирается, и чего НЕ будет трогать. Спрашивает «узнаёшь свой замысел?» — без «да» не начинает.
  3. Делает работу строго по списку задач этапа. Не больше, не меньше. Если по ходу видит что план кривой — останавливается и предлагает поправить план, не делает «как ему кажется».
  4. После работы прогоняет три уровня проверки: автоматические тесты, проверка соответствия замыслу, проверка качества кода. Каждая проверка — отдельная пауза с вердиктом.
  5. Коммитит в git один раз на этап, с понятным сообщением. Никаких «всё в одну кучу».
  6. В конце спрашивает меня: «открой такую-то страницу, нажми такую-то кнопку, должно произойти то-то — работает?». Я отвечаю — переходим к следующему этапу. Без моего «работает» агент не идёт дальше.

В режиме /work --auto агент не ждёт моего «работает» после каждой фазы — идёт сам, пока не упрётся в стоп-сигнал (упала проверка, закончился контекст, я в чате написал новое правило). В этом режиме можно реально оставить его на час-два-три и заниматься своими делами.

Главный побочный эффект — автономность

Полезная вещь, которая выходит сама собой: когда замысел зафиксирован в файлах, агент сам принимает локальные решения. Не переспрашивает по каждой мелочи. Потому что критерии «что правильно» лежат на одной из полок шкафа (см. блок 4), а не в чате трёхдневной давности. Поэтому длинные задачи (4+ часа, 7+ шагов) получается прогонять «через ночь» и утром получать осмысленный результат, а не «развалившуюся к утру» сессию.

Было (без плана, всё «по чату»):

  • Утро 9:00 — даём задачу.
  • 9:30 — агент пишет, через 30 минут вопрос: «а вы хотели X или Y?». Отвечаем.
  • 10:00 — ещё вопрос. Отвечаем.
  • 11:30 — агент закончил, но забыл часть. Идём чинить.
  • Активного внимания: ~3 часа на одну фичу.

Стало (с планом):

  • 9:00 — /plan, 30 минут согласовываем замысел.
  • 9:30 — /work --auto, идём пить кофе и заниматься своими делами.
  • 11:00 — открываем — фича готова, прошла критиков. Проверяем 5 минут.
  • Активного внимания: ~45 минут.

Что это, в одном абзаце

/plan и /workмои custom slash-команды для Claude Code (живут в ~/.claude/commands/plan.md и ~/.claude/commands/work.md, ~16k и ~22k строк инструкций соответственно). Под капотом — shell-скрипты в ~/.claude/lib/ (plan-index.sh, kimi-review.sh) + Python-парсер plan-index.py с генерацией voyage-embeddings для семантического поиска по плану.

Команды реализуют intent-first workflow: продуктовый замысел и архитектурные решения фиксируются в структурированной папке .claude/memory/plans/<slug>/ ДО того, как агент пишет первую строку кода. /work исполняет план по фазам с auto-checks + Kimi-critic-pass между ними. Это разделение замысла и реализации на уровне директории — не на уровне процесса в голове.

Из коробки Claude Code этого нет. Это инфраструктура которую я строил несколько недель и теперь дробал в production. Шаблон команд + скрипты — в блоке 5, можно собрать у себя.

Адаптация под другие CLI-агенты. Workflow не привязан к Claude. Те же команды портируются в:

  • Codex CLI (OpenAI) — кастомные slash-команды поддерживаются, MCP-сервера те же (codegraph, serena, context7 работают одинаково). Адаптация: переписать frontmatter под формат Codex, перенести bash-скрипты (plan-index.sh, kimi-review.sh) как есть.
  • Gemini CLI — поддерживает custom commands и MCP. Особенность — 2M контекст, можно меньше беспокоиться о selective loading на больших планах. Frontmatter под Gemini, остальное идентично.
  • Kimi CLI — наоборот, я уже использую как внешнего ревьюера через kimi --print --yolo. Можно сделать primary автором: kimi-review.sh переименовать в claude-review.sh, под капотом — headless Claude или GLM как independent second opinion.

Меняется внешняя обёртка (формат frontmatter slash-команды, путь к папке команд, доступные MCP-сервера в конкретном CLI). Не меняется протокол: 4 блокирующих вопроса, 7 файлов в плановой папке, цикл «Task → auto-checks → 3 уровня критика → product pause», cycle policy Step D, constraint emergency rule. Это про процесс, не про конкретный инструмент.

Главное архитектурное правило при адаптации: primary author и reviewer должны быть разными моделями. Если плану пишет Claude — ревьюером ставьте Kimi/GLM/Codex. Если плану пишет Codex — ревьюером Claude/Kimi. Внутри одной модели независимости не получится.

Решает четыре class'а проблем:

  1. «Working» код, который падает в проде через час — забытый биллинг, забытый refund, забытая обработка race condition. План фиксирует эти требования до имплементации.
  2. Дрейф между фазами — фаза 3 случайно переопределяет интент фазы 1. /work перечитывает intent.md + decisions.md перед каждой фазой.
  3. Потеря фокуса на длинной задаче — после 3-го файла агент начинает делать «не то». Phase-based декомпозиция с commit между фазами разбивает контекст.
  4. Недоверие к делегированию через ночь — без явного плана агент за час до утра может уехать в овраг.

Этапы команды /plan

Команда — это slash-обёртка над процедурой из шести шагов (Step 0..5 / Etap A..D). Каждый шаг блокирующий, не пропускается.

  • Step 0 — Refuse-conditions. Пустой/слишком короткий аргумент, не git-репо, недоступный Kimi-ревьюер (/etc/kimi-llm.env), уже существующая папка плана с тем же slug — каждый случай явно отказывается или предупреждает.
  • Step 1 — Branch guard. Если ветка main/master/dev/develop и есть dirty changes — STOP с четырьмя опциями (stash / commit / discard / ignore). Иначе создаёт ветку claude/plan-<slug>.
  • Step 2 (Etap A) — Restore context from chat. Главное отличие от прежней версии команды: «plan only saw $ARGUMENTS, not the discussion» — это закрытый баг. Команда читает всю переписку этой сессии и извлекает 4-5 артефактов: intent.md (что строим + почему + цитаты юзера verbatim в §6), glossary.md (термины с «не путать с»), decisions.md (D1, D2... с альтернативами и причиной отказа), constraints.md Initial (явно сказанные запреты).
  • Step 3 (Etap B) — Structured confirmation, 4 BLOCKING questions (verbatim):
    1. Узнаёшь замысел в intent.md? Конкретно по каждой §-секции: формулировка точная, или поправить?
    2. Все термины в glossary определены так, как ты их понимаешь?
    3. Какие альтернативы в decisions я упустил? Может быть какие-то решения вообще не зафиксировал?
    4. Что НЕ должно быть в реализации? (Initial constraints — последний шанс зафиксировать запреты до старта работы.)
    Без ответов команда не идёт к Step C.
  • Step 4 (Etap C) — Write plan.md + verification.md + initial graph. Читает AGENTS.md / CLAUDE.md / .claude/rules. Для codegraph-зарегистрированных проектов — вызывает plan_change / endpoint_impact / impact_map / shape_check для compact risk packet. Пишет phases с References (bare anchors), Touches, Affects intent, Execution, Dependencies, Estimated active time, Review-уровень (risk-таблица), Task, Auto-checks, три критика. Запускает plan-index.sh — генерирует index.md, graph.json, обновляет embeddings.sqlite, auto-fill «Влияет на фазы» в decisions.md из reverse-index фаз→D, детектирует risk-warnings по Touches.
  • Step 5 (Etap D) — Kimi blocking review. bash ~/.claude/lib/kimi-review.sh plan_d <plan_dir>. Kimi возвращает JSON с verdict ready_for_work/revise и список issues с категориями (coverage / drift / decisions / glossary / references / constraints / verification / review_mismatch) и severity (blocker / major / minor).

Cycle policy Step D (3 attempts max, severity-escape-hatch)

  • Cycle 1: revise → применить фиксы для всех blocker + major, re-run.
  • Cycle 2: всё ещё revise → фиксы для оставшихся, re-run.
  • Cycle 3 (final): examine по severity:
    • Если остался хоть один blocker — STOP, surface to user, не закрывать /plan. Blockers неприемлемы (under-protection auth, нарушенный constraint, отсутствующий §intent).
    • Если только major/minor — спросить юзера: (A) continue cycling, (B) accept-with-warnings (записать в reviews/accepted-warnings.md, /plan завершается со status: planning, эти issues показываются в начале каждого /work до явного resolve), (C) stop, доработать вручную.
    Решение пишется в reviews/cycle-decisions.md.

Этапы команды /work

После Step D — план готов, можно запускать /work. Каждая фаза — независимый цикл 4a..4i:

  • 4a. Pre-flight. Для codegraph-проектов — plan_change(target, project, intent) за один вызов даёт callers/callees затрагиваемых символов, риски, навигационные подсказки. Экономит 5-15 grep+read циклов. Затем print phase header в продуктовых терминах + «Узнаёшь свой замысел?» — STOP, wait.
  • 4b. Implement task items. Selective context loading: читает только файлы из Task block + Touches. Не pre-load whole repo. Для codegraph-проектов — MCP-инструменты (find_symbol, semantic_search, callers_of, callees_of) вместо grep.
  • 4c. Auto-checks. Stack-aware (npx tsc --noEmit, ruff check ., cargo check, go vet ./...). Для codegraph — финальная проверка validate_diff_against_graph(mode="fast"). На failure — fix + re-run, max 3 fix-attempts per check.
  • 4d. Build-grade critic (code-validator subagent, read-only). Проверяет: build/type/import errors, structural mismatches между Task и implementation, missing files, files modified без авторизации Task. Это не correctness gate, а build gate. JSON verdict pass/fail. Max 3 attempts.
  • 4e. Git checkpoint. git add -A; git commit -m "chore(plan): phase N — <name>". Коммит делается ДО intent-критика — потому что Kimi читает git diff phase'ы из истории. Refuse to commit если ветка не claude/*. Никогда --no-verify, никогда --amend на этом шаге.
  • 4f. Intent-grade critic (conditional по Review). Если Review ∈ {intent, both, both+cumulative} → kimi-review.sh phase_intent N <plan_dir>. Kimi проверяет: реализует ли diff Task, соответствует ли §intent, не сделан ли поворот к отвергнутой альтернативе (см. decisions), не нарушены ли constraints, не вышел ли diff за Touches. Verdict: pass / concern (пауза, показ issues) / fail (revert + fix + re-commit + re-run, max 3 attempts).
  • 4g. Code-grade critic (conditional по Review). Если Review ∈ {code, both, both+cumulative} → kimi-review.sh phase_code N <plan_dir>. Это отдельно от build и intent. Kimi проверяет 6 категорий: incomplete_impl (нет ли заглушек), fake_logic (реально ли работает алгоритм), error_handling, quality, security, test_quality.
  • 4g-cum. Cumulative drift check (только Review=both+cumulative). kimi-review.sh cumulative — смотрит весь накопленный diff branch (не только эту фазу), отвечает on_track / drift_concern / drift_critical.
  • 4h. Update plan + re-index. Mark все checkboxes как [x], заполнить «Что сделано» в verification.md (2-3 предложения в продуктовых терминах). Re-run plan-index.sh. Amend 4e-commit с plan-file updates (это единственный разрешённый --amend в /work — чтобы фаза осталась одним коммитом для kimi-review match).
  • 4i. Product pause (interactive mode). «Что сделано / Как проверить / Что НЕ трогал» + три варианта ответа: «узнаю замысел», «проверил вручную: работает», или новая директива → constraint emergency rule.

--auto stop-conditions

В режиме --auto пауза 4i пропускается между фазами, но команда останавливается на любом из стоп-сигналов:

  • Auto-check fails 3 раза подряд на одной проверке
  • Build-grade critic issues 3 раза подряд
  • Intent-grade verdict == concern (пауза, не auto-continue)
  • Intent-grade verdict == fail (STOP)
  • Code-grade verdict == concern или fail
  • Context window >70%
  • Constraints (live) было модифицировано пользователем во время run
  • 2+ consecutive фазы прошли без surfacing — пауза anyway
  • Cumulative drift check каждые 3 фазы (5a)

При срабатывании в plan.md дописывается <!-- /work auto-stopped at <ts>: <reason> -->, status остаётся in-progress, юзер resume через /work --resume <slug>.

Constraint emergency rule

Если посреди работы я в чате пишу «не трогай X» / «только Y» / «обязательно Z» — перед следующим code action агент делает три шага:

  1. Открывает <plan_dir>/constraints.md, append в Live section: - [<YYYY-MM-DD HH:MM>] <verbatim quote>
  2. Запускает plan-index.sh (обновляет index.md Live constraints display)
  3. Отвечает в чат: Constraint logged: <one-line restatement>. Continuing.

Только после этого продолжает фазу. Перекрывает momentum mid-phase — потому что live constraints читаются intent-grade критиком на каждой следующей фазе. Без этого правила длинные сессии забывают директивы 30-минутной давности.

Архитектурный сквозной мотив — автономность

Из полезного — побочный эффект: зафиксированный замысел даёт агенту критерии для самостоятельных решений. Когда decisions.md явно говорит «D8 — атомарное списание только при success, не eager-charge + refund — отвергнуто из-за race conditions», агент не переспрашивает «а как тут лучше». Он смотрит в файл и делает так, как там написано. Отсюда работающий /work --auto через ночь — критерии правильности под рукой, а не в чате трёхдневной давности.

NOTE ВАЖНО

Канонический эталон — выпуск №001 серии (про устройство ~/.claude/). Там пять слоёв защиты агента. В этом выпуске фокус не на защите, а на что писать в плане ДО кода.

CAREFUL ВНИМАНИЕ

Частая ловушка: люди слышат «AI-агент сам всё делает» и пишут промпт типа «сделай нам систему оплат». Это не работает. Агент построит что-то, но это не будет вашей системой оплат — это будет средневзвешенная система оплат из его обучающих данных. План фиксирует, что именно ваше.

CAREFUL ВНИМАНИЕ

Анти-паттерн: писать intent.md после первой имплементации, чтобы «было». Это лишний бумажный шум. Если план не существует ДО кода — он бесполезен. Это не документация по факту, это договорённость на будущее.


ПОТОК /PLAN → /WORKКОНЦЕПТ4 ФАЙЛАKIMI REVIEWPLAN + VERIF./WORK --AUTO9 ФАЗFINAL COMMIT
СХЕМА 02 / ПОТОК /PLAN → /WORK

02
B02МЕНЕДЖЕРАМ Менеджерам

Что это даёт продукту

Без /plan: типичная фича из 5 файлов проходит через 2-3 итерации «агент сделал, мы заметили баг, агент починил». Каждая итерация — 30-90 минут активного внимания человека. Итого 1.5-4 часа на не-сложную фичу.

С /plan: 30 минут на согласование замысла + 1-3 часа автономной работы агента + 15 минут на финальный обзор. Активного человеческого внимания тратится в 2-3 раза меньше.

Сколько стоит подключить

— Один раз: настроить структуру .claude/memory/plans/ в проекте (5 минут). — На каждую новую фичу: 20-30 минут на согласование замысла перед стартом. — Регулярно: GLM-ревью текста перед публикацией, Kimi-ревью вёрстки. Стоимость — копейки (доли центра за прогон).

Что меняется в работе

— Вы говорите «что» и «почему», а не «как» (это техника). — Вы видите план до начала, а не оправдания после. — Если задача слишком большая — вы это видите сразу, а не через 3 дня. — Если агент пошёл не туда — это видно после первой фазы, а не после релиза.

Когда срочно подключать

Когда у вас:

  • Уже было 2+ ситуации, где «работающий» код упал в проде через час.
  • Есть длинная задача (3+ дня работы), и хочется делегировать «на ночь».
  • Несколько агентов или несколько разработчиков работают над одной фичей, и они расходятся в понимании, что делают.
  • Готовите PR на критическую систему (биллинг, auth, миграция схемы) — план становится журналом, по которому через полгода можно ответить «почему мы такое решение приняли».

03
B03РОУДМАП Дорожная карта: как внедрить

Без кода. Что и в каком порядке делать.

1

Создать структуру в одном проекте

Выбираешь проект (не самый критичный, для обкатки). Создаёшь там папку .claude/memory/plans/. Класть её в git или нет — на твоё усмотрение; обычно держим в git, чтобы потом можно было поднять историю «какой план мы делали полгода назад под эту фичу». Внутри будут подпапки на каждую фичу, каждая со своим набором файлов.

2

Поставить шаблоны плана

В ~/.claude/templates/plan/ лежат семь шаблонных файлов, по одной маркдаунке на каждую «полку шкафа»:

  • intent.md — продуктовый замысел в §-секциях. §1 «Что мы строим», §2 «Зачем» (помечено {meta} — это контекст, не реализуется кодом), §3 «Архитектурные акценты», §4 «Что мы НЕ делаем (Not-confuse-with)», §5 «Границы», §6 «Цитаты из обсуждения». §6 — append-only, дословные цитаты заказчика, никогда не редактируются.
  • glossary.md — каждый термин с потенциально неоднозначным значением. Формат: определение + «Пример» + «Не путать с». Последнее обязательно — иначе термин не закреплён.
  • decisions.md — D1, D2... append-only. При смене решения — добавляется D7 с пометкой supersedes D1, старый D1 остаётся как audit-trail. У каждого D — отвергнутые альтернативы с конкретной причиной (не «не подошло», а «нарушает constraint Y» / «противоречит §intent N» / «не масштабируется до X»).
  • constraints.md — две зоны. Initial фиксируется до /work и read-only. Live растёт во время работы — когда я в чате говорю «не трогай X», запись с timestamp падает сюда автоматически.
  • plan.md — техническая декомпозиция на 3-7 фаз. У каждой фазы: References (на какие §intent / D / glossary опирается), Touches (какие файлы трогает), Affects intent, Execution (local или делегировать), Dependencies, Estimated active time, Review-уровень (по таблице рисков), Task с чекбоксами, Auto-checks, три критика.
  • verification.md — сценарии проверки для не-разработчика. Без кода, без путей файлов, без слов «tsc», «lint», «endpoint». «Открой URL, нажми кнопку, должно произойти то-то».
  • out-of-scope.md — §-секции замысла, сознательно невыполняемые в этом плане. С обоснованием «когда планируется».

Команда /plan копирует эти шаблоны и заполняет под фичу. После заполнения и подтверждения — структура зафиксирована.

3

Прогнать одну небольшую фичу

Берёшь следующую запланированную фичу (НЕ опечатку, но и не «переписать всё бэкенд»). Запускаешь /plan «описание фичи». Команда делает пять шагов:

  1. Refuse-conditions — отказывается на пустом аргументе, вне git-репозитория, при недоступном Kimi-ревьюере, при коллизии имени папки.
  2. Branch guard — если ты на main и есть незакоммиченные изменения, тебя останавливают и предлагают stash / commit / discard / ignore. Если всё чисто — создаёт ветку claude/plan-<slug>.
  3. Восстановление контекста из чата — читает всю предыдущую переписку этой сессии, не только аргумент /plan. Достаёт замысел, термины, упомянутые альтернативы, ограничения. Пишет черновики четырёх файлов: intent / glossary / decisions / constraints.
  4. 4 блокирующих вопроса по черновикам. Без ответов на каждый — не идёт дальше. Это последний шанс поправить замысел до старта работы.
  5. Написание plan.md + verification.md, генерация index.md и graph.json, запуск blocking-ревью через Kimi. До трёх циклов правок. Только потом план готов.

В конце смотришь файлы — узнаёшь свой замысел? Если что-то не так — это тут правится, а не после имплементации.

4

Запустить /work на одной фазе

Запускаешь /work без --auto — исполняется одна фаза. Что произойдёт по шагам:

  1. Команда проверит, что ты на ветке claude/* — иначе откажется работать.
  2. Прочитает index.md (карта папки) и блок твоей фазы из plan.md. Из intent.md / decisions.md / glossary.md прочитает только нужные секции по References фазы — не файлы целиком.
  3. Покажет тебе в продуктовых терминах: что сейчас будет делать, на какой пункт замысла опирается, и чего НЕ будет трогать. Спросит «узнаёшь свой замысел?». Без «да» — не начинает.
  4. Сделает работу строго по Task block фазы. Если по ходу видит, что план кривой — STOP, предложит поправить план, а не «сделает как ему кажется».
  5. Прогонит автоматические проверки (типы / линтер / тесты в зависимости от стека).
  6. Сделает коммит с понятным сообщением вида chore(plan): phase N — <name>. Никаких --no-verify, никаких amend.
  7. Запустит критика соответствия замыслу — внешняя модель (Kimi) проверит: реализует ли diff Task, не сделан ли поворот к отвергнутой альтернативе, не нарушены ли constraints, не вышел ли diff за заявленные Touches.
  8. Запустит критика качества кода (если фаза не «только тексты»): нет ли заглушек, реально ли работает алгоритм, есть ли обработка ошибок на критичных путях, безопасность, тесты реально проверяют поведение или просто assert True.
  9. Выведет тебе блок «Что сделано / Как проверить продуктово / Что НЕ трогал в этой фазе». Ждёт от тебя «работает / не работает / новая директива».

Если «работает» — следующая фаза. Если «не работает» — STOP, разбираемся. Если новая директива — она автоматически падает в constraints.md Live и применяется ко всем следующим фазам.

5

Перейти на --auto постепенно

Когда несколько фаз отработали в режиме «фаза → пауза → продолжай», переходишь на /work --auto. Защита сама остановит на любом из стоп-сигналов:

  • Автоматические проверки провалились 3 раза подряд
  • Критик соответствия замыслу вернул concern или fail
  • Критик качества кода нашёл заглушку или fake-логику
  • Контекст разговора заполнен на 70% — пауза для безопасности
  • Прошли 2 фазы подряд без твоего участия — пауза для общей сверки
  • Каждые 3 фазы — отдельная проверка «не отклонился ли весь накопленный результат от замысла» (cumulative drift check)
  • Ты в чате написал новую директиву → она пишется в Live constraints, перед следующей фазой агент сверяется

При срабатывании в plan.md дописывается комментарий «/work auto-stopped at <timestamp>: <причина>». Статус остаётся «in-progress». Возвращаешься через /work --resume <slug>.

6

Подключить внешних ревьюеров

Внешние модели подключаются точечно к фазам разного типа:

  • Текст / логика / план — Kimi или GLM. Каждый ревью получает на вход не весь план, а нужные срезы (релевантные §intent + D-решения + glossary + git diff фазы) — поэтому работает быстро даже на больших планах.
  • UI / вёрстка — Kimi или Gemini с тем же доступом к коду, плюс могут применять CSS-фиксы напрямую через MCP.
  • Финальный отчёт — отдельный режим product_summary: после закрытия плана внешняя модель пишет markdown в продуктовых терминах для не-разработчика. Это и есть «итог: что хотели, что сделано, что иначе, какие риски и долги».

Все эти ревью работают как блокирующие проверки качества ДО публикации: пока не прошли — не выкладываем.

TIP СОВЕТ

Ловушка: если делать всё сразу — структура + плагины + ревьюеры — будет ощущение «обвес мешает работать». Заходить пошагово, на одной фиче за раз.

NOTE ВАЖНО

Цикл ревью Kimi на этапе создания плана: до того как агент начнёт писать код, внешний ревьюер (Kimi K2.6) прогоняет план через семь категорий проверок — покрытие интента, согласованность D-решений, ясность словаря, отсутствие конфликтов с constraints, traceability фаз к §-секциям, адекватность Review-уровней, наличие verification-сценариев для каждой фазы. До 3 циклов с автоматическим применением фиксов. Если после 3 циклов остаются блокеры — план не закрывается без явного решения владельца. Цена прогона — секунды. Цена пропущенной ошибки в плане — пере-плана и пере-имплементации на 2 дня позже. Прогонять выходит дешевле.


04
B04ИНЖЕНЕРНЫЙ РАЗРЕЗ Разработчикам

Главный смысловой блок. Объясняем на пальцах, без файлов и команд, как устроен план изнутри и почему он работает на длинных задачах.

4.1. Структура папки плана

Главный технический блок. Конкретные файлы, паттерны, регэкспы.

4.1. Структура папки плана

ПАПКА ПЛАНА: .CLAUDE/MEMORY/PLANS/<SLUG>/INTENT.MDПродуктовый замыселGLOSSARY.MDСловарь терминовDECISIONS.MDПринятые решенияCONSTRAINTS.MDОграниченияPLAN.MDФазы и чекбоксыVERIFICATION.MDКак проверять

Папка плана — это реальный шкаф с шестью полками. На каждой полке лежит один документ, и у каждого документа одна простая роль.

Полка первая — «ЧТО мы строим». Один файл, написан человеческим языком. Тут лежит замысел: какую фичу делаем, для кого, какой пользовательский сценарий хотим увидеть в продукте. Это самый главный документ из всех — если он написан криво, остальные не спасут.

Полка вторая — «СЛОВАРЬ». Если в обсуждении есть слова, которые мы понимаем по-своему («заказ», «корзина», «активный пользователь»), мы их фиксируем тут одним предложением. Чтобы агент не подумал, что «активный» — это вчера, когда мы имели в виду «за последние 30 дней».

Полка третья — «КЛЮЧЕВЫЕ РЕШЕНИЯ». Список из десятка-полутора пунктов вида «мы делаем так, потому что — и НЕ делаем эдак, потому что —». Без этой полки агент не отвечает на «почему именно так» — а это вопрос номер один через три месяца, когда никто из команды уже не помнит обсуждения.

Полка четвёртая — «ЗАПРЕТЫ». Чего категорически нельзя делать, даже если очень хочется или «так короче». Например: «не списывать деньги до того, как пришёл результат». Эту полку агент перечитывает перед каждым новым шагом.

Полка пятая — «ТЕХНИЧЕСКИЙ РОУДМАП». Разбиение работы на 3-7 этапов. Не «вот тебе задача, иди делай», а «сначала вот это, потом вот это, потом вот это». Между этапами агент останавливается, показывает результат, и только потом идёт дальше.

Полка шестая — «ПРОВЕРКА В ПРОДУКТЕ». Сценарии, которые нужно прокликать в готовой фиче, чтобы убедиться: работает. Написаны человеческим языком, чтобы не-разработчик мог пройти их сам.

Подставь агента к этому шкафу, и он сам разберётся. Любая локальная неопределённость («куда списывать деньги?») имеет ответ ровно на одной из шести полок. Ему не нужно перечитывать чат двухдневной давности и гадать.

Минимальная папка .claude/memory/plans/<slug>/:

intent.md             # ← продуктовый замысел, §-секции (что, зачем, не путать с, цитаты)
glossary.md           # ← словарь терминов с потенциально неоднозначным значением
decisions.md          # ← D1, D2, ... — архитектурные/продуктовые решения с альтернативами
constraints.md        # ← запреты и обязательства (Initial + Live)
plan.md               # ← техническая декомпозиция на 3-7 фаз
verification.md       # ← продуктовые сценарии проверки для не-разработчика
index.md              # ← генерируется автоматически (граф + метаданные)
graph.json            # ← reverse-index фаз ↔ решений ↔ замысла
reviews/              # ← логи Kimi/GLM ревью по циклам

intent.md — корневой файл. Кривой intent ломает всё следом: decisions/plan/verification ссылаются на него, и если §-секции написаны мутно, эти ссылки указывают в туман. Пример минимального intent для фичи фоновой генерации:

# Intent — bg-image-generation

## §1 Что мы строим
Endpoint /api/images/v3/generate — пользователь нажимает «сгенерируй»,
получает HTTP 202 + generation_id, фоновая задача делает работу, результат
прилетает через SSE. Если страница перезагружена — состояние сохранено в БД,
работа продолжается на бэкенде.

## §2 Зачем
Раньше синхронная генерация (10-90 сек). При reload — потеря HTTP-связи,
rollback в БД, потеря деньег API + потеря результата для пользователя.
Это критическая проблема UX на мобайле.

## §3 Что НЕ делаем
Не пишем новый WebSocket. Используем существующий PG NOTIFY trigger через
SSE endpoint /api/conversations/{id}/stream.

Этот замысел существует ДО первого коммита кода. Когда агент на фазе 3 пишет endpoint, он перечитывает §2 и понимает: списание должно быть устойчиво к reload. Не «вижу синхронный запрос — списываю при ответе» (это сломалось бы при reload), а «вижу запрос — создаю pending Generation сразу + списываю только при success в фоновой задаче».

УПРАЖНЕНИЕ · 5 МИН

Упражнение: какие три вещи должны лежать в intent.md чтобы агент НЕ забыл биллинг?

Ответ
  1. Прямая цитата из обсуждения с продактом: «биллинг должен списываться только при успешной генерации».
  2. §-секция «Зачем» с описанием failure mode: что произойдёт с деньгами, если refund был забыт.
  3. Запись в decisions.md: «D8 — атомарное списание; альтернатива eager-charge + refund отвергнута из-за race conditions».

Этот тройной слой не даёт агенту «соскочить» на простой быстрый путь.

4.2. Проект A: фоновая генерация изображений — production с первого захода

«с одного захода сделал полностью рабочий функционал для прода и сразу правильно биллинг подключил» — про эту фичу.

4.2. Проект A: фоновая генерация изображений — production с первого захода

«с одного захода сделал полностью рабочий функционал для прода и сразу правильно биллинг подключил» — про эту фичу.

ПРОЕКТ A — ФОНОВАЯ ГЕНЕРАЦИЯCLIENTIDEMPOTENCYHTTP 202/ PENDINGBACKGROUND TASKPROVIDER MAP(1/9)S3 SAVEATOMIC COMMIT+ CHARGEPG NOTIFY-> SSESTALE-DETECT POLLINGКАЖДЫЕ 30S, LIMIT 5MIN

У нас был сервис, который умеет рисовать картинки примерно двумя десятками разных моделей — это один из наших продуктов в проде. Раньше схема была простая и плохая: пользователь нажал кнопку «сгенерируй», ждёт 30-60 секунд с открытой страницей. Случайно обновил вкладку — деньги списались, картинка не приехала. На мобильнике переключился в другое приложение — то же самое. Саппорт каждый день разбирал «верните деньги, я ничего не получил».

Когда мы переходили на новую архитектуру, ДО того как написана хоть одна строчка кода, мы сели и зафиксировали в плане ключевые правила. Их было десять. Самые важные на пальцах:

  • Деньги списываются только тогда, когда картинка реально пришла. Не «нажал — списали — ушёл рисовать», а «нажал — пошли рисовать — пришла картинка — теперь спиши». Это сильно сложнее технически, но критично для пользователя.
  • Двойной клик ничего не ломает. Если пользователь дважды нервно ткнул кнопку — задача создаётся одна, не две. Не два списания, не две картинки.
  • Перезагрузка страницы не теряет работу. Закрыл вкладку, вернулся через минуту — увидел готовый результат. Картинка рисуется на сервере, а не «в твоём браузере».
  • Один и тот же интерфейс — для всех двадцати моделей. Не двадцать разных кнопок и двадцать разных проверок «хватит ли денег» — одна общая, через словарь «какая модель у какого провайдера».

Когда эти правила записаны в плане ДО кода, агент не может «забыть про биллинг». Не потому что он молодец, а потому что правило «спиши только после успешной картинки» лежит в одной из полок шкафа, и оно одно. В коде физически нет другого места, куда можно вписать списание — иначе план запрещает.

Дальше эту большую работу разбили на шесть маленьких этапов по 0.5-3 часа каждый. После каждого этапа — пауза, проверка, фиксация в репозитории. Если на этапе номер три случайно сломали что-то из этапа номер два — это видно сразу, а не через месяц в проде.

Результат: за месяц с момента выкатки — ноль багов биллинга. Не потому что повезло. Потому что правила выписали до кода, а не после.

Это опорный кейс выпуска. Производственная фоновая генерация изображений в одном из наших проектов (далее «проект A»): 21 модель × 9 провайдеров, единый endpoint /api/images/v3/generate, в проде с первой попытки, биллинг подключён правильно, без починок «после факта». Хочется разобрать четыре подпункта.

(а) Что лежало в плане ДО первой строки backend-кода

Перед стартом фазы 6.2.2 (когда писался ImageGenerationDispatcher — главный сервис) в decisions.md уже было зафиксировано 10 решений (D1-D10):

  • D1: один endpoint + PROVIDER_MAP (21 модель → 9 провайдеров), а не 5 отдельных endpoint'ов для разных провайдеров. Альтернатива отвергнута: дублирование billing и валидации на каждой кнопке, легко забыть при добавлении новой модели.
  • D2: фоновая задача через FastAPI BackgroundTasks, не Celery, не asyncio.create_task. Альтернатива отвергнута: Celery — overkill на 10-90 сек задачи; asyncio.create_task — нет lifecycle hook для DB session, тихо съест exception'ы.
  • D3: HTTP 202 + immediate state persistence ДО вызова провайдера. Альтернатива отвергнута: без immediate commit reload теряет состояние.
  • D8: атомарное списание только при success + один и тот же db.commit(). Альтернатива отвергнута: eager-charge + refund — race conditions, мусор в истории транзакций.

Когда фаза 6.2.3 написала backend (за 3 часа активной работы), агент перечитывал эти решения. Биллинг не мог быть забыт — он зашит в D8 как «атомарно с записью результата». Структурно «куда списывать» лежит ровно в одной строке, и эта строка зафиксирована в decisions.md.

(б) Как зафиксировали замысел против «забыл биллинг»

Тройной слой защиты:

  1. **intent.md §2** прямо описывает failure mode: «при reload теряются деньги API + результат — это критическая проблема UX».
  2. **decisions.md D8** фиксирует политику списания: success-only, атомарно.
  3. **plan.md Phase 6.2.3 Task** содержит пункт «endpoint вызывает background task → background task в свою очередь делает charge_balance + commit в одной транзакции» — это в списке задач фазы, не в комментарии.

В коде это превращается в одну функцию complete_generation(result), которая делает три шага в одной транзакции. Невозможно её обойти, потому что вокруг нет других вариантов charge'а — фаза 6.2.3 запрещает добавлять другие.

(в) Как декомпозиция отсекла дрейф

Phase 6.2 разбита на 6 подфаз с явными границами:

Подфаза Время Что делает
6.2.2 1.5h Dispatcher service + PROVIDER_MAP + unit тесты
6.2.3 3h Endpoint /api/images/v3/generate + фоновая задача + атомарное списание
6.2.4 1h ImagePollingService stale-detect (5min/30s)
6.2.5 30min Верификация существующего SSE-канала (не имплементация)
6.2.6 1.5h Frontend hook на pending + SSE
6.2.7 1.25h Integration tests + production smoke

Между каждой подфазой — commit в git, auto-checks (типы + тесты), и code-validator критик. Если фаза 6.2.3 случайно сломала контракт Dispatcher из 6.2.2 — критик это поймает на этапе фазы.

(г) Что увидел читатель плана через три месяца

Спустя три месяца я открыл intent.md этой фичи в новой сессии. Я не пересматривал коммиты. Я прочёл четыре §-секции (что строим, зачем, что не делаем, цитаты автора) — и понял, что именно делает этот endpoint и почему он не падает на reload. Не пришлось гадать. Хороший intent.md отвечает на главный вопрос («что мы строим и почему») без помощи git blame.

TIP СОВЕТ

В вашем intent.md есть §-секция «§6 Прямые цитаты автора (сохранить дословно)»? Это эпиграф будущего себя. Через три месяца цитата «биллинг должен быть атомарным» в кавычках сильнее, чем абзац объяснения.

NOTE ВАЖНО

Дополнительный сильный сигнал «план хорошо написан»: возьми его и покажи новому коллеге, который не был в обсуждении. Он за 5 минут понимает, что фича делает, зачем, и какие альтернативы вы отвергали. Если ему понадобились объяснения через чат — план недописан.

Было (без плана, пишем «по обстановке»):

  • Промпт: «Сделай endpoint для генерации изображений в фоне».
  • Через час: endpoint работает, картинки генерируются. Деплой.
  • На следующий день: «А почему деньги списались а картинки нет?» — race condition.
  • Ещё через неделю: «А почему при reload страницы пропадает результат?» — нет persisted state.
  • Месяц патчинга, два инцидента в проде.

Стало (с планом):

  • /plan → 4 §-секции intent + 10 D-решений + 6 фаз с verification сценариями.
  • Phase 6.2.3 пишет endpoint — биллинг и persisted state встроены конструктивно, потому что они в D8 и D3.
  • Деплой через 8.25 часов активной работы.
  • Производственная фича в проде, без инцидентов.

4.3. Проект B × 2 — одна машинка, два разных применения

4.3. Проект B × 2 — одна машинка, два разных применения

ПРОЕКТ B × 2 — ОДНА МЕХАНИКА, ДВА ПРИМЕНЕНИЯDIRECT-АГЕНТINTERACTIVE LLM LOOP≤6 ИТЕРАЦИЙ6 ПАРАЛЛЕЛЬНЫХ КРИТИКОВCLIENT POLLING 2SJSONB CONTEXTI18N-WORKERAUTONOMOUS QUEUELISTEN/NOTIFYDRAIN QUEUE RECOVERYRETRY × 3TELEGRAM ALERTSОДИН И ТОТ ЖЕ ПЛАН-МЕХАНИЗМ

Тот же подход к плану мы применили в другом нашем проекте — на двух совершенно разных фичах. Это нужно, чтобы показать главную мысль: план не привязан к конкретному типу задачи. Скелет один — наполнение разное.

Первая фича — агент-помощник по рекламным кампаниям. Пользователь жмёт «оптимизируй мою кампанию», и в фоне ему 30-90 секунд работает агент: ходит по статистике, смотрит активные объявления, читает свежие алёрты, прикидывает несколько вариантов улучшения. Потом этот черновик прогоняется через шесть параллельных проверяющих. И тут важный момент: не все проверяющие — это дорогая модель. Половина проверок — простая арифметика и формат («бюджет не превышает лимит», «ключевые слова не дублируются», «структура объявления не сломана»). Это делается обычным кодом, без вызова ИИ. И только две проверки из шести — реально нужны ИИ-моделью: смысловая чистота текста и совпадение с тоном бренда. Дешёвых проверок гораздо больше, потому что они закрывают большую часть ошибок. Дорогие — только там, где без понимания смысла никак.

Когда черновик готов и проверен — он показывается пользователю на одобрение. Юзер смотрит, говорит «да», и тогда — и только тогда — план уходит в боевую рекламную систему. Двойной чек: один на этапе черновика, второй на этапе запуска. Это лежит в плане как отдельное решение, потому что без него легко словить ситуацию «агент сам себе отправил, юзер не успел остановить».

Вторая фича — ночной автоперевод названий. На сайте есть тысячи названий направлений, районов, имён — на русском. Для англоязычных пользователей всё это нужно перевести. Решили не нагружать редактора и не звать живого переводчика, а делать автоматически. Никакого участия пользователя: что-то поменялось в источнике — система сама поставила задачу в очередь, ночью обработала, утром перевод уже на сайте.

Тут самые интересные неочевидные тонкости. Что если одна и та же задача случайно встанет в очередь дважды? Двойной перевод, двойная оплата. Это решается «эксклюзивным захватом» — задача из очереди забирается так, чтобы другой работник её точно не подхватил. Что если сервер посреди ночи перезапустился? Половина задач не доделана. Это решается «доуборкой при старте» — когда сервис стартует, он первым делом обрабатывает всё, что зависло. Что если перевод трижды подряд упал? Помечаем как «не получилось», шлём админу уведомление в Телеграм, чтобы он посмотрел руками.

Совершенно разные задачи. Одна — интерактивная, с участием человека, с короткими паузами на одобрение. Вторая — ночная, без человека, чисто фоновая. Но обе уложились в один и тот же скелет плана: что строим, какие правила зафиксировали ДО кода, на сколько этапов разбили, как проверять. Меняются конкретные решения внутри — не меняется скелет.

Чтобы показать, что workflow /plan+/work универсальный и не привязан к доменам, разберём две разные фичи в другом нашем проекте (далее «проект B»). Обе — production. Обе используют тот же план-механизм. Но это два разных архитектурных шаблона.

Кейс A: Direct-агент для аналитики рекламных кампаний (interactive LLM-loop)

Фича оптимизирует рекламные кампании. Пользователь нажимает «оптимизируй», агент ходит по контексту (API рекламной системы, метрики аналитики, статистика запросов, активные алёрты) через несколько LLM-итераций, генерирует несколько вариантов плана, прогоняет их через 6 параллельных критиков, возвращается с черновиком.

Архитектура:

  • Long-running: ≤6 итераций Claude Sonnet 4.6 + ≤5 enrichment-tool вызовов + ≤2 user clarification раундов = 30-90 секунд end-to-end.
  • Persisted state: таблица direct_builder_drafts с колонками plan JSONB, critics JSONB, created_yandex_ids JSONB, error_message TEXT. Статус-машина из 9 состояний: drafting → critics_running → awaiting_approve_1 → creating → awaiting_approve_2 → launching → launched (плюс терминальные cancelled и failed). Двойной approval-gate потому что план сначала генерируется как чёрновик, потом одобряется юзером и переотправляется в боевую систему рекламы — нужны два независимых чека юзером.
  • Polling: клиент опрашивает каждые 2 сек, sticky-scroll heuristic чтобы не пинать UI на нон-терминальных статусах.
  • 6 параллельных критиков (verified в lib/direct/agents/critics/index.ts): wordstat / budget / copy / negative / structure / brand_purity. Из них copy.ts использует Claude Sonnet 4.6, brand-purity.ts использует Claude Haiku 4.5 для семантики бренда, остальные четыре — детерминированная валидация без LLM-вызова (бюджеты, негативные ключи по паттернам, структура объявлений, статистика запросов). Это важно — не каждый критик нужен дорогой моделью, дешёвые heuristic'и закрывают большую часть проверок.
  • Resilience: prompt caching на стабильный системный префикс (значительная экономия input-токенов от turn 2), network drop recovery с toast'ами на 0/401/403/409/5xx, loadDraft() при потере response mid-transmission.

29 sequential PR'ов в диапазоне #228-#256 демонстрируют фазированный rollout: каждый добавляет layer валидации (L0 Zod → L1 business rules → L1.5 data sufficiency → L2 LLM critic fail-open).

Кейс B: i18n-worker для автоперевода интерфейсного контента (autonomous queue)

Фича переводит названия направлений, районов, поля профилей с RU на EN автоматически. Полностью без участия юзера — DB-триггер на изменение source-таблицы → запись в очередь → worker подхватывает → переводит → пишет в таблицу переводов.

Архитектура (verified против scripts/i18n-translation-worker.ts):

  • Long-running: background systemd-сервис, batch processing задач из очереди.
  • Returned control: DB-trigger enqueue не блокирует основной поток приложения.
  • Persisted state: dedicated queue table i18n_translation_queue (migration 058), статусы (pending → processing → done | failed), retry counter.
  • Coordination: PostgreSQL LISTEN/NOTIFY на канал i18n_translate. Trigger в schema посылает pg_notify() на insert/update.
  • Atomic task claim: SELECT ... FOR UPDATE SKIP LOCKED чтобы несколько worker'ов не подхватили один и тот же job. Это важный трюк, который без плана легко забыть и получить duplicate translations + double-charge.
  • Recovery: drainQueue() запускается на старте сервиса — обрабатывает всё, что застряло после рестарта.
  • Retry: MAX_ATTEMPTS = 3. После трёх попыток статус становится failed, отправляется Telegram-алёрт.
  • Graceful shutdown: 30 секунд таймаут на завершение in-flight задач, потом process exit → systemd рестартует.
  • Model: Claude Sonnet 4.6 (claude-3-5-sonnet-4-6 в anthropic.messages.create). Изначально планировалось взять Haiku ради экономии, но качество перевода на доменных терминах (направления, методики, имена преподавателей) — критично, и Sonnet даёт заметно меньше ошибок согласования. Это решение через D-пункт в плане: «качество перевода доменной лексики выше cost-optimization». Будь иначе — клиент с большим объёмом контента получит «фриформ»-английский, который потом руками чистить дороже чем выиграли на токенах.
  • Glossary: 117 терминов в lib/translation/domain-glossary.ts (30 стилей + 29 поз + 22 концепции + 15 доменных терминов). Подмешивается в каждый промпт перевода для стабильности терминологии.

Почему оба важны

Direct-агент — это interactive LLM workflow с multi-step reasoning + user-driven approval gates. i18n-worker — autonomous queue worker без user interaction. Это два разных шаблона одного и того же архитектурного паттерна (long-running operation → persisted state → recovery → cost-tracking). Workflow /plan+/work одинаково ложится на оба.

УПРАЖНЕНИЕ · 5 МИН

Упражнение: у тебя три кандидата на длинную задачу: (а) batch обработка картинок, (б) interactive AI-помощник для написания постов, (в) автоматический ночной reconciliation платежей. Какие из них «ложатся» на план-паттерн, и какие — нет?

Ответ

Все три ложатся, но разными ветвями:

  • (а) batch — autonomous queue (паттерн i18n-worker'а).
  • (б) interactive AI-помощник — interactive LLM-loop (паттерн Direct-агента).
  • (в) ночной reconciliation — autonomous queue, но без юзера и с критичностью — план должен дополнительно фиксировать D-решения про идемпотентность и retry-on-partial-failure.

Если у вас все три есть — /plan ложится одинаково, меняются только D-решения внутри.

4.4. Делегирование фаз и --auto режим

4.4. Делегирование фаз и --auto режим

ДЕЛЕГИРОВАНИЕ АГЕНТОВCLAUDE LOCALОркестратор, кодGEMINIВизуалы, генерацияGLMText reviewKIMIVerstka review
ЦИКЛ ФАЗЫTASKAUTO-CHECKS3 CRITICSMANUAL VERIFCOMMITVALIDATKIMIGLM
СХЕМА 05 / ЦИКЛ ФАЗЫ

Когда задача длинная — часа три-четыре активной работы агента и больше — встаёт вопрос: всё ли тащит на себе один и тот же помощник, или можно подключить ещё кого-то.

Технически можно подключить других AI-помощников от других производителей. Это не обязательная часть подхода, а опциональное усиление. У каждого помощника есть свои сильные стороны: один лучше пишет тексты, другой лучше делает картинки и понимает визуальные референсы, третий — другая голова, видит противоречия, которые ты сам не замечаешь, четвёртый умеет проверять, как сайт реально выглядит на телефоне.

На разработческих задачах это выглядит так: основной помощник пишет код и оркестрирует всё, отдельный помощник делает картинки и диаграммы, ещё один читает финальный результат «свежим глазом» и ловит логические дыры, ещё один проверяет вёрстку на мобильнике и десктопе. Четыре головы вместо одной — но каждая занята своим участком.

Главный фокус всей этой схемы в одном: каждый из помощников получает на вход тот же план. Тот же замысел, тот же список решений, те же запреты. Поэтому они не расходятся между собой и не пишут «каждый своё». У них общий источник правды — папка плана.

Параллельно можно запускать только те этапы, которые не пересекаются по файлам. Текст и картинки можно делать параллельно (разные файлы) — экономит часа два. Текст и проверку готового текста параллельно делать нельзя (нужен сначала текст, потом проверка).

Важная оговорка: всё это — опция, не обязаловка. Можно прекрасно работать на одном помощнике от начала до конца. Подход «план + этапы» не зависит от того, сколько у тебя AI-моделей в кармане.

И последняя деталь — про режим «работай до конца сам». Когда ты доверяешь помощнику пройти весь план самостоятельно, без твоих кликов между этапами, у него есть встроенные «стоп-сигналы»: если на каком-то этапе провалилась авто-проверка, если внешний рецензент нашёл серьёзный косяк, если контекст разговора стал слишком большим, или если ты сам ему в чат написал новое правило по ходу дела — помощник останавливается и ждёт тебя. Это и есть страховка от того, что он молча уехал не туда.

В большом плане (8-12 часов работы, 7+ фаз) --auto ставит вопрос: всё ли исполняет одна модель Claude?

Не обязательно — можно подключить других агентов к конкретным фазам через MCP-делегацию или CLI-вызовы. Это опциональная архитектура, не часть базового /plan + /work. Конкретно эту публикацию я собирал так:

  • Claude local — фазы research/text-writing/orchestration/deploy. Текст intent-critical, не делегирую.
  • Gemini (через mcp__gemini__*) — фаза визуального дизайна SVG-диаграмм. Большой контекст + multi-modal — он лучше принимает референс-картинку и стайл-гайд.
  • GLM (через mcp__glm__*) — фаза логического ревью текста. Внешний глаз: ловит противоречия и дубликаты, которые автор уже не видит.
  • Kimi (через CLI kimi --print) — фаза e2e verstka review mobile + desktop. Опционально применяет CSS-фиксы.

Это специфика моей сессии, а не универсальный паттерн /work. У вас может быть один Claude на всё, могут быть свои делегаты, может вообще не быть external-моделей — base workflow /plan + /work от этого не зависит.

Что важно для делегации: каждый external-агент **получает на вход тот же intent.md + decisions.md + constraints.md**, что и main-Claude. Это и есть та причина почему делегирование работает — у всех агентов один источник правды.

Параллельные группы (если делегируете):

  • Параллелить можно фазы у которых нет общих Touches (модифицируемых файлов) и нет Dependencies друг от друга.
  • В моём случае фазы 2 (текст) и 3 (визуалы) параллельны — экономит ~2 часа.

Stop-conditions --auto:

  • Auto-check провалился (типы, тесты).
  • Critic-pass провалился (build/intent/code).
  • Контекст ≥ 70%.
  • Прошло 5 фаз подряд (защита от тихого drift).
  • Юзер ввёл новый constraint в чат (constraint emergency rule).

Без team strategy (всё на Claude local):

  • Phase 2 (draft v1) 2.5h + Phase 3 (визуалы) 2h последовательно = 4.5h на эти две фазы.
  • Контекстное окно растёт линейно, на 5-й фазе уже ~70% заполнено.
  • Шанс на drift возрастает с каждой фазой.

С team strategy (Gemini подключён к визуалам, GLM к ревью, Kimi к вёрстке):

  • Phase 2 и Phase 3 параллельно = 2.5h (вместо 4.5h).
  • Каждый делегат имеет чистый контекст под свою фазу.
  • Главный Claude сохраняет фокус на оркестрации + intent-critical задачах.
  • Экономия ~2 часов + меньше шансов drift'а.

4.5. Автономность как побочный эффект

«такой подход позволяет работать по задачам более автономно и агенту проще самостоятельно принимать решения» — главный мотив выпуска, дословно от автора.

4.5. Автономность как побочный эффект

«такой подход позволяет работать по задачам более автономно и агенту проще самостоятельно принимать решения» — главный мотив выпуска, дословно от автора.

СВОД: 9 ФАЗ ПЛАНА КАК ТАЙМЛАЙНRESEARCHDESIGNSCAFFOLDCORE_LOGICEDGE_CASESDB_SCHEMATESTSDOCSDEPLOY

Главный неожиданный эффект всей этой схемы — даже не качество кода. Качество кода — это следствие. Главное в другом: агент перестаёт переспрашивать.

Когда замысел, словарь, решения и запреты лежат в файлах, у помощника есть критерии правильности на каждый локальный вопрос. Не нужно перечитывать чат двухдневной давности и догадываться, что имелось в виду. Ответ на «как нам правильно» лежит на одной из шести полок шкафа.

Это меняет три вещи в работе.

Первое. Длинные задачи на четыре часа и больше становится не страшно отдавать. До плана так не делали — на третьем часу агент начинал «уезжать в овраг», делать «вообще не то». С планом этого не происходит: между этапами стоят промежуточные проверки, и замысел в файлах не даёт уехать от темы.

Второе. Можно подключить несколько помощников параллельно — текст пишет один, картинки делает другой, проверяет третий. Они не расходятся между собой, потому что у всех на руках один и тот же план как источник правды. Не нужно «вручную передавать контекст из диалога в диалог».

Третье. Появляется реалистичный сценарий «работай до утра» — для разработки. Уходишь спать, говоришь помощнику: иди по плану от первого этапа до последнего сам. Утром встаёшь — фича готова, и она соответствует замыслу. Это работает на коде с понятным контрактом. На авторском тексте — нет, по причинам, разобранным в финале.

Автономность тут означает не «AI сам решает что делать» — это была бы лотерея. А «AI сам решает локальные вопросы внутри явного плана» — это уже инженерный процесс.

Самая интересная часть workflow'а — даже не качество кода. Качество кода — следствие. Главный эффект: агент перестаёт переспрашивать.

Когда замысел зафиксирован в intent.md, словарь в glossary.md, решения в decisions.md, ограничения в constraints.md — у агента есть критерии правильности на каждое локальное решение. Не нужно перечитывать чат двухдневной давности, не нужно догадываться, что имелось в виду.

Это меняет три вещи:

  1. Длинные задачи (4+ часа активной работы) становятся делегируемыми. До плана: на 3-м часу агент начинает делать «не то». С планом: критик-pass между фазами ловит drift, а замысел в файлах не даёт уехать в овраг.
  1. Многоагентные пайплайны работают. Когда Gemini делает визуалы, а Claude пишет текст параллельно — оба читают один intent.md. Не нужно «передавать контекст» через диалог.
  1. /work --auto через ночь — реалистичный сценарий для разработки. Когда задача — реализация фичи с понятным контрактом (API + БД + UI), /work --auto через ночь даёт production-ready код. С фоновой генерацией в проекте A это подтверждено: за неделю после merge ноль hot-fix коммитов в той фиче. На задачах принципиально другого типа (нарратив, копирайтинг, авторская статья) тот же workflow даёт куда хуже — в финале расскажу почему.
CAREFUL ВНИМАНИЕ

Автономность ≠ «AI сам решает что делать». Это «AI сам решает локальные вопросы внутри явного плана». Разница огромная. Без плана автономный агент — это лотерея. С планом — инженерный пайплайн.

ОПАСНОСТЬ ИНЦИДЕНТ-LEVEL

Один из принципиальных моментов автономного запуска — constraint emergency rule. Если посреди работы /work --auto пользователь в чате говорит «не трогай X», агент обязан: (1) дописать запрет в constraints.md секцию Live, (2) ответить «constraint logged: <restatement>», (3) и только потом продолжить. Каждая следующая фаза перечитывает constraints.md. Без этого правила длинные сессии забывают директивы 30-минутной давности.

УПРАЖНЕНИЕ · 5 МИН

Упражнение: вы запустили /work --auto на 7 фаз. Через два часа открываете чат и видите — агент идёт уверенно, фаза 4 в работе. Хотите попросить: «всё что трогает базу делай через transactions». Куда писать?

Ответ

Не в чат напрямую (агент может пропустить директиву посреди работы). Скажи: «Запиши в constraints.md Live: всё что трогает базу — через transactions. Зачем: предыдущая фаза падала из-за race conditions. Применять: ко всем dml-операциям до конца плана. После этого продолжай фазу.»

Агент допишет в constraints.md секцию Live. Все следующие фазы прочитают это перед стартом. Это и есть constraint emergency rule в действии.

УПРАЖНЕНИЕ · 5 МИН

Упражнение: у тебя есть план на 8 фаз. На фазе 5 авто-чек ловит баг. Что делает /work --auto по умолчанию?

Ответ

Останавливается. Печатает diagnostic'у: какой именно auto-check провалился, какие файлы тронуты фазой, какой следующий шаг. Юзер может: (а) исправить руками и сказать «продолжай», (б) попросить агента «попробуй фикс», (в) откатить фазу и поправить план.

Без --auto — то же самое (даже строже: пауза на manual verification после каждой фазы). С --auto — только при провале auto-check или critic. Это и есть «stop-condition».

4.6. Цикл ревью и почему именно Kimi

На каждом этапе после написания кода — три отдельные проверки, в таком порядке:

  1. Автоматические тесты и проверки типов (build-grade). Самое быстрое и тупое: запускается команда «проверь типы», «прогони линтер», «прогони тесты». Если красное — фикс, повтор. Дорого ошибиться тут только за время.
  2. Проверка соответствия замыслу (intent-grade). Внешняя модель (другая, не та что писала код) читает: что мы решили в плане, что разрешено и что запрещено, какие термины использовать в коде, что должно лежать в этой фазе и не больше. Сверяет с реальным результатом этапа. Это ловит: «делал фоновую генерацию, забыл биллинг», «использовал отвергнутую альтернативу из decisions», «вышел за границы фазы и тронул лишнее».
  3. Проверка качества кода (code-grade). Та же модель, другой угол: нет ли заглушек вместо реализации (типа «всегда возвращает True»), реально ли работает алгоритм или это видимость, есть ли обработка ошибок на критичных путях, нет ли хардкода секретов, тесты реально что-то проверяют или просто «assert True».

Каждая проверка возвращает один из трёх вердиктов: «прошло», «нужны правки» (пауза, юзер решает), «провалилось» (откат коммита, фикс, перепроверка — до трёх попыток).

Не все три проверки запускаются на каждой фазе. Если фаза «переименование переменной» — нужны только тесты. Если «новая фича с биллингом» — все три. Уровень определяется по таблице рисков, привязан к фазе ещё на этапе планирования.

Почему внешняя модель — Kimi, а не тот же агент. Если автор плана и проверяющий — одна модель, она сама себе ставит вердикт. Это не проверка, это самоодобрение. Поэтому правило: проверяющий должен быть другой моделью, чем основной автор. Я выбрал Kimi K2.6 потому что он специально заточен под такие задачи (читать код, читать структуру проекта, давать структурированный вердикт), у него есть доступ к инструментам через которые он сам читает реальный код и реальные документы, а не верит на слово плану. Если в плане сказано «таблица содержит колонку X», Kimi реально открывает миграцию и проверяет — есть колонка или придумали. На моей памяти это ловило выдуманные сущности больше десятка раз.

Цикл ревью на этапе создания плана работает чуть по-другому: внешний проверяющий читает весь план целиком и до трёх раз возвращает «нужны правки» — пока не достигнет «готово к работе». Если после трёх циклов остался блокер — план не закрывается, я сажусь дорабатывать вручную. Если только мелкие замечания — я выбираю: продолжать циклы, принять с оговорками (записывается в файл, показывается в начале каждого /work), или прерваться и доработать руками.

4.6. Цикл ревью и почему именно Kimi

На каждой фазе цикл проверок устроен так:

  • 4d. Build-gradecode-validator subagent (read-only), spawned после auto-checks. JSON-vердикт pass/fail. Этот критик намеренно ограничен «build/type/import errors, structural mismatches между Task и implementation, missing files, files modified без авторизации Task». Не оценивает business logic. Max 3 attempts.
  • 4f. Intent-gradekimi-review.sh phase_intent <N> <plan_dir>. Conditional по полю Review фазы (запускается только если Review ∈ {intent, both, both+cumulative}). Категории: drift / term_misuse / constraint_violation / scope_creep / incomplete_task. Verdict: pass / concern (пауза, показ issues, юзер решает) / fail (revert commit, fix, re-commit, re-run; max 3 attempts).
  • 4g. Code-gradekimi-review.sh phase_code <N> <plan_dir>. Conditional по Review (запускается если Review ∈ {code, both, both+cumulative}). Проверяет 6 категорий: incomplete_impl (заглушки), fake_logic (видимость работы), error_handling, quality, security, test_quality.
  • 4g-cum. Cumulative drift check — только Review=both+cumulative или каждые 3 фазы в --auto. Смотрит весь накопленный diff branch (не только текущую фазу). Vердикт: on_track / drift_concern / drift_critical.

Каждый из 4f/4g/4g-cum — это отдельный вызов Kimi с отдельным system-промптом. Kimi не один общий ревьюер с большим контекстом, а четыре специализированных режима. Каждый получает только релевантные срезы: для phase_intent — §-секции intent, D-decisions, glossary-термины из References фазы + полный constraints + git diff фазы. Не «весь план целиком», а sliced по anchor'ам.

Шесть режимов kimi-review.py

РежимКогдаVerdictКатегории
plan_d Step D в /plan, blocking review перед началом работы ready_for_work / revise coverage / drift / decisions / glossary / references / constraints / verification / review_mismatch
phase_intent 4f, после commit фазы при Review ∈ {intent, both, both+cumulative} pass / concern / fail drift / term_misuse / constraint_violation / scope_creep / incomplete_task
phase_code 4g, после commit фазы при Review ∈ {code, both, both+cumulative} pass / concern / fail incomplete_impl / fake_logic / error_handling / quality / security / test_quality
intent_update После /intent (новые §-секции в intent.md) compatible / needs_correction conflicts_with_decisions / conflicts_with_done_phases / new_decisions_needed / suggested_correction_phases
cumulative Каждые 3 фазы в --auto или при Review=both+cumulative on_track / drift_concern / drift_critical drift_signals по всему branch diff
product_summary После plan-completion (все фазы done) markdown report замысел / реализовано / не реализовано / иначе / decisions / constraints / как проверить / риски / рекомендация

Dual-backend (CLI с MCP vs HTTP fallback)

Каждый режим запускается через одну функцию kimi_agent_cli или kimi_chat:

  • CLI backend (default): kimi --print --final-message-only --yolo -w <cwd> -p <combined-prompt>. Kimi работает как агент с полным MCP-доступом (codegraph, serena, context7, playwright, gitlab). Реально читает intent.md/decisions.md/git diff/код через инструменты, не через prompt-stuffing. Это критично — Kimi ловит выдуманные сущности через codegraph_query, проверяет API библиотек через context7, находит точные места использования символов через serena. Timeout 900s.
  • HTTP backend (fallback): plain POST к ${LLM_BASE_URL}/chat/completions. Без tools, без MCP. Используется когда kimi binary недоступен. Timeout 90s. thinking: disabled — review-задача с фиксированной JSON-схемой, thinking-режим съест max_tokens до того как модель дойдёт до verdict (известный gotcha).

Backend выбирается автоматически: если /root/.local/bin/kimi и /root/.kimi/mcp.json существуют — CLI, иначе HTTP. Override через KIMI_REVIEW_BACKEND=cli|http.

Selective context loading в phase_intent/phase_code

Не передаются ВСЕ intent/decisions/glossary в Kimi. Из plan.md вытаскивается блок Phase N (через regex), парсятся References (bare anchors, splitter — только запятая, многословные термины как один токен, аннотации в скобках типа §3 (partially) auto-stripped). По якорям через extract_section достаются только нужные секции:

refs = parse_phase_refs(plan_md, phase_n)
intent_sections = "\n\n".join(extract_section(intent, a) for a in refs["intent"])
decision_sections = "\n\n".join(extract_section(decisions, a) for a in refs["decisions"])
glossary_sections = "\n\n".join(extract_section(glossary, a) for a in refs["glossary"])
phase_block = extract_phase(plan_md, phase_n)
diff = git_diff_for_phase(plan_dir, phase_n)

Без этого slicing-а планы из 1000+ строк intent уезжают за context window каждой следующей фазы.

Почему именно Kimi (без цен, по архитектуре)

  1. Decision tree в моём skill kimi-integration прямо: «coding-агент с tool calls + reasoning» → kimi-k2.6. Plan-review это ровно «coding-agent с tool calls + reasoning», не bulk, не realtime web, не vision, не critical customer service.
  2. Reviewer должен быть другой моделью, чем primary author. Иначе тот же агент что писал план — себе же ставит verdict. Independence нужна архитектурно, не «потому что Kimi лучше». Если бы я писал Kimi'ем — ревьюером был бы Claude.
  3. Tool calls + MCP надёжно — Kimi через CLI реально читает код/диф/доки через codegraph/serena/context7, не догадывается на основе текста плана.
  4. Reliability gap некритичен — известный ~13pp gap vs Claude в TAU-bench (customer-service) для plan-review не релевантен: это batch-задача с фиксированной JSON-схемой output, retry до 3 раз, failure mode — переспросить.
  5. Long-horizon stability — для длинных --auto прогонов (10+ фаз, каждая делает 5-15 tool calls) Kimi стабильнее на 200+ tool calls без drift.
  6. Model preferences моего проекта: GPT/Grok/Codex выпилены отдельным правилом. Остаются Claude (primary author), Gemini (вне coding-agent скоупа), DeepSeek (bulk, недостаточно reasoning), Kimi.
NOTE ДЕТАЛЬ

В CLI-режиме Kimi-промпт собирается с явным output protocol: «Use tools freely while investigating. When you have your verdict, output ONLY the JSON object specified in SYSTEM ROLE. Do not wrap in markdown fences. Do not add commentary before or after.» Если модель всё же вернёт ```json {...} ```strip_json_fences() снимает обёртку и парсит как valid JSON. Это страховка от bilingual posture которая может вылезти на сложных промптах.


05
B05ПРОМПТЫ Промпты для копипаста в свой Claude Code
P01

Создать папку плана для своей фичи

Скажи агенту вот так:

Запусти /plan «<краткое описание моей фичи в одну строку>». 
Когда задашь четыре вопроса по замыслу, я отвечу. 
Не пиши код пока план не закрыт.

После ответов на четыре вопроса увидишь готовую папку .claude/memory/plans/<slug>/ с шестью файлами. Открой intent.md, прочитай — узнаёшь свой замысел? Если да: переходи к P02. Если нет: скажи агенту «поправь §3, я имел в виду X», и он перепишет.

P01

Создать папку плана для своей фичи (Инженерный)

# В Claude Code:
/plan "feature description in one line"

# /plan процедура:
# 1. branch guard → claude/plan-<slug>
# 2. Step 2 (context restore from chat) → drafts intent/glossary/decisions/constraints
# 3. Step 3 (4 blocking questions) → wait for user
# 4. Step 4 (write plan.md + verification.md + initial graph)
# 5. Step D (Kimi blocking review, cycle until ready_for_work)
P02

Шаблон intent.md для своей фичи

В intent.md после /plan уже есть скелет. Если что-то нужно поправить — скажи агенту:

В intent.md §3 я не вижу записи про то, что фича должна работать на reload страницы. 
Дополни §3 этим требованием. Не трогай другие секции.
P02

Шаблон intent.md для своей фичи (Спецификация)

Минимум для intent.md:

## §1 What we're building
## §2 Why (failure modes addressed)
## §3 What we are NOT doing (boundaries)
## §4 Story-hook / main case (if applicable)
## §5 Architectural emphasis / cross-cutting concerns
## §6 Direct quotes from product owner (verbatim)
## §7 Visual / UX language (if applicable)
## §8 Out of scope (link to out-of-scope.md)
P03

Записать D-решения с альтернативами

Когда обсуждаете с агентом, как делать какую-то часть фичи, скажи:

Запиши это решение в decisions.md как D<номер>. 
Включи отвергнутые альтернативы с конкретной причиной отказа. 
Не «не подошло», а «не масштабируется до X пользователей» или «противоречит §intent Y».
P03

Записать D-решения с альтернативами (Формат)

Формат D-решения:

## D<N>. <Заголовок>

**Решение**: <одно предложение>.

**Альтернативы и причина отказа**:
- <alt 1> — <конкретная причина>.
- <alt 2> — <конкретная причина>.

**Зависит от**: D<M>, D<K>.

**Влияет на фазы**: будет проставлено plan-index'ом.
P04

Initial constraints — incident-level правила

Запреты, нарушение которых = инцидент. Скажи агенту:

В constraints.md в секцию Initial добавь:
- Не использовать модель X (она ToS-несовместима для нашего use case).
- Не упоминать названия конкурентов в текстовых выходах.
- Не менять схему БД без отдельного D-решения.
P05

Запустить /work

Запусти /work и пройди Phase 1. После manual verification дождись от меня подтверждения, 
перед тем как стартовать Phase 2.

Когда несколько фаз отработали, переходи на:

Запусти /work --auto. Stop-conditions по умолчанию. 
Если упадёт auto-check или critic — пауза с описанием проблемы.
P06

Делегировать визуалы Gemini (engineer)

# Через MCP:
mcp__gemini__gemini_start({
  task: "Read /opt/<project>/.author-drafts/<slug>/visual-reference.md and facts-extracted.json. 
  Produce 5-9 inline SVG diagrams in <style>. Write to _assets/. 
  Run xmllint --noout to validate. Report N files + total size when done.",
  cwd: "/opt/<project>",
  approval_mode: "yolo"
})
# → job_id

# Poll periodically:
mcp__gemini__gemini_status(job_id)
# → status: running | done | failed

# When done:
mcp__gemini__gemini_collect(job_id, tail_only=true)
# → result text
P07

GLM ревью логики текста

mcp__glm__glm_start({
  task: "Review /opt/<project>/platform/dist/author/<slug>/index.html (built HTML).
  
  Categories to check:
  1. Логические противоречия (особенно между концептуальным блоком и блоком с промптами).
  2. Расположение смыслов (мост между блоками работает?).
  3. Дублирование между vibe-coder и engineer режимами (упражнения часто дословно совпадают).
  4. Терминология (где термин использован без объяснения).
  5. \"Зачем\" не объяснено (где даётся команда без обоснования).
  6. Сравнение версий (час vs день, 4 файла vs 0 файлов — противоречия в фактах).
  
  Format:
  ## Старые проблемы (с пометкой закрыто/частично/осталось)
  - ...
  ## Новые проблемы
  - ...
  
  НЕ предлагай конкретные формулировки правок — только диагноз.",
  cwd: "/opt/<project>"
})
P08

Kimi e2e verstka review

# Capture playwright snapshots first:
# 5 viewports: 360, 414, 720, 1024, 1440 + 2 mode-varianten 1440-vibe / 1440-engineer

kimi --print -m kimi-k2.6 <<EOF
Ты ревьюишь вёрстку production-публикации авторской колонки.
URL: https://<our domain>/<path>/
HTML: /opt/<project>/platform/dist/<...>/index.html
CSS: /opt/<project>/platform/src/pages/<...>/_styles/publication.css
Screenshots: /opt/<project>/.author-drafts/<slug>/screenshots/*.png

Проверь по чеклисту mobile-аудита (см. .claude/skills/author-publication/SKILL.md «Типичные проблемы и фиксы»):
- Watermark не выходит за viewport
- HTML-таблицы помещаются  
- SVG не сжимаются (текст 11px не должен схлопываться)
- Кнопки переключателя mode-gate не обрезаются
- Длинные строки промптов wrap'ятся
- Свайп очевиден на диаграммах и pre-блоках
- Опись промптов 4 колонки на desktop, 1 на mobile
- Якоря промптов работают через JS перехватчик
- Маскот-такса видна минимум на 3 пинах
- Vibe-mode и engineer-mode оба чистые после переключения

Format:
- Блокеры (нельзя публиковать): список с CSS-патчем
- Major (рекомендую исправить): список
- Minor (косметика): список
- OK (всё хорошо): список того что прошло

Если есть блокеры — применяй фиксы напрямую в publication.css (per-publication блок).
EOF

ФИНАЛ. ГДЕ ЭТОТ WORKFLOW СРАБАТЫВАЕТ, А ГДЕ НЕТ

Эту публикацию я попытался собрать тем же /plan + /work, про который она написана. Получилось плохо — пришлось переделывать. Полезно проговорить почему, потому что это про границы метода.

Что сработало плохо. Research-фаза опиралась на плановые документы фичи (intent.md, decisions.md) вместо реального кода — и в текст попали утверждения, которые при сверке с кодом разъехались с реальностью: модель Sonnet перепутана с Haiku, выдуманы колонки в схеме БД, состояния workflow упрощены до неузнаваемости. Дизайн страницы оказался копией предыдущего выпуска без какой-либо адаптации под заявленный визуальный аромат — потому что соответствующий skill (frontend-design) не был активирован в пайплайне. Тон в нескольких местах съехал в маркетинговое «это не магия / план это лечит» — кальки, которые автор статей серии не пишет.

Что сработало хорошо. Структура плана не дала уйти в овраг: после критики читателя удалось пройти аудит по чек-листу (грep'ом по тексту против реального кода в двух проектах), собрать issue-list с severity, переделать только сломанное — за один проход. Папка .claude/memory/plans/vypusk-005-plan-i-work/ с её intent/decisions/constraints/verification осталась корректной — и переписка ушла поверх неё, не сломав каркас.

Где этот workflow реально хорош. Production-разработка с понятным контрактом: API + миграция + UI + биллинг. Кейс проекта A (фоновая генерация) тому доказательство — за неделю после merge ноль hot-fix-коммитов в той фиче. Кейс проекта B × 2 — два разных стека, тот же скелет плана, обе фичи в проде без починок «после факта». Workflow хорош ровно там, где «правильно» можно описать списком D-решений и проверить аудитом кода.

Где он подводит. На задачах принципиально другого типа: нарратив, авторский тон, фактчек невидимых нюансов, дизайн-вкус. Эти штуки трудно зафиксировать как D-решение, а если зафиксировал — критики между фазами их не ловят, потому что «маркетинговое клише» или «выдуманная колонка» не отлавливаются автотестами. Тут нужен другой класс quality gate — внешний редактор-человек, который пройдётся по тексту и выкинет «это не магия», прежде чем оно попадёт в прод.

Итог. /plan и /work — инструмент для разработки, не для статей. На разработке снимает забытый биллинг и архитектурный дрейф. На статьях — даёт каркас, но не заменяет редактуру. Применяйте по назначению.

★ ВЫПУСК ★ ОПУБЛИКОВАН ★0052026-05-19

СЕРИЯ 005 · «ПИШЕМ РАБОЧИЙ КОД С ПЕРВОГО РАЗА» · ai.arckep.ru / author / plan-i-work

// Обсуждение

Можно писать анонимно. Укажите email, чтобы получать уведомления об ответах.