12. Память
По умолчанию AstraCode помнит только то, что в текущей сессии. После /new или перезапуска — контекст с нуля (но AGENTS.md проекта читается).
Память (memory) — это система, которая позволяет AstraCode помнить факты между сессиями: - Ваш стиль и предпочтения. - Контекст текущей рабочей задачи (что вы делали вчера). - Решения, которые вы приняли в проекте. - Названия и пути ваших систем (проекты в трекере, каналы в мессенджере и т.п.).
⚠️ Важно понимать, как это работает — иначе будет казаться, что память сломана.
- Память по умолчанию выключена (это экспериментальная функция). Пока вы её не включили, агент ничего не запоминает между сессиями.
- Агент не записывает память «на лету» во время диалога. У него нет такого инструмента, и системная инструкция прямо запрещает ему менять память — он может только читать её. Поэтому если вы скажете «запомни, что меня зовут Никита», агент ответит «хорошо», но никуда это не запишет — записывать ему нечем и некуда.
- Память наполняет отдельный фоновый процесс — он запускается при следующих запусках AstraCode и разбирает ваши прошлые, уже «отлежавшиеся» сессии (см. Как работает). Это происходит не мгновенно.
Если в IDE-плагине агент «не пользуется памятью совсем» — почти наверняка функция не включена в конфиге (в плагине нет всплывающего окна
/memories, поэтому её включают вручную черезconfig.toml, см. ниже).
Зачем
Без памяти:
[Сессия в понедельник] 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.
Включение
По умолчанию память выключена (это экспериментальная функция; так безопаснее для приватности).
В TUI введите команду:
/memories
Если функция ещё не включена, AstraCode сначала предложит её включить. После согласия откроется экран настроек с двумя переключателями и кнопкой сброса:
┌─ Настройки памяти ─────────────────────────────────┐ │ ☐ Использовать память (Use memories) │ │ ☐ Генерировать память (Generate memories) │ │ [Сбросить всю память (Reset all memories)] │ └────────────────────────────────────────────────────┘
| Переключатель | Что делает |
|---|---|
Использовать память (use_memories) |
Подмешивает накопленную память в новые сессии |
Генерировать память (generate_memories) |
Разрешает фоновому процессу извлекать память из прошлых сессий |
| Сбросить всю память | Сотрёт всё накопленное |
Нужны оба переключателя — иначе: - Только генерация без использования — память копится, но не подмешивается. - Только использование без генерации — память не пополняется.
В IDE-плагине всплывающего окна /memories нет, поэтому включать нужно вручную через ~/.astracode/config.toml. Обратите внимание: одних настроек [memories] недостаточно — нужно ещё включить саму экспериментальную функцию:
[features] memories = true # мастер-выключатель функции (по умолчанию выключен) [memories] generate_memories = true use_memories = true
После включения перезапустите AstraCode — функция и фоновый процесс активируются только при старте новой сессии.
Как работает
Память пополняет не агент в диалоге, а отдельный фоновый процесс. Он запускается при старте AstraCode и разбирает ваши прошлые сессии, а не текущую. Поэтому только что сказанное в этом разговоре в памяти сразу не появится.
Этап 1: извлечение
Сессия должна сначала «отлежаться» — по умолчанию не меньше 6 часов простоя (параметр min_rollout_idle_hours; рекомендуется даже больше 12 часов). После этого при следующем запуске AstraCode фоном:
1. Читает rollout (запись) этой прошлой сессии.
2. Просит дешёвую модель извлечь устойчивые факты.
3. Сохраняет в ~/.astracode/memories/raw_memories.md.
«Устойчивые факты» = то, что будет верно и через неделю:
- «Пользователь — senior Rust developer, работает с web backends».
- «Проект использует PostgreSQL 15 и redis для сессий».
- «Для тестов в этом репо — cargo nextest, не cargo test».
Что НЕ извлекается: - Эфемерные детали («сейчас работаю над файлом X»). - Конкретные значения переменных и патчей. - Секреты, API-ключи (модель явно проинструктирована не извлекать).
Этап 2: консолидация
Периодически (по таймеру или при накоплении):
1. AstraCode читает все накопленные raw_memories.md.
2. Запускает внутреннего агента-консолидатора без сетевого доступа.
3. Агент структурирует факты в файлы:
- MEMORY.md — поисковый индекс памяти.
- memory_summary.md — короткое резюме, которое подмешивается в системную инструкцию новых сессий.
- user_profile.md — про вас.
- feedback_*.md — ваши корректировки и предпочтения.
- project_<name>.md — про текущий проект.
- reference_*.md — указатели на внешние ресурсы.
Этап 3: использование (только чтение)
При старте новой сессии, если функция включена и use_memories = true и файл memory_summary.md не пуст:
1. Это резюме подмешивается в системную инструкцию агента.
2. Агенту даётся инструкция при необходимости прочитать MEMORY.md и связанные файлы.
3. Агент только читает память — менять или дописывать её в ходе диалога он не может (это делает фоновый процесс из этапов 1–2).
Где живёт память
~/.astracode/memories/ ├── .git/ ← всё под git-контролем (можете смотреть git log) ├── MEMORY.md ← главный индекс, инжектится в prompt ├── memory_summary.md ← обзорное резюме ├── raw_memories.md ← сырая извлечённая память (результат этапа 1) ├── phase2_workspace_diff.md ← diff в стиле git: что изменил этап 2 ├── rollout_summaries/ ← резюме старых сессий │ ├── 2026-05-15-abc123.md │ └── 2026-05-20-def456.md ├── user_profile.md ← тип: user ├── feedback_testing.md ← тип: feedback ├── project_backend.md ← тип: project └── reference_linear.md ← тип: reference
Папка под git — каждое изменение этапа 2 коммитится автоматически. Хотите посмотреть, как менялась память:
cd ~/.astracode/memories git log --oneline git diff HEAD~5
Типы памяти
user — про вас
- Роль, опыт, цели.
- Стиль работы (предпочитаете план / сразу действие).
- Что не любите.
Пример из user_profile.md:
Тимур, магистрант МГТУ им. Баумана (каф. ИУ-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
Можно попросить агента (он умеет читать память):
Покажи, что ты обо мне помнишь.
Удалить конкретный факт
Память правится только вручную (файлом) или полным сбросом. Агент не может удалить или изменить запись по вашей просьбе — у него нет доступа на запись:
nano ~/.astracode/memories/user_profile.md # отредактировать, сохранить
Просьбы вида «удали из памяти факт X» агент выполнить не может. Если вы попросите его — он в лучшем случае откроет файл обычными командами и отредактирует его как обычный файл, но это не штатный механизм. Надёжнее отредактировать файл самому или сделать Сбросить всю память.
Полный сброс
В /memories:
- Выбрать Reset all memories.
- Подтвердить.
Сотрётся вся папка ~/.astracode/memories/. Безвозвратно (кроме git-истории внутри).
Или вручную:
rm -rf ~/.astracode/memories
Сценарии
Сценарий: новый проект
- Включите память:
/memories→ включить переключатели. - Поработайте 3-5 сессий с этим проектом.
- Этап 1 за это время извлечёт факты.
- Этап 2 утрамбует их в
project_<name>.md. - В следующих сессиях AstraCode уже знает контекст.
Сценарий: смена работы
- Закончили проект — память останется (это не плохо, но может загромождать).
- Можете удалить отдельный файл:
rm ~/.astracode/memories/project_old.md. - Этап 2 при следующем запуске обновит MEMORY.md.
Сценарий: «не помни то, что я сейчас сказал»
Иногда вы говорите что-то ситуативное:
В этой сессии давай поэкспериментируем с подходом X, в проде так не делаем.
На этапе 1 модель-извлекатель старается не сохранять такие ситуативные факты. Но если что-то всё-таки попало в память, удалить это можно только вручную — отредактировать нужный файл в ~/.astracode/memories/ или сделать полный сброс. Сказать агенту «забудь про подход X» недостаточно: записать или стереть память он не может.
Память и приватность
Что попадает
- Ваше имя, роль, контекст работы (если вы их упоминали).
- Названия ваших проектов.
- Стиль, предпочтения, корректировки.
- Решения и их обоснования.
Что НЕ должно попадать
- API-ключи, пароли, токены (модель проинструктирована).
- Конкретные значения переменных, патчи.
- Эфемерные «я сейчас работаю над X».
Если случайно что-то приватное попало — отредактируйте файл вручную или Reset all.
Где хранится
- Локально на вашей машине.
- В
~/.astracode/memories/(под git, но git только локальный, не remote). - Не отправляется на серверы AstraCode.
- При генерации/консолидации отправляется в провайдер (модель) — но как и любой ваш промпт.
Когда отключить
- В корпоративной среде, где не хочется хранить контекст работы.
- На общей машине — память видна другим пользователям с доступом к
~/.astracode/. - Если используете AstraCode для разовых задач — экономит токены.
/memories
→ выключить переключатели.
Или:
[memories] use_memories = false generate_memories = false
Память против AGENTS.md
Не путайте:
AGENTS.md |
Память | |
|---|---|---|
| Где | В корне репо | ~/.astracode/memories/ |
| Управление | Руками (вы пишете) | Автоматически (модель извлекает) |
| Под git с проектом? | Да (коммитится в репо) | Нет (только локально) |
| Scope | Проект | Все ваши проекты |
| Изменчивость | Стабильный | Меняется по мере работы |
Хорошая практика: AGENTS.md для стабильных проектных фактов (команды сборки, конвенции), memory для динамичных пользовательских предпочтений и контекста.
Модели этапов и стоимость
Этап 1 (извлечение) использует дешёвую модель — токены минимальны.
Этап 2 (консолидация) использует сильную модель — может стоить заметнее, но запускается редко.
Можно настроить:
[memories] extract_model = "claude-haiku-4-5" consolidation_model = "claude-sonnet-4-6"
Если у вас локальный провайдер — оба могут быть локальной моделью.
Рекомендации
✓ Включайте после установки, поработайте 1-2 недели — память «настроится» на вас.
✓ Просматривайте MEMORY.md периодически — что AstraCode о вас «думает».
✓ Корректируйте, если что-то неверно.
✓ Под git — папка memories под локальным git'ом, всегда можно откатить.
✗ Не храните секреты в памяти — даже если AstraCode не извлёк, не просите запомнить.
✗ Не делайте Reset, если не уверены — потеряете полезный накопленный контекст.
Если что-то не работает
- Агент не запоминает в текущем диалоге — это нормально. Он не пишет память на лету; наполнение идёт фоном по прошлым сессиям (см. Как работает).
- Память не подмешивается совсем — проверьте, что:
1. включена сама функция (
[features] memories = trueвconfig.tomlили приглашение в/memories); 2. включены оба переключателя (use_memoriesиgenerate_memories); 3. вы перезапустили AstraCode после включения. - Этап 1 (извлечение) не запустился — сессия должна «отлежаться» не меньше 6 часов (по умолчанию), и нужен следующий запуск AstraCode. Подождите и перезапустите.
- Этап 2 (консолидация) не запустился — проверьте логи в
~/.astracode/, возможна ошибка модели. - Память «загрязнилась» случайным фактом — отредактируйте файл вручную или сделайте «Сбросить всю память».
См. техническую документацию dev-вики: Память (docs/07-memories) — устройство этапов и параметры.