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

12. Память

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

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

⚠️ Важно понимать, как это работает — иначе будет казаться, что память сломана.

  1. Память по умолчанию выключена (это экспериментальная функция). Пока вы её не включили, агент ничего не запоминает между сессиями.
  2. Агент не записывает память «на лету» во время диалога. У него нет такого инструмента, и системная инструкция прямо запрещает ему менять память — он может только читать её. Поэтому если вы скажете «запомни, что меня зовут Никита», агент ответит «хорошо», но никуда это не запишет — записывать ему нечем и некуда.
  3. Память наполняет отдельный фоновый процесс — он запускается при следующих запусках AstraCode и разбирает ваши прошлые, уже «отлежавшиеся» сессии (см. Как работает). Это происходит не мгновенно.

Если в IDE-плагине агент «не пользуется памятью совсем» — почти наверняка функция не включена в конфиге (в плагине нет всплывающего окна /memories, поэтому её включают вручную через config.toml, см. ниже).

Зачем

Без памяти:

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.

Включение

По умолчанию память выключена (это экспериментальная функция; так безопаснее для приватности).

В TUI введите команду:

text
/memories

Если функция ещё не включена, AstraCode сначала предложит её включить. После согласия откроется экран настроек с двумя переключателями и кнопкой сброса:

text
┌─ Настройки памяти ─────────────────────────────────┐
│   ☐ Использовать память (Use memories)             │
│   ☐ Генерировать память (Generate memories)        │
│   [Сбросить всю память (Reset all memories)]       │
└────────────────────────────────────────────────────┘
Переключатель Что делает
Использовать память (use_memories) Подмешивает накопленную память в новые сессии
Генерировать память (generate_memories) Разрешает фоновому процессу извлекать память из прошлых сессий
Сбросить всю память Сотрёт всё накопленное

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

В IDE-плагине всплывающего окна /memories нет, поэтому включать нужно вручную через ~/.astracode/config.toml. Обратите внимание: одних настроек [memories] недостаточно — нужно ещё включить саму экспериментальную функцию:

toml
[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).

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

text
~/.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 коммитится автоматически. Хотите посмотреть, как менялась память:

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

Типы памяти

user — про вас

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

Пример из user_profile.md:

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

Можно попросить агента (он умеет читать память):

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

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

Память правится только вручную (файлом) или полным сбросом. Агент не может удалить или изменить запись по вашей просьбе — у него нет доступа на запись:

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

Просьбы вида «удали из памяти факт X» агент выполнить не может. Если вы попросите его — он в лучшем случае откроет файл обычными командами и отредактирует его как обычный файл, но это не штатный механизм. Надёжнее отредактировать файл самому или сделать Сбросить всю память.

Полный сброс

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

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

Или вручную:

bash
rm -rf ~/.astracode/memories

Сценарии

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

  1. Включите память: /memories → включить переключатели.
  2. Поработайте 3-5 сессий с этим проектом.
  3. Этап 1 за это время извлечёт факты.
  4. Этап 2 утрамбует их в project_<name>.md.
  5. В следующих сессиях AstraCode уже знает контекст.

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

  1. Закончили проект — память останется (это не плохо, но может загромождать).
  2. Можете удалить отдельный файл: rm ~/.astracode/memories/project_old.md.
  3. Этап 2 при следующем запуске обновит MEMORY.md.

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

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

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

На этапе 1 модель-извлекатель старается не сохранять такие ситуативные факты. Но если что-то всё-таки попало в память, удалить это можно только вручную — отредактировать нужный файл в ~/.astracode/memories/ или сделать полный сброс. Сказать агенту «забудь про подход X» недостаточно: записать или стереть память он не может.

Память и приватность

Что попадает

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

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

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

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

Где хранится

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

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

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

→ выключить переключатели.

Или:

toml
[memories]
use_memories = false
generate_memories = false

Память против AGENTS.md

Не путайте:

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

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

Модели этапов и стоимость

Этап 1 (извлечение) использует дешёвую модель — токены минимальны.

Этап 2 (консолидация) использует сильную модель — может стоить заметнее, но запускается редко.

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

toml
[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) — устройство этапов и параметры.