Все записи
6 мин

STC + Guardian MCP: как я заставил AI-агента работать по процессу

AIАвтоматизация

Claude Code пишет код быстрее меня. Тесты, рефакторинг, ревью. Но если дать ему задачу и отойти, через час получишь 2000 строк без единого теста, три файла которые не компилируются и коммит «fix stuff». Мощность без процесса — это хаос с ускорением.

Несколько недель я превращал этот хаос в конвейер. Получилось две вещи: STC (формализованный процесс разработки) и Guardian MCP (сервер, который следит за соблюдением процесса автоматически). Ниже — как это работает и зачем вообще нужно.

Проблема: мощность без дисциплины

Когда я начал работать с Claude Code, первые дни были эйфорией. Даёшь задачу — получаешь код. Быстро. Много. Работает... иногда.

Проблемы начинались когда задача была больше одного файла. Агент делал три вещи одновременно: менял модель данных, переписывал API и правил фронтенд. Без тестов. Без проверки. Потом коммитил всё одним куском. Если что-то ломалось, откатывать приходилось всё.

Ещё хуже: он пропускал шаги. Говоришь «напиши тесты сначала», а он пишет три кейса из двадцати и сразу за код. Говоришь «проверь безопасность», отвечает «проверил, всё ок» и идёт дальше. Формально выполнил. По факту нет.

Это не проблема конкретного инструмента. Любой AI-агент без ограничений ведёт себя так же. Он оптимизирует на «быстрее закончить задачу», а не на «сделать правильно». Тесты замедляют, проверка замедляет, разбивка на шаги замедляет. Без внешнего контроля агент всегда выберет короткий путь.

STC: Spec-Test-Code

Расшифровывается просто: Spec-Test-Code. Перед тем как писать код — напиши спецификацию. Перед тем как писать код — напиши тесты. Только потом код.

Но за тремя буквами стоят семь фаз с жёстким порядком. Пропустить нельзя (ну, почти: можно skip с явным обоснованием). Перейти к следующей можно только закончив текущую.

Семь фаз: от спеки до коммита

Процесс делится на две части. Первая выполняется один раз на фичу:

Specify. Пишу спецификацию. Что делаем, зачем, какие ограничения, какой результат. Спека живёт в `.claude/specs/feature.md`. Это не формальность, а контракт между мной и агентом. Если в спеке не написано — этого не будет в коде. Написано криво — код будет кривой.

Clarify. Максимум два раунда вопросов по дырам в спеке. Агент читает документ и спрашивает: «А что если пользователь отправит пустую строку? А если API вернёт 429? А что с миграцией существующих данных?» Иногда вопросы тупые. Иногда ловят реальные дыры.

Plan. Декомпозиция на атомарные шаги. Не «сделай фичу», а «шаг 1: добавь модель в БД, шаг 2: напиши эндпоинт, шаг 3: добавь валидацию». Каждый шаг — пара предложений, 3-5 файлов максимум.

Опционально перед Plan можно запустить SCD Gate. Консилиум экспертов + дебаты по архитектурным решениям. Для сложных фич это спасает от ошибок проектирования.

Вторая часть повторяется на каждый атомарный шаг:

Test. Тесты из сценариев спеки. Запускаешь — они падают. Red. Так и должно быть.

Code. Агент пишет код. Тесты зеленеют. Green.

Verify. Три агента параллельно проверяют код (об этом ниже).

Commit. Только после Verify. Один шаг — один коммит.

Фича из 8 шагов — это 8 итераций Test-Code-Verify-Commit.

Атомарные шаги: никогда не делать всё целиком

Большая задача разбивается на куски, каждый из которых можно описать одним предложением. «Добавить модель Account с полями name, proxy, status.» «Написать endpoint POST /accounts с валидацией.» «Прикрутить warmup-скрипт к scheduler.»

Почему не сделать всё сразу? AI-агент на большой задаче теряет контекст. На третьем файле он забывает что решил на первом. На пятом начинает противоречить спеке. А ты не замечаешь, потому что diff на 800 строк невозможно нормально проверить.

Один шаг: 3-5 файлов, diff на 50-100 строк, проверка занимает минуту. Если что-то не так — откатить один шаг. Не весь день работы.

Guardian MCP: автоматический трекер

STC как набор правил в CLAUDE.md работал, но с дырами. Агент «забывал» вызвать проверку. Или перескакивал с Test сразу в Commit, минуя Verify. Или делал два шага подряд без фиксации между ними.

