Skip to Content
Руководство для пользователейВозможностиЦели

Goals

Goal заставляет Qwen Code работать через ходы, пока не будет выполнено указанное условие. Установите его с помощью /goal <objective>, и сессия продолжит работу самостоятельно. Каждый ход записывается как доказательство; когда модель предлагает, что цель выполнена или заблокирована, независимый верификатор оценивает это предложение исключительно на основе доказательств. Сессия останавливается, когда верификатор принимает решение, или когда Goal приостановлен, очищен, или остановлен лимитом.

Команды

CommandПоведение
/goalПоказать текущий Goal и его статус.
/goal <objective>Создать Goal или заменить активный.
/goal set <objective>То же самое, явная форма.
/goal edit <objective>Изменить формулировку активного Goal без начала заново.
/goal pause / resumeОстановить или продолжить цикл без потери Goal.
/goal clearУдалить Goal.
/goal-draft <intent>Поручить написание цели перед её установкой (ниже).

Для создания, редактирования или возобновления Goal требуется доверенное рабочее пространство (/trust). Использование в headless-режиме описано в разделе Headless Mode.

После того как Goal оплатил ход, нижний индикатор и каждая карточка статуса показывают, сколько потрачено относительно разрешённого окна, в формате 1.2k/30.0m. Эта цифра учитывает вызовы модели, которые Goal делает в своих ходах; субагенты и собственные проверки верификатора не включаются. Окно задаётся параметром model.goalTokenBudget; возобновление Goal, исчерпавшего своё окно, получает ещё одно окно поверх уже потраченного, поэтому цифра показывает 30.0m/60.0m, а не начинается заново. Goal без бюджета показывает только потраченное. Goal, ещё не оплативший ни одного хода, не показывает никаких цифр.

Доступны ещё два окна, по умолчанию отключённых: model.goalMaxTurns ограничивает количество ходов, которые может завершить Goal, включая ходы Goal, инициированные пользователем, а model.goalMaxActiveMinutes ограничивает реальное время, пока Goal остаётся активным в запущенном процессе, включая ожидание и время простоя между ходами. Время, пока Goal приостановлен, заблокирован или остановлен, не учитывается во втором окне, как и время простоя при перезапуске; процесс, который просто приостановлен, всё равно учитывается. Какое бы окно ни закончилось первым, Goal получает тот же единственный завершающий ход для передачи и затем останавливается, пока вы его не возобновите, а возобновление авторизует ещё одно окно поверх уже использованного. Перемещается только то окно, которое закончилось; остальные остаются на месте, и отказ -1 аналогично снимает потолок только с Goal, который уже его израсходовал. Временное окно считывается между ходами, а не обеспечивается таймером, поэтому Goal может работать значительно дольше него перед остановкой: уже запущенный ход никогда не прерывается, а окно, закончившееся во время отсутствия запущенного хода, не замечается до завершения следующего хода. Активное время считается между записанными переходами, поэтому время в ходе, прерванном перезапуском, не учитывается. Изменения любой настройки вступают в силу после перезапуска. Оба окна активируются только для Goal, созданного после изменения, поэтому ограничение уже существующего Goal означает его замену через /goal set — новый Goal с ревизией 1, счётчики ходов, токенов и активного времени сбрасываются, а окно доказательств начинается с замены, поэтому доказательства, записанные старым Goal, больше не цитируемы — или его очистку и начало заново. Возобновление или редактирование никогда не добавляет потолок, который не был активирован при создании.

Каждый ход, выполняемый сессией самостоятельно, сообщает о том, сколько Goal потратил на данный момент, сколько ходов за ним стоит, и — если только Goal не работает без ограничений — о разрешённом окне. Каждый такой ход, кроме финальной передачи завершения, также несёт постоянные инструкции: перепроверять рабочее пространство, а не доверять отчётам предыдущих ходов, работать над конечным состоянием, которое запрашивает цель, делать что-то другое, когда предыдущий ход ничего не изменил (начиная со второго хода, когда есть предыдущий ход для оценки), и проверять каждое требование по цитируемым доказательствам перед предложением о завершении Goal.

