Goal mode
Обычно агент отвечает и возвращает управление тебе. Goal mode меняет это: ты один раз задаёшь условие завершения, и агент продолжает работать ход за ходом, пока условие не выполнено.
Работает это так. После каждого хода отдельная быстрая модель (evaluator) читает разговор и отвечает «выполнено» или «нет» с коротким объяснением. Если нет, объяснение подмешивается агенту как подсказка, и он начинает следующий ход сам. Если да, цель снимается автоматически.
/goal все тесты в tests/auth проходят и линтер чистыйКогда это полезно
Заголовок раздела «Когда это полезно»Цель имеет смысл там, где у работы есть проверяемое окончание и много однотипных шагов:
- миграция модуля на новый API, пока все места вызова не компилируются и тесты не зелёные;
- реализация по спеке, пока не выполнены все критерии приёмки;
- разбор длинного списка предупреждений линтера, пока список не пуст;
- разбиение большого файла на модули, пока каждый не уложится в лимит строк.
Когда не стоит: короткая правка, исследование без ясного результата («посмотри, что можно улучшить»), задача, где успех решаешь ты на глаз. В этих случаях цикл будет крутиться вокруг размытого условия и потратит токены впустую.
Команды
Заголовок раздела «Команды»| Команда | Что делает |
|---|---|
/goal |
Показывает активную цель, число сделанных ходов и лимит |
/goal <условие> |
Закрепляет цель. Новая заменяет предыдущую. Минимум 10 символов |
/goal clear |
Снимает цель. Работают также off, stop, reset, none, cancel |
/goal --model <модель> <условие> |
Закрепляет цель с другой моделью-проверяющим |
Цель действует со следующего хода: закрепление само работу не запускает, отправь запрос как обычно. Пока цель активна, в статусной строке горит индикатор 🎯, а условие и прогресс видны в /goal и /status.
В браузере команды нет: цель ставит кнопка с мишенью рядом с полем ввода. Она же показывает закреплённое условие и снимает его, а в списке сессий у тех, что работают до цели, стоит та же мишень.
Одна цель на сессию. /new начинает сессию без цели.
Как писать условие
Заголовок раздела «Как писать условие»Evaluator судит только по разговору: он не запускает команды и не читает файлы сам. Значит, условие должно проверяться по тому, что агент уже показал в чате. «Все тесты в tests/auth проходят» работает, потому что агент запускает тесты и их вывод попадает в разговор. «Код стал чище» не работает: подтвердить это нечем.
Что стоит включить в формулировку:
- Одно измеримое состояние. Результат тестов, код возврата сборки, пустой список, число файлов.
- Способ проверки. Как агент должен это показать: «
make testзавершается без ошибок», «git statusчистый». - Границы. Что не должно измениться по пути: «не трогать другие тесты», «без новых зависимостей».
Плохо: сделай нормально, почини баги, улучши производительность.
Хорошо: make lint и make test проходят без ошибок, при этом публичный API модуля auth не изменился.
Автоцель
Заголовок раздела «Автоцель»Если цель не закреплена, агент может сам предложить условие по твоему запросу. Предложение появляется не всегда: оно рассчитано на содержательную многошаговую работу с проверяемым результатом. На вопросы, объяснения и мелкие правки агент ничего не предлагает и просто отвечает.
Когда предложение есть, оно показывается в окне подтверждения:
◎ Suggested goal все тесты в tests/auth проходят
[Y] pin goal [E] edit [N] dismissY закрепляет как есть, E переносит текст в поле ввода для правки, N отклоняет. В браузере предложение появляется строкой над полем ввода: одна кнопка закрепляет, крестик отклоняет. Отключить подсказку целиком:
{ "goal": { "auto_goal": false } }Лимиты и остановка
Заголовок раздела «Лимиты и остановка»- Лимит автопродолжений. 50 ходов. Когда лимит исчерпан, цель снимается, а работа останавливается: агент не крутится бесконечно. В TUI это значение фиксированное, своё задаётся только в headless флагом
--goal-max-iterations. - Сбои проверяющего. Несколько ошибок подряд при проверке снимают цель, а не подвешивают сессию.
- Права не меняются. Цель не расширяет разрешения: если режим подтверждений спрашивает перед запуском команд, он будет спрашивать на каждом ходу. Для работы без присмотра переключи режим на Accept Edits или Trust через Shift+Tab, см. Права доступа.
- Ручная остановка.
/goal clearв любой момент.Escпрерывает текущий ход, но цель остаётся закреплённой.
Из настроек у режима одна ручка, автоцель:
{ "goal": { "auto_goal": true } }Проверяющую модель выбирают на месте: /goal --model <модель> в TUI, --goal-model в headless. По умолчанию это anthropic/claude-haiku-4.5: она дешёвая, и её вклад в расход обычно незаметен на фоне основных ходов. Основной расход даёт сам цикл: агент работает столько ходов, сколько нужно, поэтому цель на размытом условии стоит дорого.
В headless-режиме
Заголовок раздела «В headless-режиме»У waibee run есть свой набор флагов:
waibee run "перенеси модуль auth на новый клиент" \ --goal "make test проходит, старый клиент не используется ни в одном файле"
waibee run "..." --goal "..." --goal-max-iterations 20 # свой лимит ходовwaibee run "..." --goal "..." --goal-model <модель> # своя модель-проверяющийwaibee run "..." --once # один проход, без циклаБез --goal и без --once waibee run сам подбирает условие по задаче и проверяет результат: одиночный проход включается флагом --once. Автоподбор отключается тем же "auto_goal": false, что и в TUI.
Коды возврата с --goal удобны в CI:
| Код | Значение |
|---|---|
0 |
Цель достигнута |
1 |
Исчерпан лимит ходов |
2 |
Ошибка агента или проверки |
- Лучшие практики: как ставить задачу и требовать подтверждения результата.
- Роль разработчика: что проверять самому, когда агент работает долго.
- Подходы к разработке: где цель встраивается в рабочий процесс.