Загрузка...

claude-mem через RouterAI: память для Claude Code, Codex и других агентов

claude-mem — плагин персистентной памяти для coding-агентов: он записывает, что агент делал в сессии, сжимает это в короткие наблюдения и подставляет их в начало следующих сессий. В итоге Claude Code, Codex CLI, OpenCode и другие агенты помнят решения по проекту между запусками. По умолчанию память работает либо через платный сервис claude-mem observer, либо через ваш ключ OpenRouter. Через RouterAI её можно перевести на OpenAI-совместимый провайдер: Base URL https://routerai.ru/api/v1, ваш ключ и любая модель из каталога — работа из России без VPN, оплата в рублях, один ключ на все модели. Внутри RouterAI наблюдения генерируются дешёвыми моделями, а сам агент может работать на другой модели того же ключа. Статья проверена на claude-mem 15.9.0.

Зачем агенту память

Обычная сессия coding-агента живёт одним окном контекста: закончилась сессия — агент забыл, почему вы выбрали такую схему, какой баг искали и что уже проверили. Каждый раз он заново читает файлы и повторяет уже пройденные шаги, а на большом проекте это дорого и в токенах, и по времени. claude-mem закрывает эту дыру: контекст прошлых сессий превращается в компактный индекс, который агент получает при старте. Подробнее о самом понятии — в статье Agent Memory.

Что такое claude-mem

Репозиторий thedotmack/claude-mem (лицензия Apache 2.0, на 5 ноября 2026 года — около 113 тысяч звёзд на GitHub). Состоит из четырёх частей:

  • хуки жизненного цикла — SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Stop, SessionEnd; каждый запускает claude-mem hook claude-code <event>, и именно они перехватывают работу инструментов агента;
  • worker service — локальный HTTP-сервер на Bun (по умолчанию порт 37700 + (uid % 100)), который принимает события из хуков, генерирует наблюдения и отдаёт веб-интерфейс;
  • база SQLite — файл ~/.claude-mem/claude-mem.db с сессиями, наблюдениями и сводками, поиск по ним идёт через FTS5;
  • Chroma — векторная база для семантического поиска; её обслуживает uv, который установщик ставит сам.

Наблюдения (observations) — не дословный лог, а короткие записи вида «добавлен тест на округление НДС» с типом (discovery, feature, bugfix, decision), проектом и файлами. Из них worker собирает сводку сессии. Агент находит нужное тремя шагами: search по индексу, timeline для контекста вокруг результата, get_observations для полного текста. Детали — в архитектуре и описании поиска.

Поддерживаемые агенты

Установщик npx claude-mem install знает следующие хосты (id для флага --ide): claude-code, codex-cli, opencode, pi, omp, antigravity, t3code, cursor, grok-bot, kimi, devin, hermes, windsurf, openclaw, dsh (DeepSeek Harness), copilot-cli, goose, roo-code, warp. Часть агентов получает полноценные хуки, часть (например, pi и dsh) — плагин на worker-рантайме. Если агент уже установлен, установщик находит его сам и предлагает в списке.

Требования

  • Node.js 20.0.0 или новее; Bun и uv установщик ставит автоматически, если их нет.
  • Coding-агент, для которого ставим память (в примерах — Claude Code).
  • Ключ RouterAI: создайте его в личном кабинете и пополните баланс.
  • Ключ нужен только для генерации наблюдений; поиск и хранение работают локально.

Установка

Основной способ — установщик:

npx claude-mem install

Без флагов он интерактивный и проходит три этапа: выбирает агентов и ставит рантайм, затем предлагает вход в claude-mem (нужен только для hosted-памяти), затем спрашивает провайдера памяти. Чтобы пропустить вход и сразу выбрать другой провайдер, передайте --ide и --provider claude: память на первом этапе будет работать на вашей подписке Anthropic, а на RouterAI мы переведём её дальше.

npx claude-mem install --ide claude-code --provider claude

Один --ide — один агент: для второго хоста запустите установщик ещё раз. Для Codex CLI это npx claude-mem install --ide codex-cli, для OpenCode — --ide opencode (нужна версия 1.3.4 и новее, после установки его надо перезапустить). Внутри Claude Code тот же плагин ставится из маркетплейса:

/plugin marketplace add thedotmack/claude-mem
/plugin install claude-mem

После установки перезапустите агент. Учтите: npm install -g claude-mem ставит только SDK и не регистрирует хуки — для памяти нужен именно npx claude-mem install или /plugin.

Подключение к RouterAI

claude-mem обращается к модели за одним: превратить события инструментов в наблюдения (observation extraction). Это высокочастотные, короткие и однотипные запросы — дорогая флагманская модель здесь не нужна. Поэтому память удобно увести на RouterAI отдельно от агента.

Варианты провайдера памяти

