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.
Синтаксис
/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.
Подкоманды
/goal edit # отредактировать описание цели /goal pause # поставить на паузу (агент не будет работать над целью) /goal resume # продолжить /goal clear # удалить цель /goal budget 300k # изменить лимит /goal budget clear # снять лимит
Popup автодополнения
Когда вы вводите /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) может учить модель фиксировать прогресс, но конкретный путь артефактов кодом не задаётся.
Хранение
~/.astracode/state_5.sqlite → table: goals (id, thread_id, description, budget, used, status, created_at)
2. /plan — режим планирования
/plan Refactor the auth module to use the new session API
В режиме /plan агент:
1. Анализирует задачу.
2. Излагает детальный план: шаги, риски, тесты.
3. Не трогает код, пока пользователь не подтвердит.
4. После подтверждения переходит в обычный режим и выполняет план.
Полезно для крупных рефакторингов и архитектурных изменений.
Параметр reasoning effort
plan_mode_reasoning_effort = "high"
В /plan обычно стоит high, чтобы модель тратила больше токенов на размышление перед действием.
Поведение /plan
/planбез аргументов — просто включает режим планирования./plan <инструкции>— включает режим планирования и сразу отправляет текст после команды как пользовательское сообщение (то есть задаёт агенту задачу для планирования).
Отдельной подкоманды /plan clear нет: всё, что идёт после /plan, трактуется как обычное сообщение. Чтобы выйти из режима, отправьте обычный запрос без /plan (после одобрения и выполнения плана режим снимается).
3. /side — побочный разговор
/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 — режим совместной работы
/collab
Открывает popup выбора режима. Доступно, если включено:
[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
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?».