07. Долгие задачи (/goal)
/goal — это способ сказать AstraCode: «вот задача, которая займёт не один turn и, возможно, не один день. Помни про неё».
Зачем
Без цели:
- Каждый /new стирает контекст.
- При длинной сессии модель «забывает» что было в начале (compact).
- Через 3 дня вы вернулись и AstraCode не помнит, чем занимались.
С целью:
- Цель переживает /new, /clear, перезапуск.
- При следующем запуске AstraCode сам предложит продолжить.
- В каждый turn модель видит «active goal: ...» — не теряет фокус.
- Можно поставить бюджет в токенах — агент остановится, когда исчерпает.
Базовое использование
Поставить цель
/goal Реализовать OAuth-логин через Google
После этого:
- Цель сохраняется в локальной БД (~/.astracode/state_5.sqlite).
- В status line появляется индикатор цели.
- В каждый turn модели подмешивается контекст цели.
Цель с бюджетом
/goal --budget 300k Реализовать OAuth-логин через Google
Суффиксы:
- k — тысячи токенов (300k = 300 000).
- m — миллионы (1m = 1 000 000).
--budget — это алиас для --tokens: можно писать и /goal --tokens 300k ....
Когда токены исчерпаются, цель переходит в статус budget_limited — модель не будет работать над ней, пока вы не повысите бюджет или не подтвердите продолжение.
Посмотреть текущую цель
/goal
Без аргумента откроется меню с текущей целью, прогрессом, статусом и подкомандами.
Подкоманды
| Команда | Что делает |
|---|---|
/goal edit |
Изменить описание |
/goal pause |
Пауза — модель не будет тянуть контекст цели |
/goal resume |
Снять паузу |
/goal clear |
Удалить цель |
/goal budget 500k |
Установить или изменить лимит |
/goal budget clear |
Снять лимит |
Жизненный цикл цели
Создана → активна (active)
↓
работа идёт ходами
↓
┌─ выполнена → /goal clear (или статус "complete")
├─ заблокирована (модель не знает как) → модель сама ставит статус "blocked"
├─ паузу поставили → /goal pause
├─ бюджет исчерпан → /goal budget +N
└─ всё, надоело → /goal clear
Статусы: - active — над целью работают. - paused — поставлена на паузу вручную. - blocked — модель сообщила, что не может продолжить (нужно ваше вмешательство). - complete — модель решила, что цель достигнута. - usage_limited — достигнут лимит использования AstraCode-аккаунта/тарифа (rate limits), а не time budget. Отдельного time-бюджета у целей нет. - budget_limited — исчерпан token budget.
Сценарий 1: Один день, одна цель
Утром:
/goal Перевести модуль auth с custom session-store на Redis
Работаете несколько часов. Модель помнит, что главная задача — миграция auth. Иногда вы делаете отвлекающие запросы — она держит фокус.
К концу дня всё готово. Сами:
/goal clear
или просите модель:
Цель достигнута, очисти её.
Сценарий 2: Несколько дней, evidence-checked
Большая задача, которая займёт неделю:
День 1 (понедельник):
/goal --budget 1m Реализовать новый платёжный шлюз для PayPal v2 (соответствует ADR-053)
Работаете час, делаете архитектурный план, начинаете кодить. Перед уходом:
Закоммить текущий прогресс. Запиши состояние цели — что сделано, что осталось.
Модель может сохранять evidence о прогрессе (детали — в скилле goal-usage, он встроен), чтобы при возобновлении быстрее восстановить контекст.
День 2 (вторник):
astracode
Цель активна — в status line виден индикатор цели, модель сразу подхватывает контекст и продолжает работу.
Если цель заблокирована. Когда модель упирается и не может продолжить, она ставит статус blocked. При следующем старте AstraCode предложит resume-prompt:
«У вас заблокированная цель: Реализовать новый платёжный шлюз... Возобновить заблокированную цель?»
Жмёте y — модель читает evidence, восстанавливает контекст, продолжает. Тот же prompt работает для целей на паузе (paused) и остановленных по лимиту (usage_limited).
День 5 (пятница):
/goal
Видите: 87% бюджета, осталось — webhook handlers. Цель почти готова.
Сценарий 3: Пауза посреди работы
/goal pause
Модель не будет тянуть контекст цели — например, если хотите спокойно ответить на пользовательский тикет, не отвлекаясь от рефакторинга.
Закончили — /goal resume. Цель снова активна.
Скилл goal-usage — лучшие практики
Встроенный скилл goal-usage учит модель работать с целями правильно:
- Сохранять evidence после каждого важного шага.
- Делить большую цель на проверяемые подзадачи.
- Проверять прогресс перед coast'ом следующего turn'а.
Скилл активируется автоматически, когда есть цель. Если нет — $goal-usage явно.
Что считается «слишком долгой» целью
Если задача требует:
- Больше 5 рабочих дней — лучше разбейте на 2-3 цели.
- Больше 2M токенов — попросите AstraCode помочь разбить.
- Большую неопределённость в требованиях — сначала /plan, потом цель.
/goal хорошо работает для задач от 30 минут до недели. Для задач крупнее — он будет «гулять» по приоритетам.
Goals vs Plan vs Side
Не путайте:
| Команда | Когда |
|---|---|
/goal |
Долгая задача, переживает сессии |
/plan |
Перед действием — сначала план, потом код |
/side |
Уточнение, не загрязняющее основной разговор |
Они комбинируются:
- Цель + /plan = модель сначала пишет план достижения цели, потом исполняет.
- Цель + /side = side-вопрос не «съедает» бюджет цели.
См. также 09-side-conversations.md.
Контроль бюджета
В status line виден индикатор цели, а через /goal открывается меню с текущим расходом бюджета (сколько токенов использовано из установленного лимита).
Когда подходите к лимиту — варианты:
1. Увеличить: /goal budget 500k.
2. Снять лимит: /goal budget clear (опасно — может затянуться).
3. Закрыть как complete: если, по факту, достаточно.
4. Поставить blocked: если упёрлись и нужна ваша помощь.
Несколько целей в одной директории
Сейчас активна одна цель на тред. Если нужна параллельно вторая — /fork (создать копию треда) и в копии задать другую цель.
Когда обе будут разрешены — /resume к нужной.
Артефакты цели
Если активен скилл goal-usage (он встроен), модель может сохранять evidence о прогрессе цели — что сделано, что осталось, какие решения приняты. Эти заметки помогают модели быстрее восстановить контекст при возобновлении (например, после /goal resume или перезапуска).
Можно попросить модель:
Покажи текущий прогресс по цели.
Очистка старых целей
Завершённые/отменённые цели остаются в БД. Чтобы не накапливались:
- /goal clear — удалить активную.
- Раз в N месяцев — sqlite3 ~/.astracode/state_5.sqlite "DELETE FROM thread_goals WHERE status = 'complete';" (для продвинутых). Статуса cleared нет: /goal clear сразу удаляет строку цели, а не переводит её в отдельный статус.
В UI отдельной команды «список всех целей» пока нет — только текущая.
Best practices
Хорошие цели
✓ «Реализовать OAuth-логин через Google» — конкретная фича.
✓ «Мигрировать БД с MySQL на PostgreSQL» — крупная, но измеримая.
✓ «Покрыть тестами модуль auth (текущее покрытие 12%, цель — 70%)» — с метрикой.
Плохие цели
✗ «Сделать проект хорошим» — нечётко.
✗ «Помочь мне с разными задачами» — нет конкретики.
✗ «Написать всё с нуля» — нет границ.
Бюджет — обоснованно
- Маленькая фича (один файл, день работы): 50-100k.
- Средняя фича (несколько модулей, 2-3 дня): 200-500k.
- Крупная фича (новый модуль, неделя): 500k-2m.
- Архитектурная миграция: 2-5m.
Лучше поставить меньше и поднять, чем сразу clear и потерять контроль.
Регулярные чекпоинты
В конце дня:
Сделай чекпоинт по цели. Что сделано, что в работе, что осталось. Закоммить.
В понедельник утром:
Покажи статус цели и что планируешь делать дальше.
Когда /goal НЕ нужен
- Одиночные правки бага.
- Любые задачи длиной < 30 минут.
- Когда вы сами держите контекст в голове (для коротких сессий это нормально).
- Если задача неструктурированная — «давай поэксперементируем».
В этих случаях обычные turn'ы и /resume работают лучше.