Длинный Goal периодически сжимает записанные доказательства в утверждения контрольных точек с помощью проверки побочной моделью, чтобы последующие ходы и верификатор могли на них ссылаться. Проверка ограничена параметром model.goalCheckpointTimeoutSeconds, по умолчанию 180 секунд. Ответ, обёрнутый в markdown-ограждение, читается без ограждения. Если его утверждения превышают суммарный байтовый бюджет, включают утверждение сверх посимвольного лимита на утверждение, количество, которое может содержать одна контрольная точка, ссылаются на id, которого не было в запросе, или изменяют тип доказательства цитируемого источника, выполняется один корректирующий вызов модели, который называет, что было неправильно, и оба вызова делят этот потолок между собой. Ответ, который не является JSON-объектом с непустым массивом claims, не получает корректирующего вызова, как и ответ с любым некорректным утверждением, даже рядом с пригодными: лишний ключ на любом уровне, не распознанный proofKind, пустое утверждение или список sourceRefs, который пуст, содержит не-строку или пустой id, повторяет id или содержит более 32 id. Проверка, не завершённая вовремя, отбрасывается как неопределённая; она засчитывается в лимит застреваний контрольных точек только при переполнении окна доказательств, а завершившаяся без переполнения проверка сохраняет серию и повторяется на более позднем ходу. Вызовы потоковые, поэтому транспортный таймаут на запрос ограничивает только подключение и первый ответ, а сам потолок ограничен 15-минутным сроком жизни stream guard, поскольку после этого срока проверку завершает guard, а не настройка. Эти 15 минут для настройки фиксированы, и повышение собственного лимита stream guard его не увеличивает.

Неудачная контрольная точка проявляется до того, как остановит Goal. Пока работает серия застреваний активного Goal, нижний индикатор переключается на checkpoint N/3 stalled самостоятельно; после приостановки или остановки Goal индикатор показывает этот статус вместо этого. Полоса статуса Goal в web shell показывает счётчик независимо от статуса. Всякий раз, когда отображается терминальная карточка статуса Goal, например, через /goal или через карточку паузы, возобновления или верификатора, она показывает, сколько последовательных проверок застряло из трёх, разрешённых Goal, вместе с последним сбоем, если он записан; диалог Goals в web shell и текстовый вывод headless /goal показывают ту же строку, тогда как карточки транскрипта web shell для событий Goal показывают только причину остановки, а модель видит оба поля при чтении Goal. Проверка, которая не проходит, пока в окне ещё есть место, также показывается, без расходования застревания, но только пока Goal активен, или когда этот сбой сам по себе остановил Goal, как в случае с запросом контрольной точки, слишком большим для отправки. Остановка контрольной точки по любой другой причине очищает сбой и сохраняет серию, а завершённый Goal не показывает строку контрольной точки. Сбой сохраняется как одна строка с удалёнными управляющими символами. Goal, остановленный тремя застрявшими контрольными точками, называет то, с чем столкнулась последняя. Проверка, которая не могла вместить окно в рамках ограничений утверждений контрольной точки, будь то полный список утверждений, который всё ещё оставил доказательства за бортом, или утверждения сверх счётчика утверждений или бюджета размера, означает, что цель производит больше доказательств, чем может содержать одно окно, поэтому сузьте её. Ответ, который не может быть свёрнут в утверждения, означает, что модель контрольной точки не возвращает запрашиваемую структурированную выдачу, и сужение цели это не исправляет. Проверка, которая никогда не ответила, может означать недоступного или ограниченного по частоте провайдера, проверку, не завершившуюся в течение model.goalCheckpointTimeoutSeconds, или ошибку в самой проверке; записанный сбой указывает, что именно. Возобновление после любого из трёх случаев начинает новое окно доказательств.

Прерывание Goal

Отмена хода Goal приостанавливает Goal. Нажмите Esc, пока модель отвечает или её инструменты ещё работают, и ход остановится, Goal перейдёт в состояние paused, и карточка, и /goal сообщат причину остановки. Ничто не продолжится, пока вы не выполните /goal resume.

