0.4.11
13 · Техническая документация

13. Режимы работы: /goal, /plan, /side, /collab

AstraCode имеет несколько режимов, влияющих на поведение агента в текущей сессии. Они комбинируются: можно быть одновременно в /plan и иметь активный /goal.

1. /goal — долгоиграющая цель

Цель — это устойчивое описание задачи, которое: - Сохраняется между сессиями (выживает /new, /clear, перезапуск). - Может иметь лимит токенов (budget) — агент остановится, когда исчерпает. - Имеет статус: Active, Paused, Blocked, UsageLimited, BudgetLimited, Complete (enum ThreadGoalStatus в app-server-protocol/src/protocol/v2.rs). - Может быть продолжена через /goal resume после закрытия TUI.

Синтаксис

text
/goal Implement user-facing OAuth flow with Google as IdP
/goal --budget 200k Implement OAuth flow

--budget принимает суффиксы k, m: 100k = 100,000 токенов, 1m = 1,000,000.

Подкоманды

text
/goal edit             # отредактировать описание цели
/goal pause            # поставить на паузу (агент не будет работать над целью)
/goal resume           # продолжить
/goal clear            # удалить цель
/goal budget 300k      # изменить лимит
/goal budget clear     # снять лимит

Когда вы вводите /goal, открывается popup с подсказками: - Если ввод пустой или произвольный текст → echo-row предлагает использовать введённое как описание цели. - Если ввод начинается с edit/resume/pause/clear/budget → показываются подкоманды.

Это сделано через bottom_pane/goal_args_popup.rs (GoalRow::Subcommand / GoalRow::Echo).

Статус цели в TUI

Меню /goal показывает текущий статус (Active, Paused, BudgetLimited и т.д.), описание и лимит токенов в компактном виде (см. tui/src/chatwidget/goal_menu.rs). Для статусов BudgetLimited/UsageLimited предлагаются команды снятия/изменения лимита и продолжения.

Примечание (концепт, не реализовано): отдельный блок ACTIVE GOAL: в системном промпте и каталог артефактов-доказательств ~/.astracode/goal_artifacts/<goal_id>/ в текущем коде не подтверждены. Скилл goal-usage (см. 05-skills.md) может учить модель фиксировать прогресс, но конкретный путь артефактов кодом не задаётся.

Хранение

text
~/.astracode/state_5.sqlite
  → table: goals (id, thread_id, description, budget, used, status, created_at)

2. /plan — режим планирования

text
/plan Refactor the auth module to use the new session API

В режиме /plan агент: 1. Анализирует задачу. 2. Излагает детальный план: шаги, риски, тесты. 3. Не трогает код, пока пользователь не подтвердит. 4. После подтверждения переходит в обычный режим и выполняет план.

Полезно для крупных рефакторингов и архитектурных изменений.

Параметр reasoning effort

toml
plan_mode_reasoning_effort = "high"

В /plan обычно стоит high, чтобы модель тратила больше токенов на размышление перед действием.

Поведение /plan

  • /plan без аргументов — просто включает режим планирования.
  • /plan <инструкции> — включает режим планирования и сразу отправляет текст после команды как пользовательское сообщение (то есть задаёт агенту задачу для планирования).

Отдельной подкоманды /plan clear нет: всё, что идёт после /plan, трактуется как обычное сообщение. Чтобы выйти из режима, отправьте обычный запрос без /plan (после одобрения и выполнения плана режим снимается).

3. /side — побочный разговор

text
/side Quick question: how does the rollout recorder serialize tool calls?

/side создаёт временное ответвление от основного треда: - Новый под-тред с собственным контекстом. - Не влияет на основную сессию. - Закрывается клавишей Esc → возврат в main (отдельной команды выхода нет). - При выходе данные побочного разговора не сохраняются в основной истории (но пишутся в отдельный rollout).

Полезные сценарии: - Уточнить понимание кода во время большой задачи без отвлечения основной цели. - Спросить про API/функцию, не «загрязняя» основной контекст. - Прервать модель и быстро сделать одноразовую правку.

Ограничения внутри /side

  • Нельзя вложенный /side.
  • Большинство команд недоступны: только /help, /copy, /diff, /mention, /status.
  • /goal, /plan, /model — недоступны (отлавливаются на этапе диспетчеризации с локализованным сообщением).

4. /collab — режим совместной работы

text
/collab

Открывает popup выбора режима. Доступно, если включено:

toml
[features]
collaboration_modes = true

Режимы (enum ModeKind в protocol/src/config_types.rs): - Default — обычный режим (по умолчанию). - Plan — режим планирования (тот же, что /plan): разрешён request-user-input, изменения не вносятся до подтверждения. - PairProgramming, Execute — определены в enum, но скрыты в TUI (#[doc(hidden)], не сериализуются).

В TUI попап /collab показывает только видимые режимы: Default и Plan (TUI_VISIBLE_COLLABORATION_MODES). Режим меняет системный промпт и инструменты.

5. Крейт code-mode (тематически связано)

Крейт code-mode/ реализует механику вложенных tool-call'ов (CodeModeService, CodeModeTurnWorker). Это не slash-команда — команды /code-mode в TUI нет.

6. Комбинации режимов

/goal /plan /side Что происходит
Обычная работа над целью
Сначала план, потом действия по цели
Side-разговор, цель приостановлена
Side-разговор с планированием, цель приостановлена

Цель никогда не «исчезает» — только приостанавливается на время /side или другой деятельности.

7. Авто-resume цели при старте

Концепт / не реализовано: автоматический resume цели при запуске с подтверждением [y/n] и опция [goal] auto_resume_on_startup в текущем коде не подтверждены (grep по auto_resume/auto_resume_on_startup совпадений не дал). Продолжение цели выполняется явной командой /goal resume.

8. Типичный сценарий работы с /goal

text
1. Пользователь:  /goal --budget 300k Add real-time collab to the editor
2. Модель:        излагает план (т.к. цель крупная), пишет в artifacts
3. Пользователь:  go
4. Модель:        реализует шаг 1 → commit → пишет evidence
5. Пользователь:  закрывает TUI

[через 3 дня]

6. Пользователь:  astracode
7. Пользователь:  /goal resume
8. Модель:        восстанавливает контекст цели и делает шаг 2

9. Команды и связанные файлы

  • /goal диспатч: astracode-rs/tui/src/chatwidget/slash_dispatch.rs:Goal
  • Popup аргументов: astracode-rs/tui/src/bottom_pane/goal_args_popup.rs
  • Логика целей: astracode-rs/core/src/goals.rs
  • Хранение целей (runtime/SQLite): astracode-rs/state/src/runtime/goals.rs
  • /plan диспатч: тот же файл, ветка Plan
  • /side диспатч: тот же файл, ветка Side
  • Side-разговор (жизненный цикл на уровне приложения): astracode-rs/tui/src/app/side.rs
  • Side-разговор (chat-surface): astracode-rs/tui/src/chatwidget/side.rs
  • Скилл goal-usage: astracode-rs/skills/src/assets/samples/goal-usage/

10. Рекомендации

  • Конкретные цели: «Implement OAuth» лучше, чем «Build entire SaaS».
  • Бюджет: ставьте обоснованный лимит (обычно 100k–500k для средней фичи).
  • Доказательства: учите модель писать artifacts (скилл goal-usage).
  • Pause при отвлечении: /goal pause если работаете над другим — модель не будет тянуть контекст цели.
  • Plan для крупного: всегда начинайте крупные цели с /plan.
  • Side для уточнений: не загрязняйте основной контекст вопросами «как работает X?».