0.4.11
07 · Руководство пользователя

07. Долгие задачи (/goal)

/goal — это способ сказать AstraCode: «вот задача, которая займёт не один turn и, возможно, не один день. Помни про неё».

Зачем

Без цели: - Каждый /new стирает контекст. - При длинной сессии модель «забывает» что было в начале (compact). - Через 3 дня вы вернулись и AstraCode не помнит, чем занимались.

С целью: - Цель переживает /new, /clear, перезапуск. - При следующем запуске AstraCode сам предложит продолжить. - В каждый turn модель видит «active goal: ...» — не теряет фокус. - Можно поставить бюджет в токенах — агент остановится, когда исчерпает.

Базовое использование

Поставить цель

text
/goal Реализовать OAuth-логин через Google

После этого: - Цель сохраняется в локальной БД (~/.astracode/state_5.sqlite). - В status line появляется индикатор цели. - В каждый turn модели подмешивается контекст цели.

Цель с бюджетом

text
/goal --budget 300k Реализовать OAuth-логин через Google

Суффиксы: - k — тысячи токенов (300k = 300 000). - m — миллионы (1m = 1 000 000).

--budget — это алиас для --tokens: можно писать и /goal --tokens 300k ....

Когда токены исчерпаются, цель переходит в статус budget_limited — модель не будет работать над ней, пока вы не повысите бюджет или не подтвердите продолжение.

Посмотреть текущую цель

text
/goal

Без аргумента откроется меню с текущей целью, прогрессом, статусом и подкомандами.

Подкоманды

Команда Что делает
/goal edit Изменить описание
/goal pause Пауза — модель не будет тянуть контекст цели
/goal resume Снять паузу
/goal clear Удалить цель
/goal budget 500k Установить или изменить лимит
/goal budget clear Снять лимит

Жизненный цикл цели

text
Создана  → активна (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: Один день, одна цель

Утром:

text
/goal Перевести модуль auth с custom session-store на Redis

Работаете несколько часов. Модель помнит, что главная задача — миграция auth. Иногда вы делаете отвлекающие запросы — она держит фокус.

К концу дня всё готово. Сами:

text
/goal clear

или просите модель:

text
Цель достигнута, очисти её.

Сценарий 2: Несколько дней, evidence-checked

Большая задача, которая займёт неделю:

День 1 (понедельник):

text
/goal --budget 1m Реализовать новый платёжный шлюз для PayPal v2 (соответствует ADR-053)

Работаете час, делаете архитектурный план, начинаете кодить. Перед уходом:

text
Закоммить текущий прогресс. Запиши состояние цели — что сделано, что осталось.

Модель может сохранять evidence о прогрессе (детали — в скилле goal-usage, он встроен), чтобы при возобновлении быстрее восстановить контекст.

День 2 (вторник):

bash
astracode

Цель активна — в status line виден индикатор цели, модель сразу подхватывает контекст и продолжает работу.

Если цель заблокирована. Когда модель упирается и не может продолжить, она ставит статус blocked. При следующем старте AstraCode предложит resume-prompt:

«У вас заблокированная цель: Реализовать новый платёжный шлюз... Возобновить заблокированную цель?»

Жмёте y — модель читает evidence, восстанавливает контекст, продолжает. Тот же prompt работает для целей на паузе (paused) и остановленных по лимиту (usage_limited).

День 5 (пятница):

text
/goal

Видите: 87% бюджета, осталось — webhook handlers. Цель почти готова.

Сценарий 3: Пауза посреди работы

text
/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 или перезапуска).

Можно попросить модель:

text
Покажи текущий прогресс по цели.

Очистка старых целей

Завершённые/отменённые цели остаются в БД. Чтобы не накапливались: - /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 и потерять контроль.

Регулярные чекпоинты

В конце дня:

text
Сделай чекпоинт по цели. Что сделано, что в работе, что осталось. Закоммить.

В понедельник утром:

text
Покажи статус цели и что планируешь делать дальше.

Когда /goal НЕ нужен

  • Одиночные правки бага.
  • Любые задачи длиной < 30 минут.
  • Когда вы сами держите контекст в голове (для коротких сессий это нормально).
  • Если задача неструктурированная — «давай поэксперементируем».

В этих случаях обычные turn'ы и /resume работают лучше.