Ввод сообщения во время активного Goal не приостанавливает его. Ваше сообщение выполняется как следующий ход Goal, поэтому используйте его для направления работы; используйте /goal pause или /goal clear для остановки.

Каждая пауза указывает причину: вы прервали его, вы выполнили /goal pause, лимит токенов сессии заблокировал следующий запрос модели, ход завершился ошибкой, или три хода подряд не записали ничего, что верификатор мог бы оценить, и не выдвинули предложения — служебные вызовы Goal (get_goal, update_goal) не считаются прогрессом. Goal, остановленный лимитом, сохраняет причину этого лимита.

Как Goal выносит суждение

Верификатор никогда не выполняет команды и не читает файлы самостоятельно. Он видит только то, что уже есть в транскрипте:

  • Видимый вывод ассистента и результаты инструментов считаются доказательствами. Текст цели, ваши промпты и скрытые рассуждения модели — нет.
  • Напечатанный текст доказывает только то, что текст был напечатан. Утверждение о прохождении тестов, изменении файла или обновлении remote требует соответствующего результата инструмента в транскрипте.
  • Утверждение о том, что вы подтвердили, выбрали или одобрили что-то, требует реального сообщения от вас; верификатор отклоняет предложения, которые это предполагают.
  • При отсутствии доказательства вердикт — «ещё не», а не «готово». Условие, которое никто не может подтвердить, поддерживает работу цикла, пока его не остановит лимит.

Поэтому цель должна заставлять агента производить доказательства: запускать указанную проверку и показывать решающий вывод.

Написание хорошей цели

Включите эти части в цель, в таком порядке:

ЧастьЧто писать
Outcome:Одно предложение: что истинно, когда цель достигнута.
Done when:Нумерованные бинарные проверки. Хотя бы одна называет команду и её ожидаемый код выхода или строку вывода и просит вставить эту строку.
Must not:Файлы, которые не нужно трогать, тесты или пороги, которые не нужно ослаблять, необратимые действия (push, delete, publish), которые не нужно выполнять.
Budget:Рекомендательная инструкция модели о том, когда сдаться, например, «stop as blocked after 20 turns». Для принудительного ограничения установите model.goalMaxTurns или model.goalMaxActiveMinutes в настройках, а не здесь.
On block:Что сообщать при застревании и какое решение должен принять человек.
Context:Только факты, которые агент не может найти в рабочем пространстве: ветка, окружение, предыдущие решения.

Ограничьтесь одной целью. /goal set и /goal edit принимают любую длину, но придерживайтесь примерно 1 200 символов: цель повторно отправляется на каждом ходу Goal. Цель, предложенная моделью через propose_goal, ограничена 1 500 символами. Обе команды сворачивают переводы строк в пробелы, поэтому нумеруйте пункты, а не полагайтесь на переносы строк.

Budget — это инструкция модели о том, когда остановиться и сообщить о блокировке; модель может её соблюсти или нет. Чтобы заставить саму среду выполнения остановиться по количеству ходов или длительности, установите model.goalMaxTurns или model.goalMaxActiveMinutes. Указание любого из них в цели не настраивает эти параметры и не изменяет токен-бюджет Goal.

СлабаяПочему не работаетСильнее
make checkout fasterНет порога, нет проверки.Outcome: checkout p95 is below 250 ms. Done when: 1) npm run bench:checkout exits 0 and prints p95 < 250 (paste the line); 2) npm test exits 0. Must not: change the benchmark or skip tests. Budget: as model guidance, stop as blocked after 20 turns. On block: report the measured p95 and what blocks it.
clean up the auth moduleУ «clean» нет доказательств.Спросите, что будет наблюдаемо: ноль предупреждений lint в src/auth, порог покрытия, количество файлов.
ship the releaseНеобратимо и требует решения человека.Сузьте до проверяемого пред-релизного состояния (тег существует, npm run release:dry-run завершается с кодом 0) и поместите «do not publish» в Must not.
after I confirm the designВерификатор не может увидеть подтверждение, которого не было.Перенесите в On block: как решение, которое должен принять человек.

Поручите написание /goal-draft

