nanobot через RouterAI: персональный AI-агент с Claude, GPT и DeepSeek
nanobot
nanobot — сверхлёгкий персональный AI-агент с открытым кодом от HKUDS (репозиторий HKUDS/nanobot). Он ставится одной командой, работает в браузере (WebUI), в терминале и как бот в Telegram, Discord, Slack и других чатах. Агент читает PDF, Word, Excel и PowerPoint, запускает shell-команды, подключает MCP-серверы, выполняет задачи по расписанию и запоминает ваши предпочтения. Модель берётся у внешнего провайдера: nanobot сам её не поставляет.
RouterAI подключается к nanobot как кастомный провайдер с OpenAI-совместимым API. В одном агенте доступны Claude, GPT, DeepSeek и GLM из каталога моделей, работа из России без VPN и оплата в рублях.

Требования
- Python 3.11 или новее (нужен для установки через pip и uv; установщик подбирает окружение сам)
- macOS, Linux или Windows
- API-ключ из личного кабинета RouterAI
Установка
Автоматический установщик создаёт изолированное окружение в ~/.nanobot/venv и открывает настройку модели:
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/HKUDS/nanobot/main/scripts/install.sh | sh
# Windows PowerShell
irm https://raw.githubusercontent.com/HKUDS/nanobot/main/scripts/install.ps1 | iex
Если вы сами управляете окружениями, пакет называется nanobot-ai:
uv tool install nanobot-ai
# или, в активированном виртуальном окружении:
python -m pip install nanobot-ai
Проверьте версию. На момент написания статьи это 0.4.0:
nanobot --version
Запустите WebUI. Команда поднимает gateway и выводит ссылку для входа в браузере:
nanobot webui
Если подтвердить первичную настройку в терминале нельзя (например, в контейнере или по SSH), команда остановится с ошибкой WebUI setup needs confirmation. Добавьте флаг --yes; для запуска без браузера пригодятся --no-open и --detach. Конфигурация хранится в ~/.nanobot/config.json, рабочая папка агента лежит в ~/.nanobot/workspace.
Подключение к RouterAI
Через WebUI
- Откройте Settings (шестерёнка слева внизу), затем Models и нажмите New preset.
- В списке Provider выберите Add provider, затем Custom (пункт внизу окна).
- Заполните форму: в поле Name введите
RouterAI, в API URL —https://routerai.ru/api/v1, в API key — ключ из личного кабинета. - Нажмите Add provider. Вы вернётесь в форму пресета, где провайдер RouterAI уже выбран.
- В поле Preset name введите имя, например
primary. В списке Model найдите модель по названию (поиск работает по списку каталога RouterAI) и выберитеanthropic/claude-sonnet-5.5. Нажмите Save.

Список моделей nanobot подгружает из каталога RouterAI, контекст модели подставляется автоматически. Максимальная длина ответа по умолчанию 8192 токена, её можно изменить в Advanced options.