В коде и документации есть четыре режима CLAUDE_MEM_PROVIDER:

Значение Что использует Ключ
claude ваша подписка Anthropic через Agent SDK не нужен
gemini Gemini API ключ Gemini
openrouter ключ OpenRouter (он же стоит у hosted-памяти claude-mem observer) ключ OpenRouter
openai-compatible любой эндпоинт с /chat/completions — наш случай ключ RouterAI

Отдельно существует claude-mem observer — hosted-память самого проекта с бесплатным периодом 30 дней, после которого она либо по подписке, либо откатывается на вашу подписку агента. Если вы не хотите зависеть от стороннего сервиса и платить за него, берите openai-compatible и RouterAI.

Шаг 1. Настройки провайдера

Два способа: файл настроек или веб-интерфейс worker'а. Надёжнее начать с файла — ключ в интерфейсе не вводится.

Настройки лежат в ~/.claude-mem/settings.json. Добавьте туда (или замените) блок:

{
  "CLAUDE_MEM_PROVIDER": "openai-compatible",
  "CLAUDE_MEM_OPENAI_COMPAT_PRESET": "custom",
  "CLAUDE_MEM_OPENAI_COMPAT_BASE_URL": "https://routerai.ru/api/v1",
  "CLAUDE_MEM_OPENAI_COMPAT_MODEL": "deepseek/deepseek-v4.1-flash"
}
  • CLAUDE_MEM_OPENAI_COMPAT_PRESET — custom означает «эндпоинт задаю сам». Пресет нужен, только если он совпадает с одним из встроенных (nvidia-nim, deepseek, groq, together, ollama, lmstudio, vllm и другие); пресет задаёт Base URL и модель по умолчанию, а ваши поля их перекрывают.
  • CLAUDE_MEM_OPENAI_COMPAT_BASE_URL — https://routerai.ru/api/v1. /chat/completions дописывается автоматически, если его нет.
  • CLAUDE_MEM_OPENAI_COMPAT_MODEL — id модели из каталога RouterAI, передаётся как есть.

Шаг 2. Ключ

Ключ хранится отдельно от настроек моделей — в ~/.claude-mem/.env:

OPENAI_COMPAT_API_KEY=

Тот же ключ можно положить в CLAUDE_MEM_OPENAI_COMPAT_API_KEY в settings.json, но файл .env удобнее: он не попадает в резервные копии настроек и его проще держать вне репозитория. Ключ вида cm_pro_… от hosted-памяти к сторонним эндпоинтам не отправляется — для RouterAI нужен именно ключ RouterAI.

Шаг 3. Проверка через интерфейс

Запустите worker и откройте веб-интерфейс:

npx claude-mem start

По умолчанию он доступен на http://127.0.0.1:37700/viewer (порт можно задать переменной CLAUDE_MEM_WORKER_PORT). В разделе Settings раскройте секцию Advanced («AI provider and model selection») — там четыре поля:

  1. AI Provider — выберите OpenAI-compatible endpoint (BYOK);
  2. Endpoint preset — Custom OpenAI-compatible endpoint;
  3. Base URL — https://routerai.ru/api/v1;
  4. Model — id модели, например deepseek/deepseek-v4.1-flash.

Поле Reasoning оставьте в положении Off (default): тогда в каждом запросе уходит reasoning: { enabled: false }, и reasoning-модель не тратит лимит вывода на размышления, возвращая пустое наблюдение. Под полями интерфейс прямо пишет, что ключ задаётся вне вьюера — в settings.json или .env.

claude-mem Settings → Advanced: AI Provider = OpenAI-compatible endpoint (BYOK), Endpoint preset = Custom, Base URL https://routerai.ru/api/v1, Model deepseek/deepseek-v4.1-flash

Шаг 4. Перезапуск worker'а

Изменения в settings.json и .env применяются после перезапуска:

npx claude-mem restart

Выбор модели

Модель задаётся только для наблюдений: сам агент может работать на чём угодно. На один запрос уходит несколько тысяч входных токенов (контекст сессии плюс события инструментов) и несколько сотен выходных — цена наблюдения получается небольшой даже на недешёвой модели. Цены ниже — из каталога RouterAI за 1 млн токенов.

Модель Контекст Вход / выход, ₽ Для чего
deepseek/deepseek-v4.1-flash 1 048 576 2,57 / 46,72 Основной выбор: быстрая и дешёвая, справляется со структурными наблюдениями
z-ai/glm-5.3-flash 1 048 576 3,33 / 10,78 Ещё дешевле на выходе, если наблюдения короткие
anthropic/claude-haiku-5.5 1 000 000 10,62 / 53,09 Если важна аккуратность формулировок и разметки типов
anthropic/claude-sonnet-5.5 1 000 000 212,34 / 1061,71 Максимальное качество; на потоке наблюдений заметно дороже
openai/gpt-5.4-mini 400 000 79,63 / 477,77 Средний вариант для длинных сессий

