# Ralph loop: как оставить Claude Code работать на ночь

Что такое техника Ralph Wiggum, чем bash-цикл отличается от плагина ralph-loop и команды /goal, как задать критерии готовности, ограничители и проверить результат утром.

- Автор: Guide DAO
- Опубликовано: 2026-10-24
- Теги: Claude, Вайбкодинг
- Страница: https://www.guidedao.xyz/blog/ralph-loop-dolgie-zadachi

Джеффри Хантли (Geoffrey Huntley, [@GeoffreyHuntley](https://x.com/GeoffreyHuntley)) в июле 2025 года описал в [блоге](https://ghuntley.com/ralph/) технику, которую назвал в честь Ральфа Виггама из «Симпсонов». В самом чистом виде, по его словам, Ralph это bash-цикл: агент раз за разом получает один и тот же промпт, пока работа не будет сделана. В посте цикл записан одной строкой:

```bash
while :; do cat PROMPT.md | claude-code ; done
```

Так Хантли строил собственный язык программирования CURSED. Он приводил и пример знакомого инженера: контракт на 50 тысяч долларов, по его словам, обошёлся в 297 долларов на API. С тех пор у техники появились официальные реализации: плагин `ralph-loop` от Anthropic, одноимённый плагин Cursor и встроенная в Claude Code команда `/goal`. А в X уже пишут, что Ralph упёрся в потолок. Арвин Сюй из LobeHub в сентябре [написал](https://x.com/arvin17x/status/2104210750923505817), что запустить агента на долгую задачу сейчас не проблема. Трудно другое: давать агенту хороший фидбек и вовремя поправлять его по ходу долгого прогона.

Ниже три способа запустить такой цикл в Claude Code, первая ночная задача по шагам и утренняя проверка. Команды сверены с документацией Claude Code и репозиториями плагинов 24 октября 2026 года.

## Как устроен Ralph

Хантли держит технику на двух правилах. Первое: одна задача за итерацию. Агент сам выбирает самый важный пункт из плана `fix_plan.md`, делает его и выходит. Второе: каждая итерация начинается с чистого контекстного окна, а всё, что нужно помнить, лежит в файлах. Агент каждый раз загружает одно и то же: спецификации из папки `specs/`, план и `AGENT.md` с командами сборки и тестов. Новое знание о проекте агенту разрешено дописывать в `AGENT.md`, а в тестах оставлять пояснения, зачем тест нужен: у следующей итерации этих рассуждений в контексте уже не будет.

Третью часть Хантли называет backpressure, обратным давлением. Код агент пишет дёшево, дорого проверить, что он написал то, что нужно. Поэтому каждая итерация упирается в автоматическую проверку: тесты, компилятор, тайпчекер, статический анализатор. Ещё он замечает, что Claude склонен писать заглушки вместо полной реализации, и ставит в промпт прямой запрет на них.

Плохое поведение агента Хантли лечит табличками. Ральф падает с горки, рядом ставят табличку «съезжай, не прыгай», и в следующий раз он её видит. На практике это строка в промпте после каждого сбоя, который вы заметили в логе.

## Три способа запустить цикл в Claude Code

Первый способ повторяет оригинал: внешний цикл вокруг `claude -p`. Каждый запуск это новый сеанс с пустым контекстом, а состояние живёт в файлах и git.

Второй способ дал плагин ralph-loop. Anthropic выложила его в ноябре 2025 года под именем ralph-wiggum, а в январе 2026 года переименовала, в коммите сказано «per legal guidance». Плагин работает внутри текущего сеанса через хук `Stop`: когда Claude заканчивает ответ, хук блокирует остановку и возвращает тот же промпт. Как устроены такие хуки, мы разбирали в [статье о хуках](https://www.guidedao.xyz/blog/huki-v-claude-code). Контекст при этом копится от итерации к итерации. Хантли в январе [написал](https://x.com/GeoffreyHuntley/status/2006721228539834694), что плагин сделан не по спецификации: в нём нет намеренного управления контекстом между итерациями. Длинный сеанс рано или поздно уйдёт в компактинг, о нём мы писали в [статье о контексте и памяти](https://www.guidedao.xyz/blog/kontekst-i-pamyat-v-claude-code).

Третий способ встроен в Claude Code: команда [`/goal`](https://code.claude.com/docs/en/goal). Вы задаёте условие готовности, и после каждого хода небольшая быстрая модель проверяет, выполнено ли оно. Если нет, Claude начинает новый ход и получает причину отказа как подсказку. Готовность здесь решает свежая модель, а не та, что делает работу. Цель снимается сама, когда условие выполнено, когда проверяющая модель сочла его невыполнимым или когда ход упал на ошибке, которую должны исправить вы, например на исчерпанном балансе.

Есть ещё `/loop`, но он для другого: повторяет промпт по таймеру, например `/loop 5m check the deploy`, и подходит, чтобы присматривать за CI или пул-реквестом.

## Установка плагина

Плагин лежит в официальном маркетплейсе Anthropic:

```text
/plugin install ralph-loop@claude-plugins-official
```

Цикл запускается одной командой. Опция `--completion-promise` задаёт фразу, которую Claude должен вывести в тегах `<promise>`, когда задача готова, а `--max-iterations` ограничивает число кругов. Пример из README:

```text
/ralph-loop "Build a REST API for todos. Requirements: CRUD operations, input validation, tests. Output <promise>COMPLETE</promise> when done." --completion-promise "COMPLETE" --max-iterations 50
```

Состояние хранится в `.claude/ralph-loop.local.md`: номер итерации, лимит и сам промпт. Текущую итерацию покажет `grep '^iteration:' .claude/ralph-loop.local.md`, остановит цикл `/cancel-ralph`. Фраза сравнивается точно, поэтому два исхода вроде «готово» и «застрял» одной опцией не задать. По умолчанию лимита итераций нет, и README советует ставить его всегда. Если Claude восемь раз подряд закончит ход без единого вызова тула, Claude Code сам отменит блокировку хука. В Windows хуку нужен Git Bash.

У Cursor есть свой плагин [ralph-loop](https://github.com/cursor/plugins/tree/main/ralph-loop) с теми же опциями, он ставится командой `/add-plugin ralph-loop`.

## Первая ночная задача по шагам

Первое: выберите задачу, готовность которой проверяет команда. Подойдут миграция на новый API, перенос модулей с JavaScript на TypeScript, покрытие тестами до заданного порога. Не подойдут «сделай красиво» и всё, где нужен ваш вкус.

Второе: отдельная рабочая копия. Команда `claude -w night-api` запускает Claude в новом git worktree в папке `.claude/worktrees/night-api`, и ночные правки не смешаются с вашими.

Третье: файл прогресса. Пока вы рядом, попросите Claude составить `PROGRESS.md`, где каждый вызов старого API или каждый модуль стоит отдельной строкой. Это ваш `fix_plan.md`.

Четвёртое: промпт с критериями готовности. В нём должно быть, что читать в начале, сколько делать за итерацию, чем проверять, что делать при неудаче и как выглядит конец. Сохраните его в `PROMPT.md`:

```markdown
Задача: перевести все вызовы legacyHttp в src/ на apiClient.
В начале прочитай PROGRESS.md и specs/api-client.md.
За итерацию бери один пункт из PROGRESS.md, самый важный из оставшихся.
Перед правкой поищи в коде, не сделан ли он уже.
После правки запусти npm test и npm run typecheck.
Если проверки зелёные, отметь пункт в PROGRESS.md и сделай коммит.
Если пункт не выходит с трёх попыток, запиши в PROGRESS.md, что пробовал и что мешает, и бери следующий.
Не меняй и не удаляй существующие тесты. Не оставляй заглушек и TODO.
Готово, когда grep -r legacyHttp src/ ничего не находит, а npm test и npm run typecheck выходят с кодом 0.
Тогда выведи <promise>DONE</promise>.
```

Пятое: запуск. С плагином это `/ralph-loop` с текстом промпта, `--completion-promise "DONE"` и `--max-iterations 30`. С `/goal` в команду идёт только условие, а работа описана в файле:

```text
/goal Выполни PROMPT.md. Готово, когда grep -r legacyHttp src/ ничего не выводит, npm test и npm run typecheck выходят с кодом 0, а файлы в tests/ не изменены. Или остановись после 40 ходов.
```

Проверяющая модель не запускает команды и не читает файлы, она судит по тому, что Claude показал в разговоре. Поэтому условие формулируют так, чтобы его доказывал вывод команд. Оговорку про число ходов документация советует для ограничения длины прогона. Состояние цели, число ходов и потраченные токены покажет `/goal` без аргументов.

Вариант с чистым контекстом на каждой итерации ближе всего к оригиналу. Последнюю строку промпта замените на «Тогда допиши в PROGRESS.md строку STATUS: DONE» и запустите цикл:

```bash
for i in $(seq 1 30); do
  claude -p "$(cat PROMPT.md)" --permission-mode auto --max-budget-usd 5 >> ralph.log
  grep -q 'STATUS: DONE' PROGRESS.md && break
done
```

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

## Ограничители

Права. В ручном режиме ночной цикл встанет на первом же запросе разрешения, а `/goal` режим прав не меняет. Для работы без присмотра документация предлагает режим `auto`, где действия проверяет модель-классификатор, или ручной режим вместе со встроенным сэндбоксом в режиме auto-allow. Флаг `--dangerously-skip-permissions` документация допускает только в контейнере, виртуальной машине или sandbox runtime и не от root.

Сэндбокс. Команда `/sandbox` включает встроенный сэндбокс, и команды Claude в терминале видят только разрешённые файлы и хосты. Упавшую команду Claude может попросить перезапустить вне сэндбокса, настройка `"allowUnsandboxedCommands": false` убирает эту лазейку. Хуки и MCP-серверы работают вне сэндбокса, поэтому для полной изоляции Claude Code целиком запускают в контейнере или VM.

Запреты. Правила `deny` блокируют в любом режиме, даже в `bypassPermissions`. Для ночного прогона стоит закрыть хотя бы пуш и секреты:

```json
{
  "permissions": {
    "deny": ["Bash(git push *)", "Read(./.env)"]
  }
}
```

В auto-режиме это особенно важно. Границы, которые вы назвали в чате, классификатор перечитывает из транскрипта, и после компактинга они могут пропасть, а правило `deny` останется.

Бюджет. У плагина это `--max-iterations`, у `/goal` оговорка о числе ходов, у `claude -p` флаги `--max-turns` и `--max-budget-usd`. Бюджет в долларах считается по оценке на стороне клиента, может отличаться от счёта и бывает превышен, поэтому оставляйте запас.

Бен Декрай (Ben Dechrai) [описал](https://x.com/bendechrai/status/2105078234513551810) свою «фабрику», которая выросла из Ralph loop. Каждый агент, который правит код, работает в своём worktree, раннеры живут в одноразовых Docker-контейнерах без доступа к хосту, а секреты агенты получают только ссылками.

## Как проверить результат утром

Декрай пишет, что настоящий механизм качества это детерминированные проверки вне цикла агента, а оценивать собственную работу модели не доверяют. Отсюда порядок утренней проверки.

Первое: прочитайте `PROGRESS.md`. Пункты с пометкой о неудаче покажут, где агент застрял и почему.

Второе: запустите проверки сами, с чистой сборки. Зелёный тест в логе агента не считается.

Третье: посмотрите, что агент сделал с проверками. `git diff --stat main -- tests/` покажет, не правил ли он тесты, чтобы они прошли, а поиск по `TODO` найдёт заглушки, о которых предупреждает Хантли.

Четвёртое: читайте коммиты по одному, начиная с `git log --oneline main..HEAD`. Одна задача за итерацию даёт маленькие коммиты, и плохой можно откатить без остальных.

Пятое: отдайте дифф на ревью отдельному агенту. Декрай разделяет автора тестов, исполнителя и ревьюера и запускает их на разных моделях. Ревью в отдельном контексте удобно поручить [субагенту](https://www.guidedao.xyz/blog/subagenty-v-claude-code).

## Чему научиться, даже если не ставить

Сам цикл занимает строку, ценность в том, что вокруг него. На наш взгляд, четыре правила Ralph полезны и в дневной работе, их можно перенести в `CLAUDE.md`:

```markdown
## Длинные задачи
Веди PROGRESS.md: что сделано, что осталось, что не вышло и почему. Обновляй его после каждого пункта.
Делай один пункт за раз и проверяй его тестами до следующего.
Перед тем как писать новое, поищи в коде, нет ли этого уже.
Когда узнаёшь правильную команду сборки или теста, коротко запиши её в этот файл.
```

Похожий контракт на ночь есть в pstack Лорен Тан: проверяемое условие выхода, отдельный worktree, журнал решений и право остановиться, если агент по-настоящему застрял. Мы описывали его в [статье о pstack](https://www.guidedao.xyz/blog/pstack-poteto-mode).

## Когда это лишнее и где потолок

README плагина перечисляет, где Ralph не подходит: задачи, где нужны решения человека или дизайн, разовые операции, задачи без ясного критерия успеха и отладка в продакшене. Токенов цикл тратит больше обычного сеанса: каждая итерация заново читает спецификации и план, и Хантли сам называет это расточительным, но оправданным ради чистого контекста.

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

Если у вас есть задача с командой-проверкой, начните с `/goal` в отдельном worktree и с лимитом ходов: команда встроена, а проверка отделена от исполнителя. Плагин ralph-loop удобен, чтобы попробовать технику в одном сеансе. Для многочасовой работы надёжнее цикл вокруг `claude -p` с чистым контекстом и файлом прогресса.

Курс Guide DAO: [Основы Claude Code](https://www.guidedao.xyz/claude)
