Claude Code /goal — официальный Ralph Loop от Anthropic, который за ночь спалил $200-план одному разработчику
11 мая Anthropic выкатила Claude Code v2.1.139 с командой /goal. Идея простая: пишешь условие завершения, агент пилит задачу turn за turn'ом, после каждого turn'а быстрая модель (Haiku по умолчанию) проверяет, выполнено ли условие. Если нет, Claude автоматически запускает следующий turn.
TL;DR:
/goalв Claude Code v2.1.139 — это session-scoped Stop hook с моделью-эвалюатором. Подходит для миграций, тест-фиксов, рефакторов с проверяемым end state. Не подходит для расплывчатых задач: один разработчик оставил/goalна ночь и проснулся с пустым $200-планом.
Через две недели картина такая. OpenAI шиппит ту же команду внутри Codex CLI и desktop-приложения. Nous Research встроил /goal в Hermes. Anthropic добавила её в Claude Code. Имя одинаковое, механика идентичная. Индустрия договорилась о стандарте для агента, который сам решает, когда задача закончена.
По сути это Ralph Loop Джеффри Хантли (while true bash-цикл вокруг агента), но в виде first-class команды.
Как это работает
Под капотом обычный prompt-based Stop hook на уровне сессии. Каждый раз когда Claude заканчивает turn, условие и текущий разговор уходят в маленькую быструю модель (по умолчанию Haiku). Та возвращает yes/no и короткое объяснение. На no Claude получает причину как guidance для следующего turn'а и продолжает. На yes goal сбрасывается, в транскрипте появляется запись.
Эвалюатор не вызывает тулы. Он видит только то, что Claude уже вывел в разговор. Если Claude гоняет npm test и output теста попадает в транскрипт, Haiku оценит результат. Если Claude просто скажет "тесты прошли", не запустив их, Haiku может поверить.
Этот нюанс важнее, чем кажется. К нему вернёмся в "Подводных камнях".
Базовый синтаксис
> /goal all tests in test/auth pass and the lint step is clean
Установка goal'а сразу запускает первый turn. Условие само работает как директива. Пока goal активен, в UI висит индикатор ◎ /goal active с таймером.
Управление:
/goalбез аргументов показывает состояние: условие, время работы, число turn'ов, token spend, последнюю причину от эвалюатора/goal clearснимает активный goal. Алиасы:stop,off,reset,none,cancel/clearстартует новый разговор и автоматически чистит goal
Условие до 4 000 символов. Бьющий по нервам момент: чтобы ограничить runaway, надо явно вписать turn limit в само условие.
/goal all tests in test/auth pass and the lint step is clean or stop after 20 turns
Никакого отдельного флага --max-turns нет. Claude сам репортит прогресс против этого clause, Haiku судит из контекста.
/goal, /loop, Stop hook, Auto mode
Из официальной таблицы Anthropic:
/goalзапускает следующий turn когда предыдущий закончен, останавливается когда модель подтверждает condition/loopзапускает следующий turn по таймеру (интервал от 1 минуты до часа), останавливается когда ты сам стопнешь или Claude решит что работа сделана- Stop hook фаерится после каждого turn'а, твой собственный скрипт или промпт решает что дальше
- Auto mode апрувит тул-коллы внутри одного turn'а, не стартует новый
/goal и Stop hook оба триггерятся после turn'а. Разница в том, что /goal это session-scoped шорткат для условия, а Stop hook живёт в settings.json и применяется ко всем сессиям. Эвалюатор у /goal всегда модель, у хука может быть детерминированный скрипт.
Auto mode и /goal дополняют друг друга. Auto убирает per-tool промпты, /goal убирает per-turn промпты. Можно совмещать.

