Read in:
Русский

Постоянная память для Claude Code: self-hosted настройка, которая переживает сессии

Каждая новая сессия Claude Code начинается с чистого листа. Вы снова объясняете структуру проекта, снова — решение, принятое в прошлый вторник, снова — подвох в скрипте сборки. Две минуты повторений на сессию складываются в часы за месяц, а агент всё равно наступает на грабли, которые уже обходил.

Честный первый ответ удивляет многих: у Claude Code память уже встроена. Прежде чем тянуться к серверу или плагину, стоит знать, что умеет встроенная память и что она не умеет. Гайд сначала разбирает встроенную память, а затем показывает self-hosted путь trip2g для случая, который встроенная память не закрывает: память долговечную, общую между машинами и общую с командой.

Обновлено: июль 2026.

Начните отсюда: встроенная память Claude Code

У Claude Code два слоя встроенной памяти, и для соло-разработчика на одной машине их часто достаточно.

CLAUDE.md (пишете вы). Markdown-файл в проекте (или ~/.claude/CLAUDE.md для глобальных правил), загружаемый в каждую сессию. Здесь живут ваши инструкции: стиль кода, конвенции коммитов, команды для запуска. Вы его ведёте; он едет с репозиторием через git.

Авто-память (пишет Claude). С конца 2025 года Claude Code ведёт и собственный блокнот. По ходу работы он сохраняет команды сборки, находки при отладке и заметки об архитектуре в ~/.claude/projects/<encoded-path>/memory/MEMORY.md и подставляет этот файл в системный промпт в начале каждой сессии. MEMORY.md остаётся кратким индексом до 200 строк (это порог загрузки на старте); когда заметок накапливается много, Claude выносит детали в тематические файлы вроде debugging.md рядом. Включена по умолчанию; команда /memory открывает просмотр и переключатель. Правила можно привязать к путям через .claude/rules/*.md.

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

  • Она локальна для машины. Авто-память лежит под ~/.claude/ на одном компьютере и не попадает в git. Пересели на другой ноутбук — накопленные заметки агента с вами не поедут.
  • Она не общая с командой. Встроенного способа для Claude коллеги прочитать то, что узнал ваш, нет.
  • Она best-effort. В собственной документации Anthropic отмечено, что строгого соблюдения записанного не гарантируется; Claude сам решает, что стоит сохранить, и может перечитать неидеально.
  • Она не масштабируется поиском. MEMORY.md загружается целиком до порога, а не запрашивается; за парой сотен строк хвост в контексте не гарантирован.

Если вы работаете в одиночку на одной машине, включите авто-память, держите конвенции в CLAUDE.md, и, возможно, больше ничего не нужно. Локальные плагины вроде MemPalace (MIT, на устройстве, запрос порядка миллисекунды) или claude-mem (AGPL-3.0, хуки плюс SQLite/FTS5) добавляют поиск сверху, оставаясь одномашинными.

Когда встроенной памяти мало

Идите дальше встроенной памяти, когда верно одно из:

  • память должна ездить с вами по машинам (десктоп, ноутбук, CI);
  • команда должна делить одну память, которую читает агент;
  • нужна память долговечная и версионируемая, проверяемая как документы и восстановимая;
  • нужна память и запрашиваемая по MCP, и просматриваемая как сайт.

Вот где self-hosted сервер оправдывает себя. Остаток гайда настраивает trip2g ровно под это: память как markdown-заметки на сервере, который вы контролируете, общая между машинами и коллегами, читаемая агентом по MCP.

Варианты вкратце

Способ Усилия Форма памяти Между машинами / команда Кому подходит
CLAUDE.md (встроенный) никаких один markdown-файл, грузится каждую сессию через git ваши инструкции и конвенции
Авто-память (встроенная) никаких (вкл. по умолчанию) MEMORY.md + тематические файлы, локально нет обучение на машине без усилий
MemPalace / claude-mem минуты локальное хранилище (MIT / AGPL-3.0) нет поиск на устройстве, всё ещё одна машина
Официальный @modelcontextprotocol/server-memory 1 минута граф знаний в локальном JSONL нет быстрая локальная граф-память
Mem0 от минут до часов автоизвлечённые факты + эмбеддинги да (облако или self-host) захват без дисциплины, облако
trip2g (это руководство) ~10 минут markdown-заметки на вашем сервере да общая, долговечная, публикуемая память, которую читают и правят

Честная ниша trip2g — в отличии последней строки: не «ещё одна локальная память», а память общая и публикуемая. Для одной машины авто-память или локальный плагин часто правильнее и дешевле, и эта уступка настоящая.

Что понадобится

  • Docker локально
  • Node.js (для memcli)
  • Python 3 (для stdio-адаптера; только стандартная библиотека, без pip)
  • установленный Claude Code

Шаг 1. Поднимите сервер памяти

Одна команда из чекаута trip2g (memcli лежит в репозитории уже собранным):

git clone https://github.com/trip2g/trip2g
node trip2g/cli/memcli/dist/memcli.js up --folder ./memory-vault

Дождитесь:

memory live — web: http://localhost:24081  read/write .md in ./memory-vault

Команда запустила сервер trip2g в Docker, выпустила административный API-ключ и включила вотчер синхронизации: любой .md-файл в ./memory-vault индексируется и находится поиском за ~500 мс. Секреты создаются один раз и переиспользуются, так что up идемпотентен.

Контрольная точка: откройте http://localhost:24081 в браузере. Вы должны увидеть (пока пустой) сайт вашей будущей памяти.

Шаг 2. Создайте токен доступа

MCP-адаптер аутентифицируется персональным токеном:

  1. Откройте http://localhost:24081, войдите, перейдите в User → Tokens.
  2. Нажмите Generate token, назовите его claude-code, скопируйте значение t2g_….

Токен показывается один раз. Обратите внимание: это не тот админский API-ключ, который выпустил memcli. Ключ работает в синхронизации, токен — в MCP. На этой разнице часто спотыкаются; подробности в справочнике MCP.

Шаг 3. Зарегистрируйте сервер в Claude Code

Два пути; для работы с памятью мы рекомендуем адаптер.

Путь А: stdio-адаптер (рекомендуем)

Адаптер сворачивает поиск, навигацию по оглавлению и чтение раздела в один инструмент: Claude достаёт ровно тот раздел, который отвечает на вопрос, а не заметки целиком. Скрипт — docs/en/user/trip2g_mcp_stdio_adapter.py в уже склонированном репозитории; ему хватает стандартной библиотеки Python.

Добавьте в .mcp.json проекта (или в ~/.claude.json для всех проектов):

{
  "mcpServers": {
    "trip2g-memory": {
      "command": "python3",
      "args": ["/absolute/path/to/trip2g/docs/en/user/trip2g_mcp_stdio_adapter.py"],
      "env": {
        "TRIP2G_MCP_URL": "http://localhost:24081/_system/mcp",
        "TRIP2G_TOKEN": "t2g_your-token-here"
      }
    }
  }
}

Путь Б: напрямую по HTTP

Claude Code умеет говорить с MCP-эндпоинтом и напрямую:

claude mcp add --transport http trip2g-memory http://localhost:24081/_system/mcp \
  --header "Authorization: Bearer t2g_your-token-here"

Тогда вы получаете сырой набор инструментов (search, expand, note_html, similar) вместо составного инструмента адаптера. Для экспериментов годится; адаптер экономнее по токенам.

Шаг 4. Проверьте

Откройте новую сессию Claude Code и выполните:

/mcp

trip2g-memory должен значиться подключённым. Затем попросите Claude:

Запиши в ./memory-vault заметку "memory-test.md" о том, что деплой-пользователь —
"deploy@prod-1". Потом найди через инструмент trip2g-memory "deploy user"
и процитируй, что нашлось.

Если поиск вернул только что записанный факт, память работает целиком: файл → синхронизация → индекс → recall по MCP. Если /mcp показывает ошибку подключения, проверьте, что путь к адаптеру абсолютный, а токен начинается с t2g_.

Более строгая проверка через сессии (тест, который действительно доказывает постоянство): велите Claude что-то запомнить, затем полностью закройте сессию и откройте новую:

Сессия 1: «Запомни, что этот проект деплоится командой `make ship`, а не `make deploy`.
           Запиши это в память.»
(закройте Claude Code, откройте заново в том же проекте)
Сессия 2: «Как задеплоить этот проект?»

Если Сессия 2 ответит make ship без повторных объяснений — память пережила настоящую границу сессии. Прогоните тот же тест на второй машине (указав TRIP2G_MCP_URL на общий инстанс), и ответ всё равно верен — а вот этого встроенная авто-память не умеет.

Шаг 5. Научите Claude ей пользоваться

Память накапливается, только если агент в неё пишет. Добавьте правила в CLAUDE.md:

## Memory
- REMEMBER: write durable facts (decisions, gotchas, environment details)
  as markdown files into ./memory-vault. One topic per file.
- RECALL: before re-deriving anything about this project, search
  trip2g-memory first. Read only the section you need.

Теперь сессии начинаются с припоминания, а не с пересказа. Цепочка извлечения (search → expand → note_html) читает один раздел вместо целой заметки — примерно в 15 раз дешевле по медиане на реальных заметках; замеры и воспроизводимый скрипт в бенчмарке экономии токенов.

Честно о трении

  • Вы держите сервер. Память доступна, пока запущен Docker. У официального сервера памяти и CLAUDE.md такой зависимости нет.
  • В общую базу ничего не захватывается само. Встроенная авто-память заметки сохраняет сама, но только на локальную машину. Чтобы память попала в общую базу между машинами, заметку пишете вы (или агент по инструкции). Mem0 извлекает факты из переписки без просьбы; trip2g меняет это удобство на память, которую можно проверить и разделить.
  • Две учётки. Админский API-ключ (синхронизация) и персональный токен (MCP) — разные вещи, а сообщения об ошибках при их путанице пока не блестящие.

За пределами одной машины

Всё выше крутится на localhost, но сервер не обязан быть локальным. Направьте TRIP2G_MCP_URL на любой инстанс trip2g, и та же память будет с вами на всех машинах, с доступом по токену. Команда может делить одну базу памяти: каждый видит подграфы, разрешённые его подпиской. А через федерацию один поиск разлетается из вашей памяти по базам знаний партнёров; memcli даже создаёт стартовую hub-заметку сам.

FAQ

Чем это отличается от CLAUDE.md?
CLAUDE.md — один файл, целиком загружаемый в каждую сессию; он ест контекст всегда и не масштабируется дальше пары сотен строк. Сервер памяти ищется по запросу: сотни заметок не стоят ничего, пока одна из них не понадобилась.

А от встроенной авто-памяти Claude Code?
Авто-память (~/.claude/projects/<hash>/memory/MEMORY.md) локальна для машины, best-effort и грузится целиком до порога ~200 строк; она не разделяется с другими машинами и коллегами и не ищется. Сервер памяти — это база с поиском, версиями и контролем доступа, общая для машин и агентов. Они хорошо сочетаются: авто-память — на привычки машины, сервер — на долговечные общие знания.

Если у Claude Code уже есть память, зачем вообще сервер?
Для соло-разработчика на одной машине часто незачем: включите авто-память и держите конвенции в CLAUDE.md. Сервер нужен, когда память должна ходить между машинами, быть общей с командой, версионироваться и проверяться или работать ещё и как сайт. Ровно ради этих четырёх пунктов страница и существует.

Claude сам пишет воспоминания?
В локальную авто-память — да, на этой машине. В общую базу trip2g — только по инструкции (шаг 5), и это сознательно: в общей памяти лежит то, что записано намеренно. Если нужно автоизвлечение из переписки — честно лучше Mem0, мы так и пишем выше.

Могу ли я править то, что Claude помнит?
Да. Заметки памяти — это файлы в ./memory-vault; правьте их в Obsidian или любом редакторе, вотчер синхронизирует правку за ~500 мс. Удалили файл — удалили воспоминание.

А история памяти?
Каждая правка версионируется на сервере (note_versions) и зеркалируется в git: можно посмотреть diff, как воспоминание менялось, или восстановить затёртую заметку.

Работает с Cursor, Codex, другими агентами?
Да, со всем, что говорит на MCP: тот же конфиг адаптера работает в Cursor и Claude Desktop. Базе памяти всё равно, какой агент к ней обращается, а значит все ваши агенты делят одну память.

Сколько это стоит?
Софт под MIT и self-hosted; вы платите только за машину с Docker. Никаких тарифов за место или количество воспоминаний.

Память куда-то отправляется?
Нет. Сервер работает на вашей машине, и заметки покидают её, только если вы явно их федерируете или публикуете.

Смотрите также