# MiMoCode через RouterAI: терминальный агент Xiaomi на Claude, GPT и GLM

## MiMoCode

MiMoCode — терминальный coding-агент от Xiaomi (репозиторий [XiaomiMiMo/MiMo-Code](https://github.com/XiaomiMiMo/MiMo-Code)). Он работает в TUI прямо в терминале: читает и правит код, запускает команды, работает с Git и подключает MCP-серверы. Между сессиями агент хранит память о проекте (файл `MEMORY.md`, чекпоинты, прогресс задач) и сам пересобирает контекст, когда он подходит к лимиту. Проект позиционируется как «Where Models and Agents Co-Evolve» — модель и агент развиваются вместе.

MiMoCode — форк [OpenCode](https://github.com/anomalyco/opencode): он сохраняет его основу (много провайдеров, TUI, LSP, MCP, плагины) и добавляет память, управление контекстом, субагентов и автономные циклы. Если вы работали с OpenCode или Claude Code, интерфейс и сценарии будут знакомы.

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

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

- macOS, Linux или Windows (PowerShell)
- Современный терминал. На macOS встроенный Terminal.app не поддерживается — используйте iTerm2 или терминал VS Code
- API-ключ из [личного кабинета](/settings/keys)

## Установка

Установщик для macOS и Linux:

```bash
curl -fsSL https://mimo.xiaomi.com/install | bash
```

Windows PowerShell:

```powershell
powershell -ep Bypass -c "irm https://mimo.xiaomi.com/install.ps1 | iex"
```

Команды взяты из [README проекта](https://github.com/XiaomiMiMo/MiMo-Code#quick-start). Установщик кладёт бинарник `mimo` в `~/.mimocode/bin` и дописывает этот путь в `~/.bashrc`, поэтому после установки выполните `source ~/.bashrc` или откройте новый терминал и проверьте версию: `mimo --version` (проверено на 0.1.16). Запустите агент в папке проекта:

```bash
cd /path/to/your/project
mimo
```

При первом запуске MiMoCode спрашивает, доверяете ли вы папке (**Yes, I trust this folder**), и просит принять условия (**Terms & Privacy**, кнопка **Agree & Continue**). После этого открывается главный экран с подсказкой «Run /login»: команда `/login` открывает список провайдеров.

![Команда /login: список провайдеров Select provider — Xiaomi, Codex, Import from Claude Code, OpenAI, Anthropic и другие](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/4a644415e6129783e8fbae4385df71e0.png)

В списке есть вход через Xiaomi (**Xiaomi (Recommended)**), Codex (ChatGPT Pro/Plus), импорт авторизации из Claude Code (**Import from Claude Code**), провайдеры из каталога по API-ключу и пункт **+ Custom provider** — любой OpenAI-совместимый API. Пункт «Custom provider» относится к группе Other, а список провайдеров длинный; быстрее всего найти его, набрав в строке Search слово `Custom`. RouterAI подключается через него или через конфиг.

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

Есть два способа: интерактивно в TUI или через файл конфигурации. Результат одинаковый.

### Способ 1: Custom Provider в TUI

1. Запустите `mimo`, выполните `/login`, наберите в строке Search слово `Custom` и выберите **+ Custom provider**.

![Поиск Custom в списке провайдеров: пункт + Custom provider в группе Other](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/bdefd31e25ad1b0580f2e415fa349b8d.png)

2. Откроется форма из шести шагов, каждый подтверждается клавишей <kbd>Enter</kbd>:
   - **Provider id (1/6)** — `routerai` (латиницей в нижнем регистре, на него потом ссылается поле `model`);
   - **Display name (2/6)** — `RouterAI`. Поле уже заполнено id провайдера: сотрите его и введите название, иначе имена склеятся;
   - **Base URL (3/6)** — `https://routerai.ru/api/v1`. Важно: с `/v1` на конце, MiMoCode сам ничего не добавляет и не убирает;
   - **API key (4/6)** — ключ из [личного кабинета](/settings/keys) (на кадрах и в примерах — заглушка `sk-xxxxxxxxxxxxxxxx`);
   - **First model id (5/6)** — id модели из [каталога](/models), например `anthropic/claude-sonnet-5.5`;
   - **First model name (6/6)** — отображаемое имя модели. Поле предзаполнено id, замените его на понятное, например `Claude Sonnet 5.5`.

![Поле Base URL (3/6) формы Custom Provider](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/4e83d63b2c9071c76b8b1b642a92f990.png)

![Шаг First model name (6/6): имя первой модели провайдера](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/74e362ffdc360d980d3c12759a58661d.png)

3. После шестого шага MiMoCode сам записывает провайдера в `~/.config/mimocode/mimocode.jsonc` (поля `baseURL`, `models`, `env: ["ROUTERAI_API_KEY"]`), а введённый ключ сохраняет в `~/.local/share/mimocode/auth.json`. Остальные модели добавляются кнопкой **+ Add model** в списке выбора модели.

### Способ 2: файл конфигурации

MiMoCode читает JSON/JSONC. Расположение файлов по [README](https://github.com/XiaomiMiMo/MiMo-Code#configuration):

| Файл | В проекте | Глобально |
| --- | --- | --- |
| Основной конфиг | `.mimocode/mimocode.jsonc` (или `.json`) | `~/.config/mimocode/mimocode.jsonc` (или `.json`) |
| Конфиг TUI | `.mimocode/tui.json` | `~/.config/mimocode/tui.json` |
| Ключи (сохранённые через TUI) | — | `~/.local/share/mimocode/auth.json` |

В Windows эти пути лежат в `%LOCALAPPDATA%\mimocode\`; все пути можно переопределить переменной `MIMOCODE_HOME`.

1. Задайте ключ в переменной окружения (например, в `~/.zshrc`):

```bash
export ROUTERAI_API_KEY="sk-xxxxxxxxxxxxxxxx"
```

2. Добавьте провайдера в `~/.config/mimocode/mimocode.jsonc`:

```jsonc
{
  "$schema": "https://mimo.xiaomi.com/mimocode/config.json",
  "model": "routerai/anthropic/claude-sonnet-5.5",
  "provider": {
    "routerai": {
      "name": "RouterAI",
      "npm": "@ai-sdk/openai-compatible",
      "only_configured_models": true,
      "models": {
        "anthropic/claude-sonnet-5.5": { "name": "Claude Sonnet 5.5" },
        "anthropic/claude-haiku-5.5": { "name": "Claude Haiku 5.5" },
        "openai/gpt-5.6-sol": { "name": "GPT-5.6 Sol" },
        "deepseek/deepseek-v4.1-flash": { "name": "DeepSeek V4.1 Flash" },
        "z-ai/glm-5.3": { "name": "GLM 5.3" }
      },
      "options": {
        "baseURL": "https://routerai.ru/api/v1",
        "apiKey": "{env:ROUTERAI_API_KEY}"
      }
    }
  }
}
```

Что здесь важно:

- ключи называются строго `baseURL` и `apiKey`;
- ключ в `models` — это id модели из каталога RouterAI; id с `/` поддерживаются, потому что провайдера от модели отделяет только первый `/` в поле `model`;
- `npm: "@ai-sdk/openai-compatible"` — адаптер для OpenAI-совместимых API, а `{env:VAR}` подставляет переменную окружения, так что ключ не попадает в git;
- `routerai` можно заменить любым другим свободным id провайдера в нижнем регистре, но тогда он же должен стоять в начале поля `model`.

3. Перезапустите `mimo`: конфиг читается при запуске. Проверено: если изменить файл, пока TUI открыт, список моделей остаётся прежним до перезапуска.

![Файл ~/.config/mimocode/mimocode.jsonc с блоком provider.routerai](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/fc294cf8e13941bd2a58b3ca72ac0548.png)

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

Модели, зарегистрированные в кастомном провайдере, появляются в списке выбора модели в TUI: откройте его командой `/models`. Команды и настройки интерфейса открываются через палитру команд по <kbd>Ctrl+P</kbd>.

![Список Select model: модели провайдера RouterAI — Claude Haiku 5.5, Claude Sonnet 5.5, DeepSeek V4.1 Flash, GLM 5.3, GPT-5.6 Sol](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/d6b6d3da3c892b126408d8f3922255ca.png)

Идентификаторы проверены по [каталогу RouterAI](/models) на момент написания; цены и актуальный список смотрите в каталоге.

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

### Контекст и смена модели

MiMoCode пересобирает контекст, когда он приближается к окну модели. Для моделей из конфига выше (каталог RouterAI отдаёт им окна от 1 000 000 до 1 050 000 токенов) MiMoCode определяет окно 1M и начинает сжатие на 900K. Окно, которое объявляет каталог, и окно, которое отдаёт конкретный маршрут, могут различаться, поэтому после смены модели проверьте значение и при необходимости задайте лимит вручную.

Команда `mimo models routerai` показывает для каждой модели окно, которое MiMoCode определил, и порог, на котором начнётся сжатие. В TUI тот же бюджет виден в подвале экрана (например, `7.6K/900K`), а команда `/context-limit` позволяет выбрать меньший рабочий бюджет для текущей модели (200K, 300K, 500K, 1M или своё значение). Значение хранится отдельно для каждой модели и можно только занизить порог, но не поднять его выше окна. То же задаётся в конфиге:

```jsonc
{
  "compaction": {
    "max_context": {
      "anthropic/*": "300K",
      "openai/*": "272K"
    }
  }
}
```

Допустимы число токенов, строка вроде `"300K"` или `"1M"` и доля окна `"50%"`; поддерживаются маски (`anthropic/*`), побеждает самый длинный шаблон. Зачем занижать: очень длинный контекст дороже и медленнее, а после определённого порога не даёт выигрыша в качестве.

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

Быстрая проверка без запуска интерфейса:

```bash
mimo run "Объясни одной фразой, что делает этот проект"
```

Команда выполняет один запрос и печатает ответ в терминал. Чтобы убедиться, что MiMoCode видит модели RouterAI:

```bash
mimo models routerai
```

![Вывод mimo models routerai: окно 1M и порог сжатия 900K для каждой модели RouterAI](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/39db6cb72209152eb8ff2852849e88b3.png)

Для проверки MCP-серверов есть команда `mimo mcp`.

## Пример: правка и запуск тестов

Возьмите небольшой Node-проект (в примере — учебный «Invoices» с файлами `app.js`, `invoices.js` и `invoices.test.js`), откройте его в терминале и запустите `mimo`. Попросите агента, например:

```text
Найди в invoices.js функцию подсчёта итога счёта, добавь округление до копеек и запусти npm test
```

Агент прочитает файлы, внесёт правку и запустит `npm test`. По умолчанию основной агент `build` имеет полные права на разработку, а агент `plan` — режим только для чтения: он подходит, когда нужно сначала обсудить решение. Переключение — клавишей <kbd>Tab</kbd>.

![Сессия MiMoCode в демо-проекте Invoices: diff в invoices.js, успешный npm test, модель Claude Sonnet 5.5 провайдера RouterAI](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/bc56f4749eda8ce4e8b83bf955fc1f00.png)

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

### 401 Unauthorized

Ключ не передан или неверный. Проверьте, что переменная `ROUTERAI_API_KEY` экспортирована в том же терминале, где запущен `mimo` (`echo $ROUTERAI_API_KEY`), что ключ скопирован из [личного кабинета](/settings/keys) целиком и что в конфиге написано `{env:ROUTERAI_API_KEY}`, а не `$ROUTERAI_API_KEY`.

### 404 Not Found

Почти всегда виноват базовый адрес. Нужен `https://routerai.ru/api/v1` — с `/v1`. MiMoCode не добавляет и не убирает `/v1` сам, так что адрес `https://routerai.ru/api` для OpenAI-совместимого подключения не сработает.

### Модель не найдена

Проверьте, что id есть в [каталоге](/models) и написан точно. В блоке `models` ключ — это id без префикса провайдера (`anthropic/claude-sonnet-5.5`), а в поле `model` перед ним ставится id провайдера (`routerai/anthropic/claude-sonnet-5.5`). Кроме того, у кастомного провайдера в `models` должна быть зарегистрирована хотя бы одна модель.

### Ключ или модель не подхватились после правки конфига

MiMoCode читает конфиг при запуске. Закройте TUI и запустите `mimo` заново; если ключ меняли в переменной окружения, откройте новый терминал. Если в проекте есть свой `.mimocode/mimocode.jsonc`, проверьте и его.

### 402 Payment Required

Недостаточно средств на балансе — пополните его в разделе [Биллинг](/settings/billing).

### Агент «забывает» начало работы или сжимает историю слишком рано

Это штатное сжатие контекста. Посмотрите окно и порог через `mimo models routerai`, при необходимости поменяйте их командой `/context-limit` или `compaction.max_context`. Проектную память (`MEMORY.md`) и чекпоинты агент подтягивает при возобновлении сессии.

## Что дальше

- [Каталог моделей](/models) — подберите модель под задачу
- [Аутентификация](/docs/guides/overview/authentication) — управление API-ключами
- [Вайб-кодинг в Crush](/pages/vibe-coding-crush) и [Вайб-кодинг в Claude Code](/pages/vibe-coding-claude-code) — другие CLI-агенты через RouterAI
- [README MiMoCode](https://github.com/XiaomiMiMo/MiMo-Code) — конфигурация, MCP, память, субагенты
