Загрузка...

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

Letta Code

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

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

Что такое stateful-агент и память

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

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

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

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

Требования

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

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

Установка

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.

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

letta --version

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

letta backend local

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

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

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

Из терминала

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

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

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

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»

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

Запустите 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

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

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 на момент написания; цены и актуальный список смотрите в каталоге. Документация 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 отключает запросы на подтверждение, поэтому на чужом проекте его лучше не использовать:

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 внизу экрана

Проверка памяти между сессиями

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

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.

Расход токенов

Память не бесплатна: файлы из корня памяти попадают в системный промпт на каждом ходу и оплачиваются как входные токены. Это общий риск памяти агента, о нём подробнее в статье 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;
  • стоимость токенов смотрите в каталоге моделей: она зависит от модели и объёма контекста.

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

В локальном режиме агента можно подключить к мессенджерам: letta server --backend local --channels slack запускает отдельный процесс с каналами, а пошаговые инструкции есть в документации для Telegram, Slack и 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 экспортирована в том же терминале, а ключ скопирован из личного кабинета целиком.

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 означает нехватку средств: пополните баланс в разделе Биллинг.

Что дальше