После сохранения пресет появляется в списке. В поле ввода на главном экране вместо Choose model показывается имя пресета.
Через config.json
Для серверов без браузера и для конфигурации «как код» добавьте в ~/.nanobot/config.json провайдера и пресет. Ключ лучше не писать в файл, а передать через переменную окружения: nanobot подставляет ${ИМЯ} при запуске.
export ROUTERAI_API_KEY="sk-xxxxxxxxxxxxxxxx"
{
"providers": {
"routerai": {
"apiBase": "https://routerai.ru/api/v1",
"apiKey": "${ROUTERAI_API_KEY}"
}
},
"modelPresets": {
"primary": {
"provider": "routerai",
"model": "anthropic/claude-sonnet-5.5"
}
},
"agents": {
"defaults": {
"modelPreset": "primary"
}
}
}
Любой ключ под providers, кроме встроенных, nanobot считает отдельным кастомным провайдером, а пресет ссылается на него через provider. Это фрагмент для слияния с вашим конфигом, а не полный файл.
Не храните ключ открытым текстом в конфиге, который попадёт в git. Если переменная не задана, nanobot не запустится и покажет, какое поле ссылается на отсутствующую переменную.
Anthropic Messages API
Модели anthropic/* можно вызывать и по нативному протоколу. Для этого провайдеру указывают, какой API он принимает:
{
"providers": {
"routerai_claude": {
"apiBase": "https://routerai.ru/api",
"apiKey": "${ROUTERAI_API_KEY}",
"api": {
"supportedApis": ["anthropic_messages"],
"preferredApi": "anthropic_messages"
}
}
}
}
В WebUI то же самое делается в Advanced options окна провайдера (Supported APIs). Для обычной работы хватает OpenAI-совместимого режима из предыдущего раздела.
Зачем отдельный провайдер, а не общий custom
В nanobot есть встроенный провайдер custom для одного OpenAI-совместимого эндпоинта. Документация советует для каждого дополнительного адреса заводить свой ключ в providers: у него собственные apiBase и apiKey, а пресеты ссылаются на него по имени. Так RouterAI для основного чата и локальная модель для мелких задач не мешают друг другу. Пример с Ollama:
{
"providers": {
"routerai": {
"apiBase": "https://routerai.ru/api/v1",
"apiKey": "${ROUTERAI_API_KEY}"
},
"ollama": {
"apiBase": "http://localhost:11434/v1"
}
},
"modelPresets": {
"main": { "provider": "routerai", "model": "anthropic/claude-sonnet-5.5" },
"local": { "provider": "ollama", "model": "llama3.2" }
},
"agents": {
"defaults": {
"modelPreset": "main",
"fallbackModels": ["local"]
}
}
}
В fallbackModels указываются имена пресетов, а не id моделей. Если основной пресет недоступен, nanobot переходит к следующему в цепочке. Модель llama3.2 должна быть заранее скачана в Ollama.
Выбор модели
Идентификаторы проверены по каталогу RouterAI на момент написания; цены и актуальный список смотрите в каталоге.
| Модель | Для чего |
|---|---|
anthropic/claude-sonnet-5.5 |
Основной пресет: диалог, работа с файлами, вызов инструментов |
anthropic/claude-opus-5.5 |
Сложные многошаговые задачи, когда важнее качество, чем скорость |
anthropic/claude-haiku-5.5 |
Быстрые и недорогие ответы, запасной пресет в fallbackModels
|
openai/gpt-6.1-sol |
Альтернатива Claude от OpenAI для тех же задач |
deepseek/deepseek-v4.1-flash-1017 |
Дешёвые массовые запросы и фоновые задачи по расписанию |
z-ai/glm-5.3-flash |
Быстрые ответы в чат-ботах |
Проверка подключения
Быстрая проверка из терминала. Команда отправляет одно сообщение через пресет по умолчанию и печатает ответ:
nanobot agent -m "Ответь одним словом: работаешь?"
nanobot status показывает, какой пресет и какая модель выбраны, и сообщает, готова ли конфигурация (Agent: ✓ provider/model configuration is ready).
В WebUI откройте новый чат, убедитесь, что в поле ввода выбран ваш пресет, и дайте агенту задачу. На кадре агент читает демо-проект со счетами из рабочей папки workspace и отвечает по его файлам.

Сценарии
Ассистент в Telegram
Создайте бота у @BotFather командой /newbot и скопируйте токен. Затем в WebUI откройте Channels → Telegram, вставьте токен, сохраните и включите канал. Для первой настройки оставьте список разрешённых отправителей пустым: новый пользователь получит код сопряжения и сможет писать боту только после вашего подтверждения. Значение * лучше не задавать.
Для сервера без браузера:
nanobot plugins enable telegram
nanobot gateway
{
"channels": {
"telegram": {
"enabled": true,
"token": "${TELEGRAM_TOKEN}"
}
}
}
Бот отвечает той же моделью, с теми же инструментами и памятью, что и WebUI. Если gateway не достаёт до Telegram напрямую, адрес прокси задаётся в Settings → Advanced → Shared proxy, а в настройках канала включается Use proxy. Подробности — в гайде nanobot по Telegram.
Работа с файлами
Агент работает в папке ~/.nanobot/workspace. Положите туда проект или документы и попросите разобрать их: прочитать PDF и Word, свести таблицу Excel, найти функцию в коде. Режим доступа выбирается в поле ввода (на кадрах выше стоит Full Access). Для общего бота разрешения лучше сузить: настройки безопасности описаны в документации nanobot.
Несколько пресетов под разные задачи
Заведите пресеты main (Sonnet), fast (Haiku) и local (Ollama) и переключайтесь между ними командой /model <имя_пресета> в чате или выбором модели в поле ввода WebUI. Правка конфига при этом не нужна. Включённые пресеты можно упорядочить в Settings → Models: первый становится основным, остальные работают как запасные.
Решение проблем
Model 'claude-sonnet-5.5' not found
В model указан id без префикса провайдера. У RouterAI id вида производитель/модель: anthropic/claude-sonnet-5.5. Сверьте написание с каталогом. Поле provider в пресете — это имя ключа из providers (routerai), а в model пишется только id модели из каталога, без имени провайдера nanobot.
Error: Not Found
Скорее всего, в apiBase нет /v1. Для OpenAI-совместимого режима нужен https://routerai.ru/api/v1. Адрес https://routerai.ru/api без /v1 годится только для режима anthropic_messages.
Environment variable is not set
Ключ записан как ${ROUTERAI_API_KEY}, а переменной нет в окружении процесса, который запускает nanobot. Тогда запуск останавливается с сообщением о поле providers.routerai.apiKey. Экспортируйте переменную в том же терминале или задайте её в окружении сервиса (systemd, Docker). Для долгоживущего gateway переменная нужна именно в его окружении, после изменений перезапустите его: nanobot gateway restart.
Агент отвечает ошибкой про модель, которую вы не выбирали
Пресет не назначен основным. Тогда nanobot берёт модель по умолчанию из agents.defaults (в свежем конфиге это anthropic/claude-opus-4-5), и RouterAI отвечает, что такой модели нет. Проверьте nanobot status: в строке Model должен стоять ваш пресет. Если нет, задайте agents.defaults.modelPreset или включите пресет в Settings → Models.
401 Unauthorized и 402 Payment Required
401 означает неверный или неполный ключ, скопируйте его из личного кабинета. 402 — на балансе не хватает средств, пополнить его можно в разделе Биллинг.
Что дальше
- Каталог моделей: подберите модель под задачу
- Аутентификация: управление API-ключами
- Вайб-кодинг в Crush: терминальный агент с кодом в проекте
- AstrBot через RouterAI: другой self-hosted бот для Telegram
- Документация nanobot и справка по провайдерам