# Letta Code через RouterAI: CLI-агент с долгой памятью на Claude, GPT и DeepSeek

## Letta Code

Letta Code — CLI-агент от создателей MemGPT (репозиторий [letta-ai/letta-code](https://github.com/letta-ai/letta-code), лицензия Apache 2.0). Это stateful-агент: у него есть постоянная идентичность и долговременная память, и он возвращается к ней из сессии в сессию, а не начинает с чистого листа. Память хранится в git-репозитории из обычных Markdown-файлов, которые агент сам читает и правит. Работать с ним можно в терминале, в браузере и через мессенджеры: Telegram, Slack, Discord.

Letta Code умеет подключать любой OpenAI-совместимый API, поэтому RouterAI добавляется как обычный провайдер. Вы получаете в одном агенте Claude, GPT, DeepSeek и GLM из [каталога моделей](/models), работу из России без VPN и оплату в рублях. Смена модели не стирает память: она принадлежит агенту, а не модели.

## Что такое stateful-агент и память {#stateful-agent}

Обычный coding-агент каждую сессию начинает заново: перечитывает проект и переспрашивает договорённости. У stateful-агента есть собственное состояние: имя, личность, системный промпт, настройки модели и инструментов, история разговоров и долговременная память ([документация](https://docs.letta.com/concepts/stateful-agents)).

Память устроена как MemFS, git-репозиторий агента:

- файлы в корне памяти (`persona.md`, `human.md` и другие) целиком попадают в системный промпт на каждом ходу, поэтому в них хранят личность агента, предпочтения пользователя и важные факты о проекте;
- каталоги со своим `MEMORY.md` остаются вне контекста, пока агент не откроет нужный файл по подсказкам из корневого индекса;
- каждая правка памяти коммитится, так что у неё есть история.

Общая картина, виды памяти и риски описаны в статье [Agent Memory](/pages/agent-memory). Letta Code реализует «блоки памяти» и «dreaming» (фоновую консолидацию заметок), о которых там идёт речь.

## Требования

- macOS, Linux или Windows; Node.js 22.19 и новее
- Терминал с поддержкой цвета
- API-ключ из [личного кабинета](/settings/keys)

Аккаунт Letta не нужен: в локальном режиме агенты, память и подключения к провайдерам хранятся на вашем компьютере ([Self-hosting](https://docs.letta.com/self-hosting)).

## Установка

```bash
npm install -g @letta-ai/letta-code
```

Альтернатива, если Node.js нет: `uv tool install letta` или `pipx install letta` (Node.js входит в пакет, нужен Python 3.9+). Если `npm install -g` падает с `EACCES`, не используйте `sudo`: README рекомендует uv/pipx, npm-префикс в домашнем каталоге или nvm.

Проверьте установку:

```bash
letta --version
```

По умолчанию Letta Code работает с облаком Letta и при первом запуске предлагает войти. Чтобы хранить всё локально, выберите режим `local`:

```bash
letta backend local
```

Команда `letta backend` показывает текущий режим, а флаг `--backend local` меняет его для одного запуска. Мастер первого выбора можно вызвать снова командой `letta setup`.

## Подключение к RouterAI {#podklyuchenie}

В списке провайдеров Letta Code есть универсальный пункт **OpenAI-compatible API**: ему нужны API key и base URL. Именно он подходит для RouterAI.

### Из терминала

Задайте ключ в переменной окружения (например, в `~/.zshrc`): `export ROUTERAI_API_KEY="sk-xxxxxxxxxxxxxxxx"`. Затем подключите провайдер:

```bash
letta connect openai-compatible \
  --base-url https://routerai.ru/api/v1 \
  --api-key "$ROUTERAI_API_KEY"
```

Команда проверяет ключ и сохраняет провайдера в локальном хранилище:

```text
Validating OpenAI-compatible API API key...
Saving provider...
Connected OpenAI-compatible API (openai-compatible) in local storage.
```

![Терминал: letta backend local и letta connect openai-compatible с Base URL https://routerai.ru/api/v1, ответ «Connected OpenAI-compatible API»](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/72165f861755dce6c22058fe0659eb87.png)

### Из интерактивной сессии

Запустите `letta` в каталоге проекта и введите `/connect`. Выберите **OpenAI-compatible API** и укажите те же значения:

- **Base URL**: `https://routerai.ru/api/v1`
- **API Key**: ключ из личного кабинета

Это та же процедура, что и `letta connect`: CLI-команда повторяет поток `/connect`.

### Выбор модели

Введите `/model` и начните печатать id модели: список фильтруется. После подключения Letta Code запрашивает у RouterAI `/v1/models` и показывает весь каталог (в нашей проверке это 584 модели), id вида `anthropic/claude-sonnet-5.5` отображаются как есть.

![Селектор /model в Letta Code: в поле поиска введено claude-sonnet-5.5, найдена модель anthropic/claude-sonnet-5.5](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/7f0841c327e6089a0eed7a0a6d4eb41d.png)

Для запуска с конкретной моделью и для скриптов используйте handle в формате `openai-compatible/<id модели из каталога>`:

```bash
letta --new-agent --model openai-compatible/anthropic/claude-sonnet-5.5
```

Документация предупреждает, что флаг `--model` ведёт себя нестабильно при возобновлении сессии, а в интерактивном режиме надёжнее `/model`. Для OpenAI-совместимых шлюзов в селекторе есть выбор уровня reasoning: Letta передаёт его в поле `reasoning_effort`, а значение **Default** это поле не отправляет. Если запрос падает только после выбора явного уровня, верните Default.

### Anthropic Messages API

В списке провайдеров Letta Code есть и отдельный пункт Anthropic API, но в документации для него описан только ключ, а поля Base URL нет. Поэтому для RouterAI используйте OpenAI-совместимый провайдер выше: Claude через него работает так же, как остальные модели каталога. Переменные `ANTHROPIC_BASE_URL` и `OPENAI_BASE_URL` в документации Letta Code как способ подключения не описаны. В установленном пакете они нашлись только внутри SDK-зависимостей, поэтому рассчитывать на них не стоит.

## Выбор модели

Идентификаторы проверены по [каталогу RouterAI](/models) на момент написания; цены и актуальный список смотрите в каталоге. Документация Letta советует начинать с сильной frontier-модели: слабые модели чаще ведут себя непредсказуемо. Тулсет (набор инструментов) Letta Code переключает сам при смене модели через `/model`.

| Модель | Для чего |
| --- | --- |
| `anthropic/claude-sonnet-5.5` | Основная модель: работа с кодом и ведение памяти. В наших проверках на ней же снят пример ниже |
| `anthropic/claude-opus-5.5` | Сложные рефакторинги и долгие задачи |
| `openai/gpt-6.1-terra` | Альтернатива Claude от OpenAI |
| `deepseek/deepseek-v4.1-flash` | Дешёвые массовые правки и вспомогательные запросы |
| `z-ai/glm-5.3` | Недорогая альтернатива для повседневных задач |

Мы отправили запрос через `letta -p` на `anthropic/claude-sonnet-5.5`, `openai/gpt-6.1-terra`, `deepseek/deepseek-v4.1-flash` и `z-ai/glm-5.3`: все четыре ответили.

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

Быстрая проверка без интерфейса. Флаг `-p` запускает один запрос, а `--yolo` отключает запросы на подтверждение, поэтому на чужом проекте его лучше не использовать:

```bash
letta -p "Ответь одним словом: pong" --new-agent \
  --model openai-compatible/anthropic/claude-sonnet-5.5
```

Ответ `pong` значит, что ключ, Base URL и модель настроены верно. Для интерактивной проверки запустите `letta` в каталоге проекта и дайте агенту небольшую задачу.

![Сессия Letta Code на демо-проекте: правка invoices.js, тест, запуск npm test и отчёт агента, модель anthropic/claude-sonnet-5.5 внизу экрана](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/5129c9b46f4c817de2944b26e1e8d893.png)

## Проверка памяти между сессиями {#proverka-pamyati}

Чтобы убедиться, что память работает, попросите агента запомнить факт в одном запуске и спросите о нём в другом:

```bash
letta -p "Запомни: суммы счетов в проекте хранятся в копейках, тесты запускаются командой npm test" \
  --new-agent --model openai-compatible/anthropic/claude-sonnet-5.5

letta -p "Как в проекте хранятся суммы и чем запускать тесты?"
```

В нашей проверке агент записал заметку в файл `project-conventions.md` и закоммитил её, а второй запуск, без подсказок, ответил: суммы хранятся в копейках целыми числами, тесты запускаются `npm test`. Второй запуск без `--new-agent` продолжает работу с тем же агентом.

Файлы памяти лежат на диске: в локальном режиме это каталог `~/.letta/lc-local-backend/memfs/<id агента>/memory/` с обычным `.git` внутри. Их можно открыть редактором и посмотреть историю через `git log`. В интерактивной сессии пригодятся команды `/memory` (посмотреть память), `/remember` (попросить запомнить), `/init` (заново изучить проект), `/sleeptime` (настроить фоновое обновление памяти) и `/agents` (переключиться между агентами).

Память принадлежит агенту. Агент, созданный с `--new-agent`, начинает с пустой памяти, а общие знания о проекте для разных агентов лучше держать в [AGENTS.md](/pages/agents-md).

## Расход токенов {#rashod-tokenov}

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

Мы замерили самый короткий запрос («Ответь одним словом: pong») на агенте с одной заметкой в памяти: `letta -p ... --output-format json` вернул `prompt_tokens: 6467` и `completion_tokens: 4`, кэшированных входных токенов в ответе не было. Основная часть этих токенов приходится на системный промпт и описания инструментов, поэтому у вашей установки цифры будут другими. Что делать с расходом:

- держите в корне памяти только важное, а справочные материалы убирайте в каталоги со своим `MEMORY.md`: они подгружаются по запросу;
- смотрите расход командами `/usage` и `/context`, а лимит окна задавайте через `/context-limit`;
- для длинных сессий используйте `/compact`, а вспомогательную работу поручайте дешёвым моделям вроде `deepseek/deepseek-v4.1-flash`;
- стоимость токенов смотрите в [каталоге моделей](/models): она зависит от модели и объёма контекста.

## Каналы: Telegram, Slack, Discord

В локальном режиме агента можно подключить к мессенджерам: `letta server --backend local --channels slack` запускает отдельный процесс с каналами, а пошаговые инструкции есть в документации для [Telegram](https://docs.letta.com/self-hosting/channels/telegram), [Slack](https://docs.letta.com/self-hosting/channels/slack) и [Discord](https://docs.letta.com/self-hosting/channels/discord). Модель в этом случае берётся из подключённых провайдеров, то есть работает и через RouterAI.

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

### Ошибка при установке через npm

`EACCES` означает, что глобальный каталог npm принадлежит root. Не используйте `sudo`: от этого ломается самообновление CLI. Поставьте через `uv tool install letta` или `pipx install letta`, настройте npm-префикс в домашнем каталоге или используйте nvm. Если падает сборка нативного модуля `node-pty` (например, в окружении без доступа к nodejs.org), у нас сработала установка `npm install -g --ignore-scripts @letta-ai/letta-code`.

### Ключ не принимается или 401

Команда `letta connect` проверяет ключ при сохранении. Убедитесь, что `ROUTERAI_API_KEY` экспортирована в том же терминале, а ключ скопирован из [личного кабинета](/settings/keys) целиком.

### 404 или модель не найдена

Base URL должен быть `https://routerai.ru/api/v1`, с `/v1`. В `--model` перед id из каталога ставится префикс провайдера: `openai-compatible/anthropic/claude-sonnet-5.5`. Если сомневаетесь, выберите модель через `/model`.

### Ошибка только после выбора уровня reasoning

Letta отправляет выбранный уровень в поле `reasoning_effort`. Если запрос падает именно после этого, выберите в селекторе **Default**: поле перестанет отправляться.

### Агент «забыл» проект

Скорее всего, запущен новый агент (`--new-agent`) или вы вошли в другой режим. Проверьте режим командой `letta backend`, выберите нужного агента через `/agents` и откройте `/memory`. Агенты локального режима не видны в облачном веб-приложении и не копируются автоматически.

### Оплата и баланс

Код 402 означает нехватку средств: пополните баланс в разделе [Биллинг](/settings/billing).

## Что дальше

- [Agent Memory](/pages/agent-memory) — как устроена память агента и чем она отличается от RAG
- [Каталог моделей](/models) — подберите модель под задачу
- [Аутентификация](/docs/guides/overview/authentication) — управление API-ключами
- [Hermes Agent](/pages/hermes-agent-routerai) и [nanobot](/pages/nanobot-routerai) — другие агенты с памятью через RouterAI
- [Документация Letta Code](https://docs.letta.com/platform/cli)