Ориентир по стоимости: в нашем тесте один сеанс на демо-проекте дал пять наблюдений, самый крупный запрос — около 7,1 тысячи входных и 358 выходных токенов. На deepseek/deepseek-v4.1-flash это доли копейки; на anthropic/claude-sonnet-5.5 тот же сеанс стоит примерно в сто раз дороже, потому что дороже и вход, и выход. Менять модель можно в любой момент — старые наблюдения не пересчитываются.

Эмбеддинги отдельной моделью не настраиваются: семантический поиск использует локальную Chroma, а не API. Поэтому отдельная модель эмбеддингов RouterAI для claude-mem не нужна, и в настройках её нет.

Каталог моделей RouterAI: DeepSeek V4.1 Flash и цены за 1 млн токенов

Проверка подключения

Установка и worker проверяются одной командой:

npx claude-mem doctor

Все пункты должны быть отмечены галочкой, включая «Hook launcher», «Worker daemon» и версию Claude Code (нужна 2.1.139 и новее). Второй инструмент — npx claude-mem status: он показывает PID, порт и время работы worker'а.

Терминал: npx claude-mem doctor со всеми пройденными проверками и npx claude-mem status с портом 37700

Дальше нужна живая сессия. Работайте как обычно: память начнёт собираться с первого же промпта, а подставляться в контекст — со второй сессии в проекте. В нашем тесте на демо-проекте «Invoices» (Node, файлы invoices.js и invoices.test.js) агент за две сессии добавил расчёт НДС и тест к нему. Третью сессию мы начали с вопроса «Не читай файлы. Что мы делали с этим проектом в прошлых сессиях?» — агент без доступа к файлам перечислил и функцию расчёта НДС с округлением, и добавленный тест на сумму 1234.567. В логе worker'а это видно по строке Briefed the observer generation with session-start context и записям Custom OpenAI-compatible endpoint API usage {model=deepseek/deepseek-v4.1-flash…}.

Проверить, что наблюдения действительно пишутся, можно и без агента — по локальному API worker'а:

curl -s http://127.0.0.1:37700/api/stats

В ответе в блоке database растут счётчики observations и sessions. В нашем прогоне после трёх сессий там было 5 наблюдений и 3 сессии. Тексты наблюдений отдаёт /api/observations, поиск по ним — /api/search?query=….

В веб-интерфейсе те же записи видны в ленте Memory timeline: тип записи (discovery, feature, prompt), проект, заголовок и короткое пояснение с путями файлов.

claude-mem viewer: Memory timeline с промптом новой сессии и наблюдениями по проекту invoices

Решение проблем

  • Наблюдения не появляются, observations в /api/stats равен нулю. Сначала проверьте npx claude-mem doctor — пункт «Hook launcher» должен быть зелёным. Если лаунчер claude-mem лежит в ~/.local/bin, но каталога нет в PATH (типично для сессий, запущенных не из интерактивного shell), хуки молча не выполняются: добавьте ~/.local/bin в PATH и начните новую сессию. Если хуки на месте, а счётчик не растёт, посмотрите жалобы в выводе сессии и в ~/.claude-mem/logs/.
  • Ошибка 401 на каждый запрос наблюдения. Worker отвечает 401, когда ключ пустой или неверный. Проверьте, что в ~/.claude-mem/.env строка называется ровно OPENAI_COMPAT_API_KEY (без префикса CLAUDE_MEM_), что в ключе нет кавычек и пробелов, и что баланс RouterAI пополнен.
  • Наблюдения пустые или обрываются. По умолчанию запрос уходит с reasoning: { enabled: false } и max_tokens = 4096 (CLAUDE_MEM_OBSERVER_MAX_OUTPUT_TOKENS). Если ответ всё равно пустой, проверьте модель: id должен быть из каталога RouterAI и поддерживать /chat/completions. Для reasoning-моделей можно поставить CLAUDE_MEM_OPENAI_COMPAT_REASONING в on, но тогда вывод будет расходоваться на размышления.
  • Провайдер «не настроен», память ушла в Claude. Если не заданы CLAUDE_MEM_OPENAI_COMPAT_MODEL или ключ, провайдер считается незаконфигурированным, и запросы уходят в Claude. Заполните оба поля и перезапустите worker.
  • Память не подставляется в новую сессию. Подстановка начинается со второй сессии в том же проекте; кроме того, по умолчанию в стартовый контекст попадают наблюдения только текущего хоста — если нужны записи от других агентов, включите «Include all sources at session start» (CLAUDE_MEM_SESSION_START_INCLUDE_ALL_SOURCES).

Что дальше