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, таблица thread_goals). - В status line появляется индикатор цели. - В каждый turn модели подмешивается контекст цели.

Если цель уже задана, /goal <новая формулировка> сначала покажет запрос подтверждения — заменять ли текущую цель новой.

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

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

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

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

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

text
/goal

Без аргумента /goal печатает в историю чата текстовую сводку по текущей цели (Цель / Статус / Формулировка / Время / Токены / Бюджет). Это не интерактивное меню. Если цель ещё не задана — выводится краткая подсказка по использованию и сообщение «цель ещё не задана».

Ту же сводку расхода можно увидеть в /status.

Подкоманды

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

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

text
Создана  → активна
              ↓
        работа идёт ходами
              ↓
        ┌─ достигнута → /goal clear
        ├─ заблокирована (модель не знает как) → нужно ваше вмешательство
        ├─ паузу поставили → /goal pause
        ├─ бюджет исчерпан → /goal budget +N
        └─ всё, надоело → /goal clear

Статусы (в русской локали): - активна — над целью работают. - на паузе — поставлена на паузу вручную (/goal pause). - заблокирована — модель сообщила, что не может продолжить (нужно ваше вмешательство). - достигнута — модель решила, что цель достигнута. - остановлена по лимиту — превышен лимит по времени. - остановлена по бюджету — исчерпан лимит токенов.

Сценарий 1: Один день, одна цель

Утром:

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

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

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

text
/goal clear

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

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

Сценарий 2: Несколько дней, с регулярными чекпоинтами

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

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

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

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

text
Закоммить текущий прогресс. Кратко зафиксируй в чате, что сделано, что осталось.

Состояние самой цели (формулировка, статус, расход бюджета) хранится в локальной БД (~/.astracode/state_5.sqlite, таблица thread_goals) и переживает перезапуск. Чтобы сохранить детали хода работы, коммитьте код и оставляйте заметки в репозитории (commit-сообщения, AGENTS.md).

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

bash
astracode

При старте AstraCode спросит:

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

Жмёте y — модель восстанавливает контекст цели и продолжает.

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

text
/goal

Сводка покажет: статус, использованный бюджет, время. Дальше можно ориентироваться по коммитам и заметкам — цель почти готова.

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

text
/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 показывает текущий расход цели:

text
Цель: Реализовать 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 не создаёт. Всё состояние цели лежит в локальной БД:

text
~/.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 и потерять контроль.

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

В конце дня:

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

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

text
/goal

Посмотрите сводку по цели, затем попросите модель напомнить план на день.

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

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

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