Что реально работает, а что нет
Из таблицы FindSkill.ai с реальными condition'ами из первой недели после релиза:
- ✅
/goal turn this screenshot into a working app. Goal is reached once you tested every feature end to end in the browser(20 минут, готово) - ✅
/goal run full QA suite, fix failing tests, report results, поставлен на ночь (утром улучшенный код) - ❌
/goal a world where 'substrate, not model' is the obvious right axis for AI-assisted programming(два раза влип в "acknowledgement loop", сжёг session limits) - ❌ Goal с gap-analysis после 20-минутной swarm-сессии ("Task adherence was weak. Many gaps remained.")
Паттерн виден насквозь. Тугие верифицируемые output-anchored условия работают. Философские миссии жгут токены вхолостую.
Подводные камни
Нет жёсткого token cap. Этого нет в документации. Один разработчик оставил /goal на 14 часов в ночь и утром написал: "I burned through all my weekly tokens on a $200 account". Математика очевидна. Каждый turn это main-turn токены плюс маленький Haiku call. Haiku дешёвый. Main-turn нет. Loose condition, на который эвалюатор отвечает "ещё нет", может прокрутить 50, 100, 500 turn'ов прежде чем ты заметишь. В status panel виден spend, но автотормоза нет.
Acknowledgement loops. Самая частая фейл-мода первой недели. Condition достаточно расплывчат, чтобы Claude мог правдоподобно заявлять прогресс каждый turn без реального движения. Haiku отвечает "почти" каждый раз, Claude отвечает очередным "сделал ещё немного". Повторять до победы токенов. Фикс тот же, что и для costs: тугие верифицируемые end states плюс жёсткий turn cap в самом условии.
Эвалюатор не запускает команды. Это критично. Haiku читает только то, что Claude вывел в разговор. Если condition требует "tests pass", а Claude напишет "I think the tests pass" без реального запуска, эвалюатор может сказать "yes" и закрыть goal. Контрмера: писать condition так, чтобы он вынуждал Claude выкатить evidence в транскрипт. Не all tests pass, а npm test exits 0 and the output is in the transcript.
Каждый Stop re-invoke включает полный контекст. На длинных goal'ах токены раздуваются нелинейно. Каждая повторная инвокация тащит за собой всё, что было раньше. /compact помогает, но это надо делать руками либо через отдельный hook.
Кривое подружение с XML-промптами. На Reddit жалуются, что комбинировать /goal с детальными XML-промптами неудобно из-за character limit (4 000) и того, что goal сразу запускается на выполнение, не давая вставить большой контекст.
Альтернативы
-
jthack/claude-goal — community-плагин, появившийся ДО официального
/goal. Codex-style continuation, persistent goal state в локальном файле, контролы/goal pause/resume/status, soft token budgets через--tokens 250K, completion-audit guardrails. По умолчанию runaway guard разрешает до 500 Stop-hook continuations, переопределяется черезCLAUDE_GOAL_MAX_STOP_CONTINUES. 94 ⭐, MIT. Имеет смысл если на v2.1.138 и ниже или нужен явный soft budget на саму команду. -
balakumardev/claude-code-goal — другой плагин с adversarial audit по умолчанию. Отдельная Claude-сессия независимо ревьюит результат, чтобы Claude не мог соврать про "готово". Режимы:
adversarial(по умолчанию),self(быстрее, бесплатно),off. Ставится через/plugin install claude-code-goal. -
Codex CLI /goal — параллельная фича от OpenAI, тот же механизм. Включается через
[features] goals = trueвconfig.tomlилиcodex features enable goals. Команды совпадают:/goal pause,/goal resume,/goal clear. -
Ralph Loop — оригинал,
while truebash-цикл от Geoffrey Huntley. Живёт, есть форки типа frankbria/ralph-claude-code с tmux-мониторингом и circuit breaker. Тяжелее в настройке, но даёт полный контроль над exit-условиями. -
/loop — нативная команда Claude Code v2.1.72+, но это другая категория. Запускает по интервалу, а не до условия. Хороша для polling'а и периодических задач (мониторинг билдов, ежедневный summary), не для миграций.
Вердикт
Брать /goal, если задача укладывается в одно проверяемое условие и в transcript падает evidence: миграции с npm test exits 0, рефакторинг под tsc --noEmit clean, чистка lint'а, перебор issue-бэклога. Здесь реально экономит время. Claude сам решает когда стоп, ты не сидишь нянькой.
Не брать, если задача звучит как "сделай нормально" или "улучши кодбазу". Без жёсткого end state ты сжигаешь токены вхолостую. Если в команде нет жёсткого token-капа, поставь его сам через or stop after N turns в каждом condition'е. Это не паранойя, это арифметика.
Если хочется adversarial audit, чтобы Claude не мог соврать про "готово", ставь balakumardev/claude-code-goal поверх. Нужен soft token budget на самой команде — бери jthack/claude-goal. Если ты на Codex CLI, у тебя уже всё это есть, просто включи features.goals в config.toml.
Как попробовать
- Обнови Claude Code до v2.1.139 или выше:
npm install -g @anthropic-ai/claude-codeлибоclaude update - Запусти
claudeв рабочей директории, прими trust dialog (без него/goalне работает) - Поставь tight condition с явным end state и turn cap:
/goal npm test exits 0 in packages/auth and git status is clean or stop after 15 turns
- Через
/goalбез аргументов посмотри текущий статус, turn count и token spend - Hard-сбросить goal —
/goal clear. Хочешь добавить self-audit на каждый turn — глянь Stop hooks doc
Дальше наблюдай за status panel. Если token count растёт быстрее turn'ов, значит condition расплывчат, эвалюатор не может закрыть goal. Подрежь condition, добавь evidence-требование, перезапусти.