Guardian MCP — это MCP-сервер, который трекает процесс автоматически. Он знает текущее состояние и не даёт перейти дальше без выполнения условий.

  • Как это работает:
  • Начинаю фичу: `feature_register` создаёт трекер
  • Закончил этап: `phase_advance` проверяет условия и двигает дальше
  • Хочу пропустить: `phase_advance` + `skip_reason`. Можно, но причина зафиксирована
  • Перед коммитом: `verify_checklist` проверяет что проверка была

Каждый переход — это вызов `phase_advance`. Без него трекер не знает что ты продвинулся. Агент физически может зафиксировать код без Verify. Но нарушение зафиксируется в логе, и я это увижу.

`phase_status` в любой момент показывает где ты и что от тебя требуется. `session_log` хранит полную историю переходов.

Verify: три агента параллельно

Verify — самая важная часть процесса. Три специализированных агента запускаются параллельно:

@code-reviewer смотрит на качество кода. Дублирование, неиспользуемые импорты, нарушение типизации, логические ошибки. Не линтер. Именно ревью: «Тут ты обрабатываешь ошибку 404 но не 429, а API возвращает 429 при rate limit.»

@security-guard проверяет безопасность. Секреты в коде, SQL-инъекции, небезопасные зависимости, открытые порты. «В строке 47 ты конкатенируешь пользовательский ввод в SQL-запрос.» Такие вещи.

@spec-verifier сверяет код со спекой. Если в спеке написано «эндпоинт возвращает 201 при создании», а код возвращает 200 — он это поймает. Если спека говорит «retry 3 раза при таймауте», а retry нет — тоже.

Три фокуса, параллельный запуск. Результаты уходят в `verify_checklist`. Без результатов всех трёх фиксация не пройдёт.

Как это выглядит на практике: MAKO

MAKO — мой конвейер для автогенерации коротких видео. Подробности про сборку и этапы системы в отдельных постах. Тут про то, как STC и Guardian работали на практике.

Stage 0 (прототип). 8 шагов. Спека на pipeline из 8 модулей. 73 теста по моим сценариям, ноль написаны мной вручную. Каждый шаг: тесты красные → код → тесты зелёные → проверка → фиксация.

Stage 1 (генератор контента). 11 шагов. Перед планом прошли дебаты Claude vs GPT по архитектуре Prompt Contract. GPT победил в вопросе разделения промптов на слои. Агент реализовал решение GPT.

Моя роль на каждом этапе: формулирую спеку, модерирую дебаты если есть спорные решения, принимаю решения, проверяю результат. Агент пишет код, тесты, реализует. Трекер не даёт пропустить шаги.

Масштаб из логов: 197 переходов между этапами, 52 проверки перед фиксацией, 8 тем дебатов (26 раундов суммарно), 9 спецификаций. Не «настроил и забыл». Живой процесс который работает каждый день.

Без STC Stage 1 выглядел бы так: «Перепиши генератор». Результат: один огромный кусок, без тестов, с парой багов которые всплывут через неделю. С STC: 11 маленьких фиксаций, каждая протестирована и проверена. Баги ловятся в Verify, а не на продакшене.

Медленно? Нет. Дорого ошибаться

Быстро сделать и потом неделю дебажить. Вот что медленно. STC добавляет 15-20 минут на шаг, но убирает часы дебага. На MAKO Stage 0 от первой строки до работающего конвейера прошло 2 дня. С тестами и проверками.

Почему не просто CLAUDE.md с правилами? Писал. Агент «забывает». Не со зла: у него нет состояния между вызовами. Guardian хранит состояние и напоминает. Разница между «правила написаны» и «правила enforced».

Итоги

  • AI-агент без процесса оптимизирует на скорость, а не на качество. Тесты, проверки, декомпозиция — всё это он будет пропускать если не заставить
  • STC (Spec-Test-Code): семь фаз. Specify, Clarify, Plan, Test, Code, Verify, Commit. Первые три на фичу, последние четыре на каждый шаг
  • Guardian MCP трекает процесс автоматически. `phase_advance` на каждом переходе, `verify_checklist` перед фиксацией
  • Verify = три агента параллельно: code-reviewer, security-guard, spec-verifier
  • На MAKO это дало 73 теста, 19 шагов, 3 этапа за 2 дня. Каждый шаг протестирован и проверен

Связанные посты: как собирал MAKO за 2 дня | 3 этапа через спеки и дебаты | AI-дебаты как метод | SCD: гибрид дебатов и консилиума