# 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`, ваш ключ и любая модель из [каталога](/models) — работа из России без VPN, оплата в рублях, один ключ на все модели. Внутри RouterAI наблюдения генерируются дешёвыми моделями, а сам агент может работать на другой модели того же ключа. Статья проверена на claude-mem 15.9.0.

## Зачем агенту память {#zachem-agenty-pamyat}

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

## Что такое claude-mem {#chto-takoe-claude-mem}

Репозиторий [thedotmack/claude-mem](https://github.com/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` для полного текста. Детали — в [архитектуре](https://docs.claude-mem.ai/architecture/overview) и [описании поиска](https://docs.claude-mem.ai/usage/search-tools).

## Поддерживаемые агенты {#podderzhivaemye-agenty}

Установщик `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-рантайме. Если агент уже установлен, установщик находит его сам и предлагает в списке.

## Требования {#trebovaniya}

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

## Установка {#ustanovka}

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

```bash
npx claude-mem install
```

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

```bash
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 тот же плагин ставится из маркетплейса:

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

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

## Подключение к RouterAI {#podkluchenie-k-routerai}

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

### Варианты провайдера памяти {#varianty-provajdera-pamyati}

В коде и документации есть четыре режима `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. Настройки провайдера {#shag-1-nastroyki-provajdera}

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

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

```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](/models), передаётся как есть.

### Шаг 2. Ключ {#shag-2-klyuch}

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

```bash
OPENAI_COMPAT_API_KEY=
```

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

### Шаг 3. Проверка через интерфейс {#shag-3-proverka-cherez-interfeys}

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

```bash
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](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/ebf979aa4a24a2ff090e6ca44793b136.png)

### Шаг 4. Перезапуск worker'а {#shag-4-perezapusk}

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

```bash
npx claude-mem restart
```

## Выбор модели {#vybor-modeli}

Модель задаётся только для наблюдений: сам агент может работать на чём угодно. На один запрос уходит несколько тысяч входных токенов (контекст сессии плюс события инструментов) и несколько сотен выходных — цена наблюдения получается небольшой даже на недешёвой модели. Цены ниже — из каталога 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 млн токенов](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/fe1b12f78d904d44b5b7ee2bf7cb9991.png)

## Проверка подключения {#proverka-podklucheniya}

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

```bash
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](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/2b4d178204724968d124b105855931b3.png)

Дальше нужна живая сессия. Работайте как обычно: память начнёт собираться с первого же промпта, а подставляться в контекст — со второй сессии в проекте. В нашем тесте на демо-проекте «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'а:

```bash
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](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/d59c830ea78f2062487ff03e4df26f7a.png)

## Решение проблем {#reshenie-problem}

* **Наблюдения не появляются, `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`).

## Что дальше {#chto-dalshe}

* [Каталог моделей RouterAI](/models) — id, контекст и цены для выбора модели наблюдений.
* [Claude Code через RouterAI](/pages/vibe-coding-claude-code) и [Codex через RouterAI](/pages/vibe-coding-codex) — как подключить сами агенты к тому же ключу.
* [Letta Code через RouterAI](/pages/letta-code-routerai) и [Herdr: десктоп для AI-агентов](/pages/herdr-desktop-ai-agents-routerai) — другие агенты с памятью.
* [Agent Memory](/pages/agent-memory) — как устроена долгая память агентов в общем виде.
* [Документация OpenAI-совместимого провайдера](https://docs.claude-mem.ai/usage/openai-compatible-provider), [конфигурация](https://docs.claude-mem.ai/configuration) и [репозиторий claude-mem](https://github.com/thedotmack/claude-mem).