/goal-draft <что нужно сделать> — это встроенный навык, который делает всё вышеописанное за вас. Он читает ровно столько рабочего пространства, сколько нужно для определения области и реальных команд проверки, не запуская тесты, сборку, установку зависимостей или запуск сервисов. Он задаёт не более одного раунда вопросов, когда существенные выборы неясны, затем пишет компактную цель, обычно с 3–5 проверками завершения (меньше, когда достаточно). Явные требования сохраняются; он не добавляет проверки просто для достижения счётчика.

Для аудита завершение означает покрытие согласованных сценариев и отчёт о доказательствах, включая шаги воспроизведения подтверждённых дефектов. Отсутствие дефектов — допустимый результат. Черновик не должен придумывать минимальное количество сценариев, файлов доказательств, раундов исследования или дефектов.

Если критерий успеха, команда, входной путь или существенное решение не могут быть установлены, навык возвращает черновик с пометкой «Needs clarification» и пунктами <TODO: …>. Он не предлагает этот черновик на одобрение и не печатает запускаемую команду /goal set или /goal edit. Необязательные значения по умолчанию помечаются [ASSUMPTION]; они не заменяют отсутствующие критерии успеха.

Когда цель готова, интерактивный терминал или сессия Web Shell может показать диалог одобрения propose_goal, описанный ниже. Клиенты без поддержки предложения Goal, headless-запуски, сессии с отключённым инструментом и сессии с активным Goal вместо этого получают команду для ручного запуска. Передача говорит о том, что черновик не был применён. Навык никогда не начинает работу самостоятельно, и ничего не устанавливается без вашего одобрения.

Передайте существующую цель для её ужесточения: /goal-draft all tests pass and the lint is clean. Для активного Goal явный запрос на ужесточение создаёт /goal edit; замена использует /goal set. Если предполагаемая операция неясна, навык включает этот выбор в свой единственный раунд вопросов.

Одобрение Goal, предложенного моделью

В интерактивном терминале или в ходе Web Shell с подключённым клиентом модель имеет инструмент propose_goal. Когда /goal-draft завершается, или когда вы запрашиваете результат, охватывающий несколько ходов, она может предложить цель вместо того, чтобы печатать строку /goal set … для копирования. Предложение появляется как диалог одобрения, показывающий полную цель. Одобрение устанавливает Goal точно так же, как это сделал бы /goal set, в момент завершения текущего хода (модель подтверждает и останавливается; первый ход Goal затем начинается самостоятельно), а отклонение ничего не устанавливает — модель видит только то, что вызов инструмента не был разрешён, и её инструкции говорят не спрашивать почему и не предлагать ту же цель снова. Одобрение привязано к ходу, который запросил его: если этот ход отменён или иначе не достигает завершения, одобрение отбрасывается, а не применяется под последующим сообщением или автоматическим ходом. Ни одно правило разрешений или режим одобрения (включая YOLO) не пропускает этот диалог, и инструмент отказывает в работе, пока другой Goal активен, в режиме плана и в недоверенных папках; субагентам он никогда не предлагается. Web Shell использует свою существующую панель разрешений Allow/Reject. Остановленный Goal может быть заменён только если он всё ещё совпадает с версией, показанной для одобрения; его изменение делает предложение недействительным. Headless-запуски, доставки через канал Web Shell и автоматические ходы, а также клиенты ACP без необходимой поддержки одобрения и жизненного цикла ходов сохраняют печатную передачу /goal set.

Отключите его с помощью goals.modelProposed: "disabled" в пользовательских настройках. Поскольку настройка определяет, может ли модель попросить вас запустить автономный цикл, она учитывается только из пользовательской и системной области; значение в .qwen/settings.json рабочего пространства игнорируется с предупреждением.

Навык проинструктирован быть read-only, и только его неизменяющие инструменты автоматически одобряются (get_goal, read_file, glob, grep_search). ask_user_question намеренно не одобряется автоматически, поэтому его диалог вопросов отображается перед тем, как навык составит черновик из ваших ответов. Как и другие встроенные навыки, проект или личный навык с именем goal-draft переопределяет его, а skills.disabled может его отключить. См. Skills для информации об обнаружении встроенных навыков.

Last updated on