Перейти к содержимому

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] dismiss

Y закрепляет как есть, E переносит текст в поле ввода для правки, N отклоняет. В браузере предложение появляется строкой над полем ввода: одна кнопка закрепляет, крестик отклоняет. Отключить подсказку целиком:

.waibee/settings.json
{ "goal": { "auto_goal": false } }
  • Лимит автопродолжений. 50 ходов. Когда лимит исчерпан, цель снимается, а работа останавливается: агент не крутится бесконечно. В TUI это значение фиксированное, своё задаётся только в headless флагом --goal-max-iterations.
  • Сбои проверяющего. Несколько ошибок подряд при проверке снимают цель, а не подвешивают сессию.
  • Права не меняются. Цель не расширяет разрешения: если режим подтверждений спрашивает перед запуском команд, он будет спрашивать на каждом ходу. Для работы без присмотра переключи режим на Accept Edits или Trust через Shift+Tab, см. Права доступа.
  • Ручная остановка. /goal clear в любой момент. Esc прерывает текущий ход, но цель остаётся закреплённой.

Из настроек у режима одна ручка, автоцель:

.waibee/settings.json
{ "goal": { "auto_goal": true } }

Проверяющую модель выбирают на месте: /goal --model <модель> в TUI, --goal-model в headless. По умолчанию это anthropic/claude-haiku-4.5: она дешёвая, и её вклад в расход обычно незаметен на фоне основных ходов. Основной расход даёт сам цикл: агент работает столько ходов, сколько нужно, поэтому цель на размытом условии стоит дорого.

У 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 Ошибка агента или проверки