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

12. Память

По умолчанию AstraCode помнит только то, что в текущей сессии. После /new или перезапуска — контекст с нуля (но AGENTS.md проекта читается).

Memory — это система, которая позволяет AstraCode помнить факты между сессиями: - Ваш стиль и предпочтения. - Контекст текущей рабочей задачи (что вы делали вчера). - Решения, которые вы приняли в проекте. - Названия и пути ваших систем (Linear проекты, Slack каналы, и т.п.).

Зачем

Без памяти:

text
[Сессия в понедельник]
You: Привет! Я работаю над OAuth-логином в backend.
You: Используем PostgreSQL и redis для сессий.
You: ...

[Сессия в среду]
You: продолжи работу над OAuth
AstraCode: А что такое OAuth у вас? Что использовали для сессий?

С памятью:

text
[Сессия в понедельник]
You: Привет! Я работаю над OAuth-логином в backend.
You: Используем PostgreSQL и redis для сессий.
... (через 2 дня память сохраняет ключевые факты) ...

[Сессия в среду]
You: продолжи работу над OAuth
AstraCode: Помню — OAuth-логин для backend, PostgreSQL + redis для сессий. 
Я вижу что в прошлый раз мы остановились на implementation provider'а Google.

Включение

По умолчанию выключена (приватность). Включить:

text
/memories

Откроется экран настроек:

text
┌─ Memory settings ──────────────────────────────────┐
│   ☐ Use memories                                   │
│   ☐ Generate memories                              │
│   [Reset all memories]                             │
└────────────────────────────────────────────────────┘
Toggle Что делает
Use memories Подмешивает память в новые сессии
Generate memories Извлекает память из прошлых сессий
Reset all Сотрёт всё накопленное

Включите обе — иначе: - Только generate без use — копится, но не используется. - Только use без generate — память не пополняется.

Или через ~/.astracode/config.toml:

toml
[memories]
generate_memories = true
use_memories = true

После включения — перезапустите сессию (/new), и память начнёт работать.

Как работает

Phase 1: извлечение

При старте root-сессии AstraCode фоном запускает Phase 1: 1. Отбирает rollout'ы прошлых сессий, которые простаивают 6+ часов (порог min_rollout_idle_hours = 6) — это фильтр, какие rollout'ы обрабатывать, а не задержка запуска. 2. Просит дешёвую модель извлечь устойчивые факты. 3. Сохраняет в ~/.astracode/memories/raw_memories.md.

«Устойчивые факты» = то, что будет верно и через неделю: - «Пользователь — senior Rust developer, работает с web backends». - «Проект использует PostgreSQL 15 и redis для сессий». - «Для тестов в этом репо — cargo nextest, не cargo test».

Что НЕ извлекается: - Эфемерные детали («сейчас работаю над файлом X»). - Конкретные значения переменных и патчей. - Секреты, API-ключи (модель явно проинструктирована не извлекать).

Phase 2: консолидация

Сразу после Phase 1 (при том же старте сессии) запускается Phase 2: 1. AstraCode читает накопленные raw_memories.md. 2. Запускает внутреннего агента-консолидатора без сетевого доступа. 3. Агент структурирует факты в ~/.astracode/memories/: - MEMORY.md — короткий «searchable registry»: модель ищет и читает его сама по ключевым словам. - memory_summary.md — обзорное резюме, оно инжектится в system prompt новых сессий. - skills/<skill-name>/ — переиспользуемые процедуры (скиллы памяти), со своим SKILL.md. - extensions/ — memory extensions (расширения памяти со своими источниками и instructions.md).

Phase 3: использование

При старте новой сессии (/new или запуск AstraCode): 1. Если use_memories = true — в system prompt инжектится memory_summary.md (обзорное резюме). 2. MEMORY.md целиком в prompt не попадает — это searchable registry, который модель ищет и читает сама по мере необходимости.

Где живёт память

text
~/.astracode/memories/
├── .git/                      ← всё под git-контролем (можете смотреть git log)
├── MEMORY.md                  ← searchable registry — модель ищет/читает сама
├── memory_summary.md          ← обзорное резюме, инжектится в prompt
├── raw_memories.md            ← сырая извлечённая память (Phase 1 output)
├── phase2_workspace_diff.md   ← git-стиль diff что Phase 2 изменил
├── rollout_summaries/         ← резюме старых сессий
│   ├── 2026-05-15-abc123.md
│   └── 2026-05-20-def456.md
├── skills/                    ← переиспользуемые процедуры (скиллы памяти)
│   └── <skill-name>/
│       ├── SKILL.md
│       ├── scripts/           ← опционально
│       ├── examples/          ← опционально
│       └── templates/         ← опционально
└── extensions/                ← memory extensions со своими источниками
    └── <extension>/
        └── instructions.md

Папка под git — каждое изменение Phase 2 коммитится автоматически. Хотите посмотреть, как менялась память:

bash
cd ~/.astracode/memories
git log --oneline
git diff HEAD~5

Типы памяти

«Типы памяти» — это секции внутри MEMORY.md (searchable registry), а не отдельные файлы. Phase 2 раскладывает факты по этим секциям; модель при поиске читает нужную часть.

user — про вас

  • Роль, опыт, цели.
  • Стиль работы (предпочитаете план / сразу действие).
  • Что не любите.

Пример:

markdown
Тимур, магистрант МГТУ им. Баумана (каф. ИУ-1).
Технически сильный, работает на русском.
Предпочитает короткие ответы, не любит, когда модель повторяет очевидное.

feedback — ваши корректировки

Когда вы пишете «нет, не так, лучше делай Y» — это запоминается.

Пример:

markdown
**Не мокать БД в integration-тестах.** 
Why: прошлый инцидент — мок прошёл, прод упал на миграции.
How to apply: интеграционные тесты должны использовать docker postgres.

project — про проект

Декомпозиция, цели, дедлайны, стейкхолдеры.

Пример:

markdown
**OAuth-миграция** — необходимо для compliance к 2026-07-01.
Why: legal flagged session token storage as non-compliant.
How to apply: предпочитаем compliance > ergonomics при scope-решениях.

reference — указатели

Где что искать.

Пример:

markdown
Pipeline-баги тречатся в Linear проект **INGEST**.
Если пользователь упоминает «pipeline issue» — это туда.

Управление руками

Посмотреть память

bash
ls ~/.astracode/memories/
cat ~/.astracode/memories/MEMORY.md

Или попросите AstraCode:

text
Покажи, что ты обо мне помнишь.

Удалить конкретный факт

Отредактируйте соответствующую секцию в MEMORY.md:

bash
nano ~/.astracode/memories/MEMORY.md
# отредактировать секцию, сохранить

При следующей Phase 2 изменение может быть переписано — лучше отредактировать через AstraCode:

text
Удали из памяти факт «X». Я больше так не делаю.

Полный сброс

В /memories: - Выбрать Reset all memories. - Подтвердить.

Сотрётся вся папка ~/.astracode/memories/. Безвозвратно (кроме git-истории внутри).

Или вручную:

bash
rm -rf ~/.astracode/memories

Сценарии

Сценарий: новый проект

  1. Включите memory: /memories → toggle on.
  2. Поработайте 3-5 сессий с этим проектом.
  3. Phase 1 за это время извлечёт факты.
  4. Phase 2 утрамбует их в секцию project внутри MEMORY.md.
  5. В следующих сессиях AstraCode уже знает контекст.

Сценарий: смена работы

  1. Закончили проект — память останется (это не плохо, но может загромождать).
  2. Можете удалить отдельную секцию в MEMORY.md (или соответствующий rollout summary).
  3. Phase 2 при следующем запуске обновит MEMORY.md.

Сценарий: «не помни то, что я сейчас сказал»

Иногда вы говорите что-то ситуативное:

text
В этой сессии давай поэкспериментируем с подходом X, в проде так не делаем.

В Phase 1 модель учится не извлекать такие факты. Но если что-то всё-таки попало в память:

text
Забудь, что я говорил про подход X.

AstraCode удалит соответствующую запись.

Memory и приватность

Что попадает

  • Ваше имя, роль, контекст работы (если вы их упоминали).
  • Названия ваших проектов.
  • Стиль, предпочтения, корректировки.
  • Решения и их обоснования.

Что НЕ должно попадать

  • API-ключи, пароли, токены (модель проинструктирована).
  • Конкретные значения переменных, патчи.
  • Эфемерные «я сейчас работаю над X».

Если случайно что-то приватное попало — отредактируйте файл вручную или Reset all.

Где хранится

  • Локально на вашей машине.
  • В ~/.astracode/memories/ (под git, но git только локальный, не remote).
  • Не отправляется на серверы AstraCode.
  • При генерации/консолидации отправляется в провайдер (модель) — но как и любой ваш промпт.

Когда отключить

  • В корпоративной среде, где не хочется хранить контекст работы.
  • На общей машине — память видна другим пользователям с доступом к ~/.astracode/.
  • Если используете AstraCode для разовых задач — экономит токены.
text
/memories

→ выключить toggle'ы.

Или:

toml
[memories]
use_memories = false
generate_memories = false

Memory vs AGENTS.md

Не путайте:

AGENTS.md Memory
Где В корне репо ~/.astracode/memories/
Управление Руками (вы пишете) Автоматически (модель извлекает)
Под git с проектом? Да (коммитится в репо) Нет (только локально)
Scope Проект Все ваши проекты
Изменчивость Стабильный Меняется по мере работы

Хорошая практика: AGENTS.md для стабильных проектных фактов (команды сборки, конвенции), memory для динамичных пользовательских предпочтений и контекста.

Phase 2 модель и стоимость

Phase 1 (extract) использует дешёвую модель — по умолчанию gpt-5.4-mini (extract_model), токены минимальны.

Phase 2 (consolidate) использует сильную модель — по умолчанию gpt-5.4 (consolidation_model); стоит заметнее, но запускается только при старте root-сессии, сразу после Phase 1.

Можно настроить:

toml
[memories]
extract_model = "gpt-5.4-mini"
consolidation_model = "gpt-5.4"

Если у вас локальный провайдер — оба могут быть локальной моделью.

Best practices

Включайте после установки, поработайте 1-2 недели — память «настроится» на вас.
Просматривайте MEMORY.md периодически — что AstraCode о вас «думает».
Корректируйте, если что-то неверно.
Под git — папка memories под локальным git'ом, всегда можно откатить.
Не храните секреты в памяти — даже если AstraCode не извлёк, не просите запомнить.
Не делайте Reset, если не уверены — потеряете полезный накопленный контекст.

Если что-то не работает

  • Не помнит — проверьте, что обе toggle включены (use и generate).
  • Phase 1 не запустилась — она запускается при старте root-сессии и отбирает rollout'ы, простаивающие 6+ часов (min_rollout_idle_hours). Если свежих idle-роллаутов нет — обрабатывать нечего.
  • Phase 2 не запустилась — проверьте ~/.astracode/log/, может быть ошибка модели.
  • Память «загрязнилась» случайным фактом — отредактируйте MEMORY.md руками или Reset all.