07. Долгие задачи (/goal)
/goal — это способ сказать AstraCode: «вот задача, которая займёт не один turn и, возможно, не один день. Помни про неё».
Зачем
Без цели:
- Каждый /new стирает контекст.
- При длинной сессии модель «забывает» что было в начале (compact).
- Через 3 дня вы вернулись и AstraCode не помнит, чем занимались.
С целью:
- Цель переживает /new, /clear, перезапуск.
- При следующем запуске AstraCode сам предложит продолжить.
- В каждый turn модель видит «active goal: ...» — не теряет фокус.
- Можно поставить бюджет в токенах — агент остановится, когда исчерпает.
Базовое использование
Поставить цель
/goal Реализовать OAuth-логин через Google
После этого:
- Цель сохраняется в локальной БД (~/.astracode/state_5.sqlite, таблица thread_goals).
- В status line появляется индикатор цели.
- В каждый turn модели подмешивается контекст цели.
Если цель уже задана, /goal <новая формулировка> сначала покажет запрос подтверждения — заменять ли текущую цель новой.
Цель с бюджетом
/goal --budget 300k Реализовать OAuth-логин через Google
Суффиксы:
- k — тысячи токенов (300k = 300 000).
- m — миллионы (1m = 1 000 000).
Когда токены исчерпаются, цель переходит в статус «остановлена по бюджету» — модель не будет работать над ней, пока вы не повысите бюджет или не подтвердите продолжение.
Посмотреть текущую цель
/goal
Без аргумента /goal печатает в историю чата текстовую сводку по текущей цели (Цель / Статус / Формулировка / Время / Токены / Бюджет). Это не интерактивное меню. Если цель ещё не задана — выводится краткая подсказка по использованию и сообщение «цель ещё не задана».
Ту же сводку расхода можно увидеть в /status.
Подкоманды
| Команда | Что делает |
|---|---|
/goal edit |
Изменить описание |
/goal pause |
Пауза — модель не будет тянуть контекст цели |
/goal resume |
Снять паузу |
/goal clear |
Удалить цель |
/goal budget 500k |
Установить или изменить лимит |
/goal budget clear |
Снять лимит |
Жизненный цикл цели
Создана → активна
↓
работа идёт ходами
↓
┌─ достигнута → /goal clear
├─ заблокирована (модель не знает как) → нужно ваше вмешательство
├─ паузу поставили → /goal pause
├─ бюджет исчерпан → /goal budget +N
└─ всё, надоело → /goal clear
Статусы (в русской локали):
- активна — над целью работают.
- на паузе — поставлена на паузу вручную (/goal pause).
- заблокирована — модель сообщила, что не может продолжить (нужно ваше вмешательство).
- достигнута — модель решила, что цель достигнута.
- остановлена по лимиту — превышен лимит по времени.
- остановлена по бюджету — исчерпан лимит токенов.
Сценарий 1: Один день, одна цель
Утром:
/goal Перевести модуль auth с custom session-store на Redis
Работаете несколько часов. Модель помнит, что главная задача — миграция auth. Иногда вы делаете отвлекающие запросы — она держит фокус.
К концу дня всё готово. Сами:
/goal clear
или просите модель:
Цель достигнута, очисти её.
Сценарий 2: Несколько дней, с регулярными чекпоинтами
Большая задача, которая займёт неделю:
День 1 (понедельник):
/goal --budget 1m Реализовать новый платёжный шлюз для PayPal v2 (соответствует ADR-053)
Работаете час, делаете архитектурный план, начинаете кодить. Перед уходом:
Закоммить текущий прогресс. Кратко зафиксируй в чате, что сделано, что осталось.
Состояние самой цели (формулировка, статус, расход бюджета) хранится в локальной БД (~/.astracode/state_5.sqlite, таблица thread_goals) и переживает перезапуск. Чтобы сохранить детали хода работы, коммитьте код и оставляйте заметки в репозитории (commit-сообщения, AGENTS.md).
День 2 (вторник):
astracode
При старте AstraCode спросит:
«У вас активная цель: Реализовать новый платёжный шлюз... 18% бюджета использовано. Продолжить?»
Жмёте y — модель восстанавливает контекст цели и продолжает.
День 5 (пятница):
/goal
Сводка покажет: статус, использованный бюджет, время. Дальше можно ориентироваться по коммитам и заметкам — цель почти готова.
Сценарий 3: Пауза посреди работы
/goal pause
Модель не будет тянуть контекст цели — например, если хотите спокойно ответить на пользовательский тикет, не отвлекаясь от рефакторинга.
Закончили — /goal resume. Цель снова активна.
Скилл goal-usage — лучшие практики
Встроенный скилл goal-usage — это набор текстовых рекомендаций, который учит модель работать с целями правильно (никаких файлов он не создаёт):
- Фиксировать подтверждения сделанного (коммиты, тесты, заметки) после каждого важного шага.
- Делить большую цель на проверяемые подзадачи.
- Сверяться с прогрессом, прежде чем планировать следующий ход.
Скилл активируется автоматически, когда есть цель. Если нет — вызовите $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 показывает текущий расход цели:
Цель: Реализовать OAuth ← формулировка Статус: активна Бюджет: 145,000 / 300,000 (48%) ← вот сколько использовано Начата: 2 дня назад
Когда подходите к лимиту — варианты:
1. Увеличить: /goal budget 500k.
2. Снять лимит: /goal budget clear (опасно — может затянуться).
3. Очистить цель: /goal clear, если, по факту, достаточно.
4. Поставить на паузу: /goal pause, если упёрлись и нужна ваша помощь.
Несколько целей в одной директории
Сейчас активна одна цель на тред. Если нужна параллельно вторая — /fork (создать копию треда) и в копии задать другую цель.
Когда обе будут разрешены — /resume к нужной.
Где хранится цель
Отдельных файлов-артефактов цели (progress/plan/decisions/todo) AstraCode не создаёт. Всё состояние цели лежит в локальной БД:
~/.astracode/state_5.sqlite → таблица thread_goals
Там хранятся формулировка, статус, бюджет и расход. Эти данные привязаны к треду и переживают перезапуск. Посмотреть текущую цель можно командой /goal (текстовая сводка) или /status.
Чтобы зафиксировать детали хода работы для себя и для модели — коммитьте код и ведите заметки в репозитории (commit-сообщения, AGENTS.md).
Очистка старых целей
Завершённые/отменённые цели остаются в БД. Чтобы не накапливались:
- /goal clear — удалить активную.
- Раз в N месяцев — sqlite3 ~/.astracode/state_5.sqlite "DELETE FROM thread_goals WHERE status = 'complete';" (для продвинутых; в БД статус «достигнута» хранится как complete).
В UI отдельной команды «список всех целей» пока нет — только текущая.
Best practices
Хорошие цели
✓ «Реализовать OAuth-логин через Google» — конкретная фича.
✓ «Мигрировать БД с MySQL на PostgreSQL» — крупная, но измеримая.
✓ «Покрыть тестами модуль auth (текущее покрытие 12%, цель — 70%)» — с метрикой.
Плохие цели
✗ «Сделать проект хорошим» — нечётко.
✗ «Помочь мне с разными задачами» — нет конкретики.
✗ «Написать всё с нуля» — нет границ.
Бюджет — обоснованно
- Маленькая фича (один файл, день работы): 50-100k.
- Средняя фича (несколько модулей, 2-3 дня): 200-500k.
- Крупная фича (новый модуль, неделя): 500k-2m.
- Архитектурная миграция: 2-5m.
Лучше поставить меньше и поднять, чем сразу clear и потерять контроль.
Регулярные чекпоинты
В конце дня:
Сделай чекпоинт по цели. Что сделано, что в работе, что осталось. Закоммить.
В понедельник утром:
/goal
Посмотрите сводку по цели, затем попросите модель напомнить план на день.
Когда /goal НЕ нужен
- Одиночные правки бага.
- Любые задачи длиной < 30 минут.
- Когда вы сами держите контекст в голове (для коротких сессий это нормально).
- Если задача неструктурированная — «давай поэксперементируем».
В этих случаях обычные turn'ы и /resume работают лучше.