
Почему обычное AI-программирование ломается
Вы открываете Claude Code с идеей. Через 45 минут вы исправляете один и тот же баг в третий раз. AI забыл, что вы создавали. Контекст загрязнился.
LLM работают авторегрессивно. По мере роста разговора модель теряет след инструкций, погребённых в истории. Качество ухудшается, даже когда вы не превысили лимит контекста.
Типичное решение — компрессия. Но компрессия приводит к потерям. Та инструкция, которую вы дали три промпта назад? Исчезла.
> Initializing session...
> Context loaded: 100%
> User prompt received.
> Generating code...
> Warning: Context window filling up.
> Warning: Hallucination detected.
> Error: Instruction #42 lost.
> Error: Regression in module A.
> SYSTEM CRASH
Техника Ralph полностью отказывается от компрессии. Каждая итерация цикла начинается с чистого листа.
Единственная истина — это код в репозитории. История изменений сохраняется через коммиты, а не в контексте чата.
Файл состояния проекта. Определяет, что сделано, что нужно сделать дальше, и критерии приемки. Мозг операции.
Журнал выводов и уроков. Агент читает его, чтобы не повторять ошибки, но не перегружает контекст всей историей.

Bash-цикл — это босс. Claude Code — это работник, который перезагружается каждую смену.
AI читает prd.json и progress.txt, чтобы понять текущую задачу и контекст.
Реализует ТОЛЬКО одну задачу с наивысшим приоритетом.
Запускает тесты. Если проходят — делает коммит и обновляет prd.json.
Сессия убивается. Следующая итерация начинается с чистого листа.
#!/bin/bash
set -e
MAX_ITERATIONS=${1:-10}
PROMPT_FILE="./prompt.md"
PRD_FILE="./prd.json"
for ((i=1; i<=MAX_ITERATIONS; i++)); do
echo "=== Итерация Ralph $i из $MAX_ITERATIONS ==="
OUTPUT=$(cat "$PROMPT_FILE" | claude --dangerously-skip-permissions -p)
if echo "$OUTPUT" | grep -q "<promise>complete</promise>"; then
echo "Все задачи завершены!"
exit 0
fi
done
echo "Достигнут максимум итераций."Вы — автономный агент для программирования.
1. Прочитайте prd.json — найдите задачу с наивысшим приоритетом, где "passes": false
2. Реализуйте ТОЛЬКО эту задачу
3. Запустите: pnpm type-check && pnpm test
4. Если тесты проходят, закоммитьте изменение
5. Обновите prd.json — установите "passes": true
6. Добавьте выводы в progress.txt
7. Если все задачи завершены, выведите: <promise>complete</promise>
Работайте только над ОДНОЙ задачей за итерацию.Математика эффективности
Аутсорсинг разработки
Затраты на API
Полный транскрипт материала
Кто-то потратил $297 на API и выполнил работу, которая стоила бы $50,000 при аутсорсинге. Вот точная система.
На хакатоне YC команды создали 6 рабочих репозиториев за одну ночь. Джеффри Хантли, который изобрёл эту систему, создал целый язык программирования за 3 месяца, практически не прикасаясь к клавиатуре.
Техника называется Ralph. Это bash-цикл, который многократно запускает AI-агента для программирования, пока задача не будет выполнена.
Вот и всё. Пока вы спите, пока ужинаете — цикл продолжает работать. Он берёт задачу, создаёт код, проверяет работоспособность, делает коммит, берёт следующую задачу. Когда вы просыпаетесь — функции готовы.
Вы открываете Claude Code с идеей. Через 45 минут вы исправляете один и тот же баг в третий раз. AI забыл, что вы создавали. Контекст загрязнился.
Проблема в деградации контекста. LLM работают авторегрессивно. Они предсказывают следующий токен на основе всего предыдущего. По мере роста разговора модель теряет след инструкций, погребённых в истории.
Ralph полностью отказывается от компрессии. Каждая итерация цикла начинается с чистого листа. Чистый контекст. Никакой накопленной путаницы.
Память хранится в трёх файлах:
AI читает, что произошло, выбирает следующую задачу, реализует её, делает коммит, записывает выводы. Цикл запускается снова.
Говорите 2-3 минуты. Голосовой ввод отлично работает. "Я хочу, чтобы пользователи могли фильтровать задачи по приоритету..."
Используйте промпт для преобразования вашего PRD в формат Ralph. Каждая история должна быть завершаема за ОДНУ итерацию.
./ralph.sh 10. Отойдите. Проверьте через час.
Агенту нужно знать, работает ли код. Без обратной связи он отмечает как завершённое то, что таковым не является.
Добавьте это в ваш промпт: