12. Память
По умолчанию AstraCode помнит только то, что в текущей сессии. После /new или перезапуска — контекст с нуля (но AGENTS.md проекта читается).
Memory — это система, которая позволяет AstraCode помнить факты между сессиями: - Ваш стиль и предпочтения. - Контекст текущей рабочей задачи (что вы делали вчера). - Решения, которые вы приняли в проекте. - Названия и пути ваших систем (Linear проекты, Slack каналы, и т.п.).
Зачем
Без памяти:
[Сессия в понедельник] You: Привет! Я работаю над OAuth-логином в backend. You: Используем PostgreSQL и redis для сессий. You: ... [Сессия в среду] You: продолжи работу над OAuth AstraCode: А что такое OAuth у вас? Что использовали для сессий?
С памятью:
[Сессия в понедельник] You: Привет! Я работаю над OAuth-логином в backend. You: Используем PostgreSQL и redis для сессий. ... (через 2 дня память сохраняет ключевые факты) ... [Сессия в среду] You: продолжи работу над OAuth AstraCode: Помню — OAuth-логин для backend, PostgreSQL + redis для сессий. Я вижу что в прошлый раз мы остановились на implementation provider'а Google.
Включение
По умолчанию выключена (приватность). Включить:
/memories
Откроется экран настроек:
┌─ Memory settings ──────────────────────────────────┐ │ ☐ Use memories │ │ ☐ Generate memories │ │ [Reset all memories] │ └────────────────────────────────────────────────────┘
| Toggle | Что делает |
|---|---|
| Use memories | Подмешивает память в новые сессии |
| Generate memories | Извлекает память из прошлых сессий |
| Reset all | Сотрёт всё накопленное |
Включите обе — иначе:
- Только generate без use — копится, но не используется.
- Только use без generate — память не пополняется.
Или через ~/.astracode/config.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, который модель ищет и читает сама по мере необходимости.
Где живёт память
~/.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 коммитится автоматически. Хотите посмотреть, как менялась память:
cd ~/.astracode/memories git log --oneline git diff HEAD~5
Типы памяти
«Типы памяти» — это секции внутри MEMORY.md (searchable registry), а не отдельные файлы. Phase 2 раскладывает факты по этим секциям; модель при поиске читает нужную часть.
user — про вас
- Роль, опыт, цели.
- Стиль работы (предпочитаете план / сразу действие).
- Что не любите.
Пример:
Тимур, магистрант МГТУ им. Баумана (каф. ИУ-1). Технически сильный, работает на русском. Предпочитает короткие ответы, не любит, когда модель повторяет очевидное.
feedback — ваши корректировки
Когда вы пишете «нет, не так, лучше делай Y» — это запоминается.
Пример:
**Не мокать БД в integration-тестах.** Why: прошлый инцидент — мок прошёл, прод упал на миграции. How to apply: интеграционные тесты должны использовать docker postgres.
project — про проект
Декомпозиция, цели, дедлайны, стейкхолдеры.
Пример:
**OAuth-миграция** — необходимо для compliance к 2026-07-01. Why: legal flagged session token storage as non-compliant. How to apply: предпочитаем compliance > ergonomics при scope-решениях.
reference — указатели
Где что искать.
Пример:
Pipeline-баги тречатся в Linear проект **INGEST**. Если пользователь упоминает «pipeline issue» — это туда.
Управление руками
Посмотреть память
ls ~/.astracode/memories/ cat ~/.astracode/memories/MEMORY.md
Или попросите AstraCode:
Покажи, что ты обо мне помнишь.
Удалить конкретный факт
Отредактируйте соответствующую секцию в MEMORY.md:
nano ~/.astracode/memories/MEMORY.md # отредактировать секцию, сохранить
При следующей Phase 2 изменение может быть переписано — лучше отредактировать через AstraCode:
Удали из памяти факт «X». Я больше так не делаю.
Полный сброс
В /memories:
- Выбрать Reset all memories.
- Подтвердить.
Сотрётся вся папка ~/.astracode/memories/. Безвозвратно (кроме git-истории внутри).
Или вручную:
rm -rf ~/.astracode/memories
Сценарии
Сценарий: новый проект
- Включите memory:
/memories→ toggle on. - Поработайте 3-5 сессий с этим проектом.
- Phase 1 за это время извлечёт факты.
- Phase 2 утрамбует их в секцию
projectвнутриMEMORY.md. - В следующих сессиях AstraCode уже знает контекст.
Сценарий: смена работы
- Закончили проект — память останется (это не плохо, но может загромождать).
- Можете удалить отдельную секцию в
MEMORY.md(или соответствующий rollout summary). - Phase 2 при следующем запуске обновит
MEMORY.md.
Сценарий: «не помни то, что я сейчас сказал»
Иногда вы говорите что-то ситуативное:
В этой сессии давай поэкспериментируем с подходом X, в проде так не делаем.
В Phase 1 модель учится не извлекать такие факты. Но если что-то всё-таки попало в память:
Забудь, что я говорил про подход X.
AstraCode удалит соответствующую запись.
Memory и приватность
Что попадает
- Ваше имя, роль, контекст работы (если вы их упоминали).
- Названия ваших проектов.
- Стиль, предпочтения, корректировки.
- Решения и их обоснования.
Что НЕ должно попадать
- API-ключи, пароли, токены (модель проинструктирована).
- Конкретные значения переменных, патчи.
- Эфемерные «я сейчас работаю над X».
Если случайно что-то приватное попало — отредактируйте файл вручную или Reset all.
Где хранится
- Локально на вашей машине.
- В
~/.astracode/memories/(под git, но git только локальный, не remote). - Не отправляется на серверы AstraCode.
- При генерации/консолидации отправляется в провайдер (модель) — но как и любой ваш промпт.
Когда отключить
- В корпоративной среде, где не хочется хранить контекст работы.
- На общей машине — память видна другим пользователям с доступом к
~/.astracode/. - Если используете AstraCode для разовых задач — экономит токены.
/memories
→ выключить toggle'ы.
Или:
[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.
Можно настроить:
[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.