1. Почему стоит запускать nanobot на Mac mini?
nanobot построен вокруг долгоживущего процесса шлюза: официальная документация рекомендует держать nanobot gateway запущенным, поскольку именно он отвечает за фоновую доставку сообщений в мессенджеры, темы WebUI, автоматизации по расписанию, локальные триггеры и heartbeat. Это работает только на машине, которая никогда не уходит в сон. Выделенный Mac mini от MyRemoteMac даёт именно это, физический Mac на Apple Silicon, принадлежащий только вам, онлайн 24/7 с SLA 99,9 %, полным root-доступом, SSH и VNC и WireGuard VPN, за фиксированную месячную цену вместо тарификации VPS уровня GPU. А поскольку это macOS, nanobot может использовать встроенную песочницу exec на базе Seatbelt (sandbox-exec, поставляется с macOS) и запускать локальную модель Ollama на той же машине.
| Параметр | Облачный VPS (ИИ-тариф) | Mac mini (MyRemoteMac) |
|---|---|---|
| Стоимость в месяц | Тарифы уровня GPU (варьируются) | M4 от $85/мес · M6 от $149/мес (фиксированная, USD) |
| Песочница exec | bubblewrap (bwrap, нужно устанавливать) | Seatbelt (sandbox-exec), встроен в macOS |
| Локальный LLM (Ollama) | Доплата / ограничено | Нативно в унифицированной памяти Apple Silicon |
| Круглосуточная работа | Да | Да (SLA 99,9 %) |
| Оборудование | Общее, виртуализированное | Выделенный физический Mac 1:1 |
| Доступ | SSH | SSH + VNC + WireGuard VPN, полный root |
Ключевое преимущество: Для продакшена nanobot рекомендует сочетать ограничение рабочего пространства на уровне приложения с песочницей exec на уровне ОС, bubblewrap в Linux, Seatbelt в macOS. На Mac mini песочница уже есть: один ключ конфигурации ограничивает shell-команды агента файловой системой рабочего пространства (без ограничения сети). Добавьте локальную модель Ollama, и рутинные задачи никогда не покинут машину.
2. Требования
nanobot распространяется как PyPI-пакет nanobot-ai с платформенными wheel-сборками для macOS 13+ на Apple Silicon и Intel, в которые включены WebUI и нативный терминальный интерфейс. Для стандартного пути установки не нужны ни Node.js, ни Homebrew, ни Git. Вот что вам понадобится:
- Выделенный Mac mini от MyRemoteMac, M4 от $85/мес (16 ГБ / 256 ГБ) или M6 от $149/мес. Оба на Apple Silicon и покрываются wheel-сборкой macOS arm64.
- SSH-доступ к Mac mini (предоставляется вместе с подпиской MyRemoteMac) и обычная учётная запись без прав root для запуска nanobot, SECURITY.md проекта запрещает запускать его от root.
- Python 3.11 или новее и curl. Установщик одной командой прерывается, если находит только более старый python3; uv или pipx необязательны, но рекомендуются, когда pip сообщает об externally-managed-environment.
- Провайдер LLM: ключ API (встроена поддержка Anthropic, OpenAI, OpenRouter, Gemini, DeepSeek, Groq, Mistral и ещё около 40 провайдеров) или локальный OpenAI-совместимый сервер, например Ollama, запущенный на том же Mac mini.
- Аккаунт в Telegram, Discord, Slack или WhatsApp, чтобы обращаться к агенту (Telegram, самый быстрый вариант: токен бота от @BotFather и никаких входящих портов).
3. Шаг 1: Подключение по SSH и установка nanobot
Подключитесь к Mac mini по SSH с учётными данными из панели управления MyRemoteMac. Выполняйте все команды этого руководства от имени обычного пользователя macOS, никогда от root: LaunchAgent, который вы установите позже, работает внутри сессии этого пользователя.
Подключение по SSH и проверка Python
# Connect to your Mac mini as a standard user (never root: SECURITY.md)
ssh admin@your-server-ip
# Confirm you are on Apple Silicon
uname -m
# arm64
# nanobot needs Python 3.11 or newer: install a current Python first if this is older
python3 --version
# Python 3.12.x
# curl is used to fetch the one-command installer
which curl
Установка nanobot
Стандартный путь проекта, установщик одной командой, который устанавливает или обновляет nanobot-ai из PyPI, используя активное виртуальное окружение, uv, pipx или управляемый venv в ~/.nanobot/venv, и выводит точную команду, которую применил. Поскольку задана переменная SSH_CONNECTION, он пропускает браузерный WebUI и вместо этого запускает терминальный мастер nanobot onboard --wizard. Сначала посмотрите предварительный результат с --dry-run. Если вы предпочитаете управлять установкой сами, uv и pipx, задокументированные альтернативы:
# Option A, official one-command installer: preview, then run
curl -fsSL https://raw.githubusercontent.com/HKUDS/nanobot/main/scripts/install.sh | sh -s -- --dry-run
curl -fsSL https://raw.githubusercontent.com/HKUDS/nanobot/main/scripts/install.sh | sh
# Over SSH it runs the terminal wizard `nanobot onboard --wizard` instead of opening the WebUI.
# The script reads NANOBOT_SKIP_WIZARD / PYTHON from sh's own environment, so set them on sh, not on curl:
# curl -fsSL https://raw.githubusercontent.com/HKUDS/nanobot/main/scripts/install.sh | NANOBOT_SKIP_WIZARD=1 sh
# curl -fsSL https://raw.githubusercontent.com/HKUDS/nanobot/main/scripts/install.sh | PYTHON=/path/to/python3.12 sh
# Option B: uv (isolated tool install, no externally-managed-environment errors)
uv tool install nanobot-ai
# Option C: pipx, or pip inside a virtual environment
pipx install nanobot-ai
# python3 -m pip install nanobot-ai
# pip says "externally-managed-environment"? Use Option A or B: never --break-system-packages
Проверка установки
Если в новой оболочке nanobot отсутствует в PATH, используйте способ запуска, который вывел установщик (uv tool run, pipx run или управляемый venv), либо добавьте ~/.local/bin в PATH:
nanobot --version
# 0.3.5
# `nanobot` not found? Use the runner the installer printed:
uv tool run --from nanobot-ai nanobot --version
pipx run --spec nanobot-ai nanobot --version
~/.nanobot/venv/bin/python -m nanobot --version
4. Шаг 2: Настройка провайдера моделей (API или локальная Ollama)
nanobot читает всё из ~/.nanobot/config.json (провайдеры, пресеты моделей, каналы, инструменты), а память, навыки и создаваемые файлы хранит в ~/.nanobot/workspace/. Терминальный мастер создаёт и то и другое. Фрагменты конфигурации в официальной документации используют ключи в camelCase и предназначены для слияния с файлом, а не для вставки целиком. Файл читается один раз при запуске, поэтому перезапускайте шлюз после каждого изменения.
Запуск терминального мастера
# Documented path for SSH / headless installs (the installer already ran it unless skipped)
nanobot onboard --wizard
# Creates ~/.nanobot/config.json and ~/.nanobot/workspace/
# Later, after an upgrade: merge new default fields without overwriting your values
nanobot onboard --refresh
Добавление провайдера и пресета модели
Пресет связывает провайдера с моделью. В примере из документации, Anthropic напрямую с claude-opus-4-5; самая частая ошибка при первом запуске, смешать ключ API одного провайдера с идентификатором модели другого, поэтому всегда закрепляйте провайдера в пресете. В официальных примерах ключ указан как ${ANTHROPIC_API_KEY}: он берётся из окружения процесса, запускающего nanobot, и никогда не записывается обратно. Это работает для сессий на переднем плане, запущенных из вашей оболочки (наследование окружения отсоединённым процессом --background не задокументировано), но LaunchAgent, создаваемый на Шаге 4, не передаёт переменные окружения, поэтому для развёртывания через launchd храните ключ в config.json и ограничьте доступ к файлу, как описано в SECURITY.md:
# Merge into ~/.nanobot/config.json (key from console.anthropic.com)
{
"providers": {
"anthropic": { "apiKey": "sk-ant-YOUR_API_KEY_HERE" }
},
"modelPresets": {
"primary": {
"provider": "anthropic",
"model": "claude-opus-4-5",
"maxTokens": 8192,
"contextWindowTokens": 200000
}
},
"agents": { "defaults": { "modelPreset": "primary" } }
}
# Docs alternative for shell-started sessions: "apiKey": "${ANTHROPIC_API_KEY}"
# (resolved from the environment at startup; an unset variable fails fast with ConfigLoadError)
# Lock the config down (SECURITY.md)
chmod 700 ~/.nanobot && chmod 600 ~/.nanobot/config.json
Опционально: локальная модель через Ollama
У nanobot есть отдельный провайдер ollama. Запустите Ollama на Mac mini отдельно (см. наше руководство по LLM на Mac mini), затем направьте провайдер на http://localhost:11434/v1, имя модели указывается как «сырой» тег Ollama без префикса, а большинству установок Ollama ключ API не нужен. Цепочки резервных моделей (fallback) ссылаются на имена пресетов, так что можно оставить облачную передовую модель основной, а локальный пресет, резервным (или наоборот):
# Ollama must already be running on the Mac mini (started separately, outside nanobot)
# Merge into ~/.nanobot/config.json: model = raw Ollama tag, no prefix, no API key needed
{
"providers": {
"ollama": { "apiBase": "http://localhost:11434/v1" }
},
"modelPresets": {
"primary": {
"provider": "ollama",
"model": "llama3.2",
"maxTokens": 4096,
"contextWindowTokens": 32768
}
},
"agents": { "defaults": { "modelPreset": "primary" } }
}
# Fallback chains use preset names, not model IDs: context is sized for the smallest window in the chain
# "agents": { "defaults": { "modelPreset": "primary", "fallbackModels": ["localSmall"] } }
Проверка настройки и отправка первого сообщения
Документация однозначна: не добавляйте мессенджеры, серверы MCP, резервные модели или сервис, пока это не заработает.
# Check the setup without calling a model
nanobot status
# First one-shot message (since v0.3.5 a bare `nanobot` opens the terminal UI instead)
nanobot -m "Hello!"
5. Шаг 3: Подключение каналов обмена сообщениями
Документация nanobot по мессенджерам охватывает Telegram, Discord, Slack, WhatsApp, WeChat, WeCom, Feishu/Lark, DingTalk, QQ, Matrix, электронную почту, Mattermost, Linear, Microsoft Teams, Signal и Mochat, а также встроенный WebUI, терминальный интерфейс и OpenAI-совместимый API (nanobot serve). iMessage не поддерживается. Зависимости каналов, это необязательные компоненты: включайте их командой nanobot plugins enable <channel>, прежде чем активировать канал в конфигурации. Telegram запускается быстрее всего, по умолчанию используется long polling, поэтому входящий порт на Mac mini не нужен. Руководство по Telegram рекомендует для первой настройки режим «только сопряжение»: не указывайте allowFrom и подтвердите первое личное сообщение из доверенного локального CLI:
# 1. In Telegram, open @BotFather, send /newbot and copy the token (format: 1234567890:AAF...)
# 2. Enable the optional Telegram feature in the same Python environment as nanobot
nanobot plugins enable telegram
# 3. Merge into ~/.nanobot/config.json: omit allowFrom to use pairing-only mode
{ "channels": { "telegram": { "enabled": true, "token": "1234567890:AAF..." } } }
# 4. The channel must be listed, then run the gateway in the foreground for a first test
nanobot channels status
nanobot gateway
# 5. DM your bot once: it answers with a pairing code. Approve it from a second SSH session:
nanobot agent -m "/pairing approve ABCD-EFGH"
# 6. Stop the foreground gateway with Ctrl+C before installing the service in Step 4
Подключение Discord, Slack или WhatsApp
Для Discord нужен токен бота с включённым MESSAGE CONTENT INTENT в Developer Portal; оставьте groupPolicy в значении по умолчанию mention, чтобы бот отвечал только при @упоминании. Slack использует Socket Mode (токен бота плюс токен уровня приложения с правом connections:write) и не требует публичного URL, но личные сообщения по умолчанию открыты, установите dm.policy в allowlist, чтобы получать коды сопряжения. WhatsApp подключается по QR-коду и начиная с v0.3.0 реализован на чистом Python (без моста на Node.js); его база данных сессии равносильна полному доступу к аккаунту, поэтому держите ~/.nanobot/whatsapp-auth с правами 0700 и используйте отдельный номер:
# Discord: bot token with MESSAGE CONTENT INTENT enabled in the Developer Portal
{ "channels": { "discord": { "enabled": true, "token": "YOUR_DISCORD_BOT_TOKEN",
"groupPolicy": "mention", "allowChannels": [] } } }
# Slack, Socket Mode (xoxb bot token + xapp app-level token with connections:write), no public URL
nanobot plugins enable slack
{ "channels": { "slack": { "enabled": true, "botToken": "xoxb-...", "appToken": "xapp-...",
"dm": { "policy": "allowlist" } } } }
# WhatsApp: the CLI prints a QR code; scan it from WhatsApp > Linked Devices
# (if the QR is not readable in your terminal, run the same command over VNC; our advice: use a separate number)
nanobot plugins enable whatsapp
nanobot channels login whatsapp
{ "channels": { "whatsapp": { "enabled": true, "allowFrom": ["33612345678"] } } }
chmod 700 ~/.nanobot/whatsapp-auth # session DB = full account access
# Every channel: verify it is listed, then restart the gateway
nanobot channels status
Контроль доступа: allowFrom и сопряжение
Каждый канал с поддержкой личных сообщений следует одному правилу. Если allowFrom не задан, первое личное сообщение возвращает код сопряжения, который вы подтверждаете из уже одобренного чата или CLI. Непустой список, это строгий список разрешённых: все остальные игнорируются. Подстановочный знак обходит сопряжение и позволяет любому, кто имеет доступ к каналу, общаться с ботом, документация допускает это только намеренно или временно в приватной песочнице, никогда в продакшене:
# channels.<name>.allowFrom semantics
# omitted → pairing-only mode: the first DM returns a code such as ABCD-EFGH
# ["123456789"] → static allowlist (your numeric Telegram/Discord ID), everyone else ignored
# ["*"] → anyone who can reach the channel: never in production
# Pairing management from the trusted local CLI
nanobot agent -m "/pairing approve ABCD-EFGH"
nanobot agent -m "/pairing deny ABCD-EFGH"
nanobot agent -m "/pairing revoke 123456789"
# Slack / Mattermost need "dm": { "policy": "allowlist" } to issue pairing codes;
# "dm": { "enabled": false } disables DMs where you do not need them
6. Шаг 4: Усиление защиты, работа 24/7 через launchd, обновление
Прежде чем продолжать, остановите шлюз на переднем плане (Ctrl+C). nanobot документирует три способа держать шлюз запущенным в macOS: LaunchAgent, который он записывает сам, отсоединённый фоновый процесс, управляемый из CLI, или обычный процесс на переднем плане для тестов. Для headless Mac mini, работающего 24/7, используйте LaunchAgent, это единственный вариант, который launchd контролирует и перезапускает при сбое. Сначала усильте защиту конфигурации.
Усиление защиты перед постоянным запуском
Официальная рекомендация для продакшена, одновременно ограничение рабочего пространства на уровне приложения и песочница exec на уровне ОС, в macOS это Seatbelt. Seatbelt ограничивает shell-команды агента рабочим пространством (чтение и запись), медиафайлами (только чтение) и необходимыми системными путями, скрывает каталог конфигурации ~/.nanobot и перенаправляет HOME и TMPDIR в рабочее пространство. Сетевой доступ он не ограничивает, а restrictToWorkspace сам по себе, не песочница ОС. Если агенту вообще не нужна оболочка, удалите инструмент полностью. Также оставьте tools.maxSessionMessagesPerMinute на значении по умолчанию 6 и установите лимит расходов у своего провайдера LLM:
# Official production recommendation on macOS: merge into ~/.nanobot/config.json
{
"tools": {
"restrictToWorkspace": true,
"exec": { "sandbox": "seatbelt" }
}
}
# Agent does not need a shell? Remove the tool entirely instead:
# { "tools": { "exec": { "enable": false } } }
# Seatbelt sets HOME and TMPDIR to the workspace and masks ~/.nanobot. Scripts that need
# extra paths get them via tools.exec.sandboxRoBinds / sandboxRwBinds (use sparingly).
# Neither Seatbelt nor bwrap restricts network access.
# Keep WebUI / API on localhost (defaults: WebUI 127.0.0.1:8765, health 127.0.0.1:18790, serve 127.0.0.1:8900)
# and leave tools.webuiAllowRemotePackageInstall = false and tools.ssrfWhitelist = []
Установка LaunchAgent
nanobot gateway install-service записывает ~/Library/LaunchAgents/ai.nanobot.gateway.plist, который запускает python -m nanobot gateway --foreground с вашим текущим Python, стартует при загрузке (RunAtLoad), перезапускается при сбое (KeepAlive с SuccessfulExit false) и пишет логи в ~/.nanobot/logs/. Команда завершается ошибкой address already in use, если вручную запущенный шлюз всё ещё работает, поэтому сначала остановите его и посмотрите предварительный результат с --dry-run:
# Stop any manually started gateway first (otherwise: "address already in use")
nanobot gateway stop
# Preview the plist, then install it
nanobot gateway install-service --manager launchd --dry-run
nanobot gateway install-service --manager launchd
# Writes ~/Library/LaunchAgents/ai.nanobot.gateway.plist
# Runs: python -m nanobot gateway --foreground (RunAtLoad, KeepAlive on failure)
# Logs: ~/.nanobot/logs/
Управление сервисом
LaunchAgent живёт в домене gui вашего пользователя, поэтому работает, пока существует его сессия входа, документация описывает это как «остаётся онлайн после вашего входа в систему». После перезагрузки headless Mac mini он вернётся только при автоматическом входе вашего пользователя; один раз протестируйте перезагрузку и проверьте через launchctl list. Перезапускайте его после каждого изменения config.json:
# Is it loaded?
launchctl list | grep ai.nanobot.gateway
# Restart after every config.json edit (config is read at startup only)
launchctl kickstart -k gui/$(id -u)/ai.nanobot.gateway
# Remove the service
nanobot gateway uninstall-service --manager launchd
# Second, isolated instance on the same Mac (own config, workspace, port and LaunchAgent).
# docs/multiple-instances.md: "Each instance must use a different port if they run at the same time"
# nanobot onboard --config ~/.nanobot-telegram/config.json --workspace ~/.nanobot-telegram/workspace
# Merge into ~/.nanobot-telegram/config.json (default gateway port is 18790; change the WebSocket
# channel port too if that instance also enables the WebUI, default 8765):
# { "gateway": { "host": "127.0.0.1", "port": 18792 },
# "channels": { "websocket": { "port": 8766 } } }
# nanobot gateway install-service --manager launchd --name nanobot-telegram \
# --config ~/.nanobot-telegram/config.json --workspace ~/.nanobot-telegram/workspace
# (for a one-off foreground run instead: nanobot gateway --config ~/.nanobot-telegram/config.json --port 18792)
Более лёгкая альтернатива: nanobot gateway --background
README называет это единственной командой, которая переводит общий шлюз в постоянный фоновый режим. Это удобно для тестов, но процесс не контролируется ОС, поэтому сам по себе после перезагрузки не возвращается, не совмещайте его с LaunchAgent:
nanobot gateway --background
nanobot gateway status
nanobot gateway logs
nanobot gateway restart
nanobot gateway stop
Обновление nanobot
Команды nanobot update не существует: обновляйтесь тем же способом, которым устанавливали. Проект просит проверять обновления еженедельно и в 2026 году опубликовал пять бюллетеней безопасности, поэтому обновляйтесь оперативно. Сначала прочитайте примечания к выпуску, v0.3.5 перенесла файлы сессий в sessions/<workspace-id>/ и требует сделать резервную копию конфигурации, рабочих пространств и хранилища сессий и предварительно остановить старые процессы. Поэтому остановите шлюз (удалите LaunchAgent или выполните nanobot gateway stop в фоновом режиме), сделайте резервную копию, обновитесь и запустите его снова, никогда не позволяйте двум версиям одновременно писать в одно рабочее пространство:
# 1. Stop the old gateway first (v0.3.5 release notes: never let two versions write the same workspace)
nanobot gateway uninstall-service --manager launchd # LaunchAgent (nanobot documents no plain launchd stop)
# nanobot gateway stop # --background mode
# 2. Back up config, workspace and sessions
cp -R ~/.nanobot ~/nanobot-backup-$(date +%F)
# 3. Upgrade with the same method you installed with
curl -fsSL https://raw.githubusercontent.com/HKUDS/nanobot/main/scripts/install.sh | sh
# or: uv tool upgrade nanobot-ai
# or: pipx upgrade nanobot-ai
# or: python3 -m pip install -U nanobot-ai
nanobot --version
nanobot onboard --refresh # merge new default config fields, keep your values
# 4. Start again so the new code and config are loaded
nanobot gateway install-service --manager launchd # LaunchAgent: reinstall (RunAtLoad starts it)
# nanobot gateway --background # --background mode
7. Устранение распространённых проблем
Установщик прерывается, pip отказывается устанавливать или nanobot отсутствует в PATH
Установщик останавливается, если python3 старше 3.11, установите актуальный Python и укажите на него через переменную PYTHON. Никогда не отвечайте на ошибку externally-managed-environment флагом --break-system-packages: используйте uv, pipx или виртуальное окружение. Если команда отсутствует в новой оболочке, используйте способ запуска, который вывел установщик:
# Python too old? Point the installer at a 3.11+ interpreter
python3 --version
PYTHON=/path/to/python3.12 sh -c "$(curl -fsSL https://raw.githubusercontent.com/HKUDS/nanobot/main/scripts/install.sh)"
# "externally-managed-environment" → isolated install, never --break-system-packages
uv tool install nanobot-ai
# or: pipx install nanobot-ai
# "curl: command not found" → skip the script
uv tool install nanobot-ai
# `nanobot` not on PATH in a new shell
uv tool run --from nanobot-ai nanobot --version
pipx run --spec nanobot-ai nanobot --version
~/.nanobot/venv/bin/python -m nanobot --version
export PATH="$HOME/.local/bin:$PATH"
Первое сообщение не проходит: неверная модель, ConfigLoadError или ошибка провайдера
Ключ одного провайдера с идентификатором модели другого, самая частая ошибка при первом запуске. Незаданный плейсхолдер ${VAR} приводит к немедленному сбою запуска с ConfigLoadError, под LaunchAgent окружение не передаётся, поэтому там используйте сохранённый ключ. Проверьте настройку без обращения к модели, затем повторите с подробным логированием:
# Validate without spending tokens
nanobot status
# Provider and model must match in the preset: provider "anthropic" ↔ "claude-opus-4-5",
# provider "openai" ↔ "gpt-5", provider "openrouter" ↔ "anthropic/claude-opus-4.5", provider "ollama" ↔ "llama3.2"
# ConfigLoadError at startup = a ${VAR} placeholder is unset in the starting process' environment
# (the generated LaunchAgent passes no environment → store the key in config.json + chmod 600)
# Watch the gateway with verbose logging (also verifies MCP servers)
nanobot gateway --verbose
Telegram-бот молчит
Обычно причина одна из трёх: компонент telegram не был включён в том же окружении Python, ваше личное сообщение всё ещё ждёт подтверждения сопряжения, либо вы изменили config.json без перезапуска шлюза (конфигурация читается только при запуске). Проверьте список каналов, подтвердите ожидающие сопряжения и перезапустите:
# Is the channel enabled and listed?
nanobot plugins enable telegram
nanobot channels status
# Pending pairing? Approve it from the CLI
nanobot agent -m "/pairing approve ABCD-EFGH"
# Edited config.json? Restart the gateway
launchctl kickstart -k gui/$(id -u)/ai.nanobot.gateway
# or: nanobot gateway restart
# Token revoked? Generate a new one via @BotFather (/mybots > API Token) and update config.json
# WhatsApp "login expired"? nanobot channels login whatsapp
LaunchAgent не запускается или шлюз пропал после перезагрузки
address already in use означает, что вручную запущенный шлюз (на переднем плане или с --background) всё ещё держит порт, остановите его и переустановите. После перезагрузки LaunchAgent домена gui запускается только после входа вашего пользователя в систему. Логи находятся в ~/.nanobot/logs/; WebUI работает на порту 8765, а 18790, только эндпоинт проверки состояния:
# "address already in use" → a manual gateway still holds the port
nanobot gateway stop
nanobot gateway install-service --manager launchd
# Loaded? Logs?
launchctl list | grep ai.nanobot.gateway
ls ~/.nanobot/logs/
# Gone after a reboot: a gui-domain LaunchAgent starts once your user has logged in.
# If your setup allows automatic login for the nanobot user, enable it and reboot-test;
# WARNING: auto-login trades console-login security for reboot survival, confirm with your ops policy first.
# Ports: WebUI 8765 (localhost), health endpoint 18790, `nanobot serve` API 8900
# Generic SSH tip (not a nanobot feature): reach the localhost WebUI from your laptop
# ssh -N -L 8765:127.0.0.1:8765 admin@your-server-ip → http://127.0.0.1:8765
8. Сравнение стоимости с облачным VPS
Сам nanobot бесплатен (MIT). Вы платите за хост и за использование LLM. Сравнение хостов ниже использует те же диапазоны цен на облачные VPS, что и наши руководства по OpenClaw и Hermes; использование API LLM тарифицируется провайдером отдельно и одинаково на любом хосте, если только вы не запускаете локальную модель Ollama на Mac mini, тогда инференс стоит $0. nanobot не публикует данных о потреблении ОЗУ или CPU (он лишь описывает себя как сверхлёгкий), поэтому подбор тарифа ниже носит качественный характер.
| Сценарий использования | Запросов к ИИ/мес | Стоимость облачного VPS | Стоимость MyRemoteMac | Экономия в месяц |
|---|---|---|---|---|
| Личный помощник (облачная API-модель) | ~500 запросов | $120/мес (базовый GPU VPS) | $85/мес (Mac mini M4) | $35/мес |
| Бот для команды + автоматизации по расписанию | ~5 000 запросов | $200/мес | $85/мес (Mac mini M4) | $115/мес |
| Локальная модель Ollama + агент на одной машине | Без ограничений (локально) | $350+/мес (GPU VPS) | $149/мес (Mac mini M6) | $201+/мес |
| Несколько изолированных экземпляров, интенсивная автоматизация | 10 000+ запросов | $600+/мес | $149/мес (Mac mini M6) | $451+/мес |
Допущения: цены на VPS, те же диапазоны, что используются во всех наших руководствах для ИИ-тарифов с GPU, а не котировки конкретного провайдера; цены MyRemoteMac, текущие месячные тарифы в USD (1 Gbps включён, Mac mini M6 доступен с 22 сентября 2026 г.). Разделение на M4/M6, рекомендация, а не измеренное требование: Mac mini M4 с запасом хватает для личного бота на облачных провайдерах; выбирайте M6, когда та же машина обслуживает ещё и локальную модель Ollama или несколько экземпляров nanobot.
Итог: Выделенный Mac mini обходится дешевле GPU VPS при любом уровне нагрузки, а цепочки резервных моделей nanobot на основе пресетов позволяют направлять рутинную работу бесплатному локальному пресету Ollama, оставив облачную передовую модель для сложных вопросов, и всё это на оборудовании, которое принадлежит только вам.
9. nanobot против OpenClaw
Оба, персональные ИИ-агенты с открытым исходным кодом (MIT), самостоятельным хостингом и круглосуточной работой, управляемые из ваших мессенджеров; оба запускают долгоживущий шлюз и оба регистрируют собственный LaunchAgent в launchd (ai.nanobot.gateway и ai.openclaw.gateway). README nanobot даже называет nanobot gateway знакомой точкой входа для тех, кто переходит с OpenClaw. Различия, в стеке и в позиционировании. OpenClaw написан на TypeScript под Node.js (26.1+ или 24.16+ через Homebrew) и устанавливается через npm; nanobot, это Python 3.11+ из PyPI (nanobot-ai), устанавливается однострочным скриптом, uv или pipx и вовсе не требует Node.js. Ставка OpenClaw, широта возможностей и более крупное сообщество; ставка nanobot, небольшое читаемое ядро, сопряжение для каждого канала плюс встроенная песочница exec на базе macOS Seatbelt (новинка v0.3.5), несколько изолированных экземпляров на одном Mac (multiple-instances.md), а также Python SDK и OpenAI-совместимый API. OpenClaw поддерживает iMessage; nanobot, нет.
Если вам нужен максимально функциональный помощник, более крупное сообщество и длинный список каналов, прочитайте наше руководство по OpenClaw на Mac mini. Если вы хотите лёгкий Python-агент, который можно прочитать от начала до конца, несколько экземпляров в песочнице или Ollama на том же Mac mini, nanobot подойдёт лучше. Третий вариант, Hermes Agent, описан в нашем руководстве по Hermes на Mac mini. Mac mini, сервис launchd и вариант с локальной Ollama одинаковы для всех трёх.
10. FAQ
Бесплатен ли nanobot?
Да. nanobot распространяется по лицензии MIT и бесплатен; вы платите только за использование LLM у выбранного провайдера. Локальная модель Ollama на вашем Mac mini работает бесплатно. Сам Mac mini, от $85/мес (M4) или $149/мес (M6) на MyRemoteMac, оплата в USD.
Какую конфигурацию Mac mini выбрать для nanobot?
nanobot не публикует данных о потреблении ОЗУ или CPU, поэтому оценка качественная. Для личного бота на облачных провайдерах (Anthropic, OpenAI, OpenRouter и т. д.) разумный выбор, базовый Mac mini M4 за $85/мес (16 ГБ / 256 ГБ): агент описывается как сверхлёгкий. Выбирайте Mac mini M6 от $149/мес, когда на той же машине работает ещё и локальная модель Ollama или несколько изолированных экземпляров nanobot, именно локальный инференс требует памяти и вычислительных ресурсов.
Переживёт ли nanobot перезагрузку Mac mini?
LaunchAgent, записанный командой nanobot gateway install-service --manager launchd, имеет RunAtLoad true и KeepAlive, поэтому launchd запускает его при загрузке вашей пользовательской сессии и перезапускает после сбоя. Он живёт в домене gui, а значит, после перезагрузки возвращается только после входа вашего пользователя в систему. Если ваша конфигурация допускает автоматический вход для этого пользователя, его включение восстанавливает сервис после перезагрузки, но учтите, что автовход обменивает безопасность входа с консоли на устойчивость к перезагрузкам, поэтому сначала сверьтесь со своей политикой эксплуатации, затем один раз протестируйте перезагрузку и проверьте через launchctl list | grep ai.nanobot.gateway. nanobot gateway --background не контролируется системой и перезагрузку не переживает.
Может ли nanobot использовать локальную модель вместо API?
Да. У nanobot есть отдельный провайдер ollama (apiBase по умолчанию http://localhost:11434/v1), а также lm_studio, vllm и OVMS для других локальных OpenAI-совместимых серверов. Запустите Ollama на Mac mini, укажите в пресете model как «сырой» тег Ollama (например, llama3.2) и закрепите provider как ollama. Большинству установок Ollama ключ API не нужен. Если ходы с использованием инструментов работают медленно, документация советует проверить шаблон чата модели и повторное использование кэша промптов, прежде чем трогать настройки памяти или контекста.
Какие мессенджеры поддерживает nanobot?
Официальная документация по мессенджерам перечисляет Telegram, Discord, Slack, WhatsApp, WeChat/Weixin, WeCom, Feishu/Lark, DingTalk, QQ (а также Napcat/OneBot), Matrix/Element, электронную почту, Mattermost, Linear, Microsoft Teams, Signal и Mochat, обслуживаемые одним шлюзом, плюс встроенный WebUI, нативный терминальный интерфейс и OpenAI-совместимый HTTP API через nanobot serve. iMessage не поддерживается.
Безопасно ли давать ИИ-агенту доступ к оболочке на моём Mac mini?
Только с задокументированными ограничениями: запускайте nanobot от обычного пользователя (никогда от root), установите tools.restrictToWorkspace в true и tools.exec.sandbox в seatbelt (рекомендация проекта для продакшена в macOS) либо установите tools.exec.enable в false, если агенту вообще не нужна оболочка. Держите режим «только сопряжение» или узкий allowFrom на каждом канале, никогда не используйте подстановочный знак, оставляйте WebUI и API привязанными к localhost, сохраняйте лимит по умолчанию в 6 сообщений в минуту, установите лимит расходов у провайдера и обновляйтесь еженедельно, в 2026 году опубликовано пять бюллетеней безопасности, поэтому используйте 0.3.5 или новее.
11. Источники и дополнительные материалы
Каждая команда, путь и ключ конфигурации в этом руководстве взяты из официального репозитория nanobot (README и дерево docs/, прочитаны 28 сентября 2026 г., v0.3.5) и его SECURITY.md. Документация в репозитории может быть новее последнего выпуска пакета, поэтому, если команда ведёт себя иначе, сверьтесь с репозиторием.
- Репозиторий nanobot на GitHub (HKUDS/nanobot): установка и быстрый старт
- Быстрый старт (config.json, рабочее пространство, обновление тем же способом)
- Развёртывание: LaunchAgent в macOS (install-service, launchctl kickstart)
- Справочник по конфигурации (секреты, плейсхолдеры ${VAR}, MCP, веб-инструменты)
- Конфигурация: безопасность (restrictToWorkspace, песочница Seatbelt, exec.enable)
- Провайдеры (пресеты, цепочки резервных моделей, несоответствие провайдера и модели)
- Провайдеры: Ollama (apiBase /v1, «сырой» тег модели)
- Мессенджеры (Telegram, Discord, Slack, WhatsApp, allowFrom, сопряжение)
- Руководство: ИИ-агент в Telegram (режим «только сопряжение», headless-настройка)
- Руководство: безопасный локальный ИИ-агент (привязка к localhost, одно рабочее пространство на границу доверия)
- Справочник CLI (onboard --wizard / --refresh, gateway, plugins, channels)
- WebUI (127.0.0.1:8765, tokenIssueSecret, доступ из локальной сети)
- Автоматизации (инструмент cron, локальные триггеры, heartbeat)
- Несколько экземпляров на одной машине
- Устранение неполадок (Python 3.11+, externally-managed-environment, порты)
- SECURITY.md (никогда не запускать от root, chmod 600/700, известные ограничения)
- Бюллетени безопасности (пять опубликованы в 2026 году)
- Выпуск v0.3.5 (15 сентября 2026 г.: структура сессий, Seatbelt, время жизни шлюза)
- PyPI: nanobot-ai (требует Python 3.11+, wheel-сборки для macOS 13+)
Похожие руководства
Установка OpenClaw на Mac mini
Полнофункциональный харнесс для self-hosted ИИ-агентов на Node.js/npm, тот же рецепт для Mac mini с собственным LaunchAgent через gateway install.
Установка Hermes Agent на Mac mini
Самосовершенствующийся Python-агент от Nous Research: установка одной командой, Telegram и Discord, launchd и локальная Ollama на выделенном Mac mini.
Запуск LLM на Mac mini M4
Запускайте Ollama, llama.cpp и локальные языковые модели нативно на Apple Silicon для бесплатного ИИ-инференса.
Аренда Mac mini M6
Новейший Mac mini от Apple, выделенный 1:1 от $149/мес, выбор, когда nanobot делит машину с локальной моделью Ollama.