1. Warum nanobot auf einem Mac mini betreiben?
nanobot ist um einen langlebigen Gateway-Prozess herum aufgebaut: Die offizielle Dokumentation empfiehlt, nanobot gateway dauerhaft laufen zu lassen, weil es die Hintergrundzustellung für Chat-Apps, WebUI-Topics, geplante Automatisierungen, lokale Trigger und den Heartbeat übernimmt. Das funktioniert nur auf einer Maschine, die nie in den Ruhezustand geht. Ein dedizierter Mac mini von MyRemoteMac bietet genau das, ein physischer Apple-Silicon-Mac, der Ihnen allein gehört, rund um die Uhr online mit 99,9 % SLA, vollem Root-Zugriff, SSH- und VNC-Zugang und einem WireGuard-VPN, zu einem monatlichen Pauschalpreis statt einer Abrechnung nach GPU-VPS-Stufe. Und weil es macOS ist, kann nanobot seine integrierte Seatbelt-Exec-Sandbox (sandbox-exec, in macOS enthalten) nutzen und ein lokales Ollama-Modell auf derselben Maschine ausführen.
| Merkmal | Cloud-VPS (KI-Stufe) | Mac mini (MyRemoteMac) |
|---|---|---|
| Monatliche Kosten | Preise der GPU-Stufe (variieren) | M4 ab 85 $/Monat · M6 ab 149 $/Monat (Pauschale, USD) |
| Exec-Sandbox | bubblewrap (bwrap, muss installiert werden) | Seatbelt (sandbox-exec), in macOS integriert |
| Lokales LLM (Ollama) | Zusatzkosten / eingeschränkt | Nativ im Unified Memory von Apple Silicon |
| Always-On-Verfügbarkeit | Ja | Ja (99,9 % SLA) |
| Hardware | Geteilt, virtualisiert | Dedizierter physischer Mac, 1:1 |
| Zugriff | SSH | SSH + VNC + WireGuard-VPN, voller Root-Zugriff |
Wichtigster Vorteil: Die Produktionsempfehlung von nanobot lautet, den Workspace-Schutz auf Anwendungsebene mit einer Exec-Sandbox des Betriebssystems zu kombinieren, bubblewrap unter Linux, Seatbelt unter macOS. Auf einem Mac mini ist die Sandbox bereits vorhanden: Ein einziger Konfigurationsschlüssel beschränkt die Shell-Befehle des Agenten auf das Dateisystem des Workspace (keine Netzwerkbeschränkung). Kombinieren Sie das mit einem lokalen Ollama-Modell, und Routineaufgaben verlassen die Maschine nie.
2. Voraussetzungen
nanobot wird als PyPI-Paket nanobot-ai mit Plattform-Wheels für macOS 13+ auf Apple Silicon und Intel ausgeliefert, die die WebUI und die native Terminal-Oberfläche enthalten. Für den Standard-Installationspfad sind weder Node.js noch Homebrew oder Git erforderlich. Das brauchen Sie:
- Einen dedizierten Mac mini von MyRemoteMac, M4 ab 85 $/Monat (16 GB / 256 GB) oder M6 ab 149 $/Monat. Beide haben Apple Silicon und werden vom macOS-arm64-Wheel abgedeckt.
- SSH-Zugriff auf Ihren Mac mini (im MyRemoteMac-Abonnement enthalten) und ein Standard-Benutzerkonto ohne Root-Rechte, um nanobot auszuführen, die SECURITY.md des Projekts sagt, es niemals als root auszuführen.
- Python 3.11 oder neuer und curl. Der Einzeiler-Installer bricht ab, wenn er nur ein älteres python3 findet; uv oder pipx sind optional, aber empfohlen, wenn pip externally-managed-environment meldet.
- Einen LLM-Anbieter: einen API-Schlüssel (Anthropic, OpenAI, OpenRouter, Gemini, DeepSeek, Groq, Mistral und rund 40 weitere sind integriert) oder einen lokalen OpenAI-kompatiblen Server wie Ollama, der auf demselben Mac mini läuft.
- Ein Messaging-Konto bei Telegram, Discord, Slack oder WhatsApp, um Ihren Agenten zu erreichen (Telegram geht am schnellsten: ein Bot-Token von @BotFather und kein eingehender Port).
3. Schritt 1: Per SSH verbinden und nanobot installieren
Verbinden Sie sich per SSH mit Ihrem Mac mini, mit den Zugangsdaten aus Ihrem MyRemoteMac-Dashboard. Führen Sie jeden Befehl in dieser Anleitung als normaler macOS-Benutzer aus, niemals als root: Der LaunchAgent, den Sie später installieren, läuft in der Sitzung dieses Benutzers.
Per SSH verbinden und Python prüfen
# 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 installieren
Der Standardweg des Projekts ist ein Einzeiler-Installer, der nanobot-ai von PyPI installiert oder aktualisiert, über eine aktive virtuelle Umgebung, uv, pipx oder ein verwaltetes venv unter ~/.nanobot/venv, und den genau verwendeten Befehl ausgibt. Da SSH_CONNECTION gesetzt ist, überspringt er die Browser-WebUI und startet stattdessen den Terminal-Assistenten nanobot onboard --wizard. Sehen Sie sich das Ganze zuerst mit --dry-run an. Wenn Sie die Installation lieber selbst verwalten, sind uv und pipx die dokumentierten Alternativen:
# 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
Die Installation überprüfen
Falls nanobot in einer neuen Shell nicht in Ihrem PATH ist, verwenden Sie den Runner, den der Installer ausgegeben hat (uv tool run, pipx run oder das verwaltete venv), oder fügen Sie ~/.local/bin zu Ihrem PATH hinzu:
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. Schritt 2: Modellanbieter konfigurieren (API oder lokales Ollama)
nanobot liest alles aus ~/.nanobot/config.json (Anbieter, Modell-Presets, Kanäle, Tools) und legt Gedächtnis, Skills und generierte Dateien in ~/.nanobot/workspace/ ab. Der Terminal-Assistent erstellt beides. Die Konfigurationsausschnitte in der offiziellen Dokumentation verwenden camelCase-Schlüssel und sollen in die bestehende Datei eingearbeitet werden, nicht als Ganzes eingefügt. Die Datei wird einmal beim Start gelesen, starten Sie das Gateway also nach jeder Änderung neu.
Den Terminal-Assistenten ausführen
# 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
Einen Anbieter und ein Modell-Preset hinzufügen
Ein Preset verknüpft einen Anbieter mit einem Modell. Das Beispiel der Dokumentation ist Anthropic direkt mit claude-opus-4-5; der häufigste Fehler beim ersten Start ist, einen API-Schlüssel eines Anbieters mit einer Modell-ID eines anderen zu mischen, legen Sie den Anbieter also immer im Preset fest. Die offiziellen Beispiele referenzieren den Schlüssel als ${ANTHROPIC_API_KEY}, aufgelöst aus der Umgebung des Prozesses, der nanobot startet, und nie zurückgeschrieben. Das funktioniert für Vordergrund-Sitzungen, die Sie aus Ihrer Shell starten (die Übernahme der Umgebung durch den abgekoppelten --background-Prozess ist nicht dokumentiert), aber der in Schritt 4 erzeugte LaunchAgent enthält keine Umgebungsvariablen. Für einen launchd-Betrieb speichern Sie den Schlüssel daher in config.json und sichern die Datei so ab, wie es die SECURITY.md beschreibt:
# 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
Optional: Ein lokales Modell mit Ollama verwenden
nanobot hat einen eigenen ollama-Provider. Starten Sie Ollama separat auf dem Mac mini (siehe unsere Anleitung zu LLMs auf dem Mac mini) und richten Sie den Provider dann auf http://localhost:11434/v1, der Modellname ist das reine Ollama-Tag ohne Präfix, und die meisten Ollama-Setups brauchen keinen API-Schlüssel. Fallback-Ketten referenzieren Preset-Namen, sodass Sie ein gehostetes Frontier-Modell als primäres Modell und ein lokales Preset als Fallback behalten können (oder umgekehrt):
# 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"] } }
Die Einrichtung prüfen und eine erste Nachricht senden
Die Dokumentation ist eindeutig: Fügen Sie keine Chat-Apps, MCP-Server, Fallbacks oder einen Dienst hinzu, bevor das funktioniert.
# 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. Schritt 3: Messaging-Kanäle verbinden
Die Chat-Apps-Dokumentation von nanobot deckt Telegram, Discord, Slack, WhatsApp, WeChat, WeCom, Feishu/Lark, DingTalk, QQ, Matrix, E-Mail, Mattermost, Linear, Microsoft Teams, Signal und Mochat ab, dazu die mitgelieferte WebUI, die Terminal-Oberfläche und eine OpenAI-kompatible API (nanobot serve). iMessage wird nicht unterstützt. Kanalabhängigkeiten sind optionale Features: Aktivieren Sie sie mit nanobot plugins enable <channel>, bevor Sie den Kanal in der Konfiguration einschalten. Telegram ist am schnellsten einsatzbereit, standardmäßig Long Polling, also kein eingehender Port auf dem Mac mini. Die Telegram-Anleitung empfiehlt für die Ersteinrichtung den reinen Pairing-Modus: Lassen Sie allowFrom weg und genehmigen Sie Ihre erste Direktnachricht über die vertrauenswürdige lokale 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 oder WhatsApp verbinden
Discord braucht ein Bot-Token mit aktiviertem MESSAGE CONTENT INTENT im Developer Portal; behalten Sie die Standard-groupPolicy mention bei, damit der Bot nur antwortet, wenn er per @ erwähnt wird. Slack verwendet den Socket Mode (ein Bot-Token plus ein App-Level-Token mit connections:write) und braucht keine öffentliche URL, aber Direktnachrichten sind standardmäßig offen, setzen Sie dm.policy auf allowlist, um Pairing-Codes zu erhalten. WhatsApp wird per QR-Code verknüpft und ist seit v0.3.0 reines Python (keine Node.js-Bridge); seine Sitzungsdatenbank entspricht vollem Kontozugriff, halten Sie ~/.nanobot/whatsapp-auth daher auf Modus 0700 und verwenden Sie eine separate Nummer:
# 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
Zugriffskontrolle: allowFrom und Pairing
Jeder Kanal mit Direktnachrichten folgt derselben Regel. Ohne allowFrom liefert die erste Direktnachricht einen Pairing-Code, den Sie aus einem bereits genehmigten Chat oder der CLI bestätigen. Eine nicht leere Liste ist eine strikte Allowlist: Alle anderen werden ignoriert. Der Wildcard umgeht das Pairing und lässt jeden, der den Kanal erreichen kann, mit dem Bot sprechen, die Dokumentation erlaubt das nur bewusst oder vorübergehend in einer privaten Sandbox, niemals in Produktion:
# 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. Schritt 4: Absichern, 24/7 mit launchd betreiben, aktualisieren
Stoppen Sie das Vordergrund-Gateway (Ctrl+C), bevor Sie weitermachen. nanobot dokumentiert drei Wege, das Gateway unter macOS am Leben zu halten: einen LaunchAgent, den es selbst schreibt, einen abgekoppelten Hintergrundprozess, der über die CLI verwaltet wird, oder einen einfachen Vordergrundprozess zum Testen. Für einen headless Mac mini im 24/7-Betrieb verwenden Sie den LaunchAgent, er ist die einzige Option, die launchd überwacht und bei einem Fehler neu startet. Härten Sie zuerst die Konfiguration.
Absichern, bevor es persistent wird
Die offizielle Produktionsempfehlung ist beides: der Workspace-Schutz auf Anwendungsebene und die Exec-Sandbox des Betriebssystems, Seatbelt unter macOS. Seatbelt beschränkt die Shell-Befehle des Agenten auf den Workspace (Lesen/Schreiben), Medien (nur Lesen) und erforderliche Systempfade, blendet das Konfigurationsverzeichnis ~/.nanobot aus und richtet HOME und TMPDIR auf den Workspace. Es schränkt den Netzwerkzugriff nicht ein, und restrictToWorkspace allein ist keine Betriebssystem-Sandbox. Wenn der Agent überhaupt keine Shell braucht, entfernen Sie das Tool vollständig. Belassen Sie außerdem tools.maxSessionMessagesPerMinute auf dem Standardwert 6 und setzen Sie ein Ausgabenlimit bei Ihrem LLM-Anbieter:
# 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 = []
Den LaunchAgent installieren
nanobot gateway install-service schreibt ~/Library/LaunchAgents/ai.nanobot.gateway.plist, das python -m nanobot gateway --foreground mit Ihrem aktuellen Python ausführt, beim Laden startet (RunAtLoad), nach einem Absturz neu startet (KeepAlive mit SuccessfulExit false) und nach ~/.nanobot/logs/ protokolliert. Es schlägt mit address already in use fehl, wenn noch ein manuell gestartetes Gateway läuft, stoppen Sie dieses also zuerst und prüfen Sie mit --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/
Den Dienst verwalten
Der LaunchAgent lebt in der gui-Domäne Ihres Benutzers und läuft daher, sobald die Anmeldesitzung dieses Benutzers existiert, die Dokumentation beschreibt ihn so, dass er online bleibt, nachdem Sie sich angemeldet haben. Nach einem Neustart eines headless Mac mini kehrt er nur zurück, wenn Ihr Benutzer automatisch angemeldet wird; testen Sie einmal einen Neustart und prüfen Sie mit launchctl list. Starten Sie ihn nach jeder Änderung an config.json neu:
# 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)
Leichtere Alternative: nanobot gateway --background
Die README nennt dies den einzigen Befehl, der das gemeinsame Gateway in den persistenten Hintergrundmodus versetzt. Er ist praktisch zum Testen, wird aber nicht vom Betriebssystem überwacht und kommt daher nach einem Neustart nicht von selbst zurück, mischen Sie ihn nicht mit dem LaunchAgent:
nanobot gateway --background
nanobot gateway status
nanobot gateway logs
nanobot gateway restart
nanobot gateway stop
nanobot aktualisieren
Es gibt keinen Befehl nanobot update: Aktualisieren Sie mit derselben Methode, mit der Sie installiert haben. Das Projekt bittet darum, wöchentlich nach Updates zu suchen, und hat 2026 fünf Sicherheitshinweise veröffentlicht, aktualisieren Sie also zügig. Lesen Sie zuerst die Release Notes, v0.3.5 hat die Sitzungsdateien nach sessions/<workspace-id>/ verschoben und fordert dazu auf, Konfiguration, Workspaces und Sitzungsspeicher zu sichern und alte Prozesse zuerst zu stoppen. Stoppen Sie also das Gateway (deinstallieren Sie den LaunchAgent oder führen Sie im Hintergrundmodus nanobot gateway stop aus), sichern Sie, aktualisieren Sie und starten Sie es dann wieder, lassen Sie niemals zwei Versionen gleichzeitig in denselben Workspace schreiben:
# 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. Häufige Probleme beheben
Installer bricht ab, pip verweigert die Installation oder nanobot ist nicht im PATH
Der Installer stoppt, wenn python3 älter als 3.11 ist, installieren Sie ein aktuelles Python und richten Sie die Variable PYTHON darauf. Beantworten Sie einen externally-managed-environment-Fehler niemals mit --break-system-packages: Verwenden Sie uv, pipx oder eine virtuelle Umgebung. Wenn der Befehl in einer neuen Shell fehlt, verwenden Sie den Runner, den der Installer ausgegeben hat:
# 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"
Erste Nachricht schlägt fehl: falsches Modell, ConfigLoadError oder ein Anbieterfehler
Ein Schlüssel eines Anbieters mit einer Modell-ID eines anderen ist der häufigste Fehler beim ersten Start. Ein nicht gesetzter ${VAR}-Platzhalter lässt den Start sofort mit ConfigLoadError fehlschlagen, unter dem LaunchAgent wird keine Umgebung übergeben, verwenden Sie dort also einen gespeicherten Schlüssel. Prüfen Sie die Einrichtung, ohne ein Modell aufzurufen, und versuchen Sie es dann mit ausführlichem Logging erneut:
# 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-Bot bleibt stumm
Meist eine von drei Ursachen: Das telegram-Feature wurde nie in derselben Python-Umgebung aktiviert, Ihre Direktnachricht wartet noch auf die Pairing-Genehmigung, oder Sie haben config.json bearbeitet, ohne das Gateway neu zu starten (die Konfiguration wird nur beim Start gelesen). Prüfen Sie die Kanalliste, genehmigen Sie ausstehende Pairings und starten Sie neu:
# 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 startet nicht oder das Gateway ist nach einem Neustart verschwunden
address already in use bedeutet, dass ein manuell gestartetes Gateway (Vordergrund oder --background) den Port noch belegt, stoppen Sie es und installieren Sie neu. Nach einem Neustart startet der LaunchAgent der gui-Domäne erst, wenn Ihr Benutzer angemeldet ist. Die Logs liegen in ~/.nanobot/logs/; die WebUI läuft auf Port 8765, während 18790 nur der Health-Endpunkt ist:
# "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. Kostenanalyse vs. Cloud-VPS
nanobot selbst ist kostenlos (MIT). Sie zahlen für den Host und die LLM-Nutzung. Der Host-Vergleich unten übernimmt die Cloud-VPS-Spannen aus unseren OpenClaw- und Hermes-Anleitungen; die LLM-API-Nutzung wird separat von Ihrem Anbieter abgerechnet und ist auf beiden Hosts identisch, es sei denn, Sie betreiben ein lokales Ollama-Modell auf dem Mac mini, dann kostet die Inferenz 0 $. nanobot veröffentlicht keine Angaben zum RAM- oder CPU-Bedarf (es beschreibt sich nur als ultraleicht), daher ist die Plan-Dimensionierung unten qualitativ.
| Anwendungsfall | KI-Aufrufe/Monat | Cloud-VPS-Kosten | MyRemoteMac Kosten | Monatliche Ersparnis |
|---|---|---|---|---|
| Persönlicher Assistent (gehostetes API-Modell) | ~500 Aufrufe | 120 $/Monat (einfacher GPU-VPS) | 85 $/Monat (Mac mini M4) | 35 $/Monat |
| Team-Bot + geplante Automatisierungen | ~5.000 Aufrufe | 200 $/Monat | 85 $/Monat (Mac mini M4) | 115 $/Monat |
| Lokales Ollama-Modell + Agent auf einer Maschine | Unbegrenzt (lokal) | 350+ $/Monat (GPU-VPS) | 149 $/Monat (Mac mini M6) | 201+ $/Monat |
| Mehrere isolierte Instanzen, intensive Automatisierung | 10.000+ Aufrufe | 600+ $/Monat | 149 $/Monat (Mac mini M6) | 451+ $/Monat |
Annahmen: Die VPS-Preise sind dieselben Spannen, die wir in unseren Anleitungen für GPU-fähige KI-Instanzen verwenden, und keine Angebote eines bestimmten Anbieters; die MyRemoteMac-Preise sind die aktuellen Monatspreise in USD (1 Gbps inklusive, Mac mini M6 verfügbar seit dem 22. September 2026). Die Aufteilung M4/M6 ist eine Empfehlung, keine gemessene Anforderung: Ein Mac mini M4 reicht für einen persönlichen Bot bei gehosteten Anbietern völlig aus; wählen Sie den M6, wenn dieselbe Maschine auch ein lokales Ollama-Modell oder mehrere nanobot-Instanzen bedient.
Fazit: Ein dedizierter Mac mini kostet auf jeder Nutzungsstufe weniger als ein GPU-VPS, und die Preset-basierten Fallback-Ketten von nanobot lassen Sie Routinearbeit an ein kostenloses lokales Ollama-Preset leiten, während Sie für die schwierigen Fragen ein gehostetes Frontier-Modell behalten, alles auf Hardware, die Ihnen allein gehört.
9. nanobot vs. OpenClaw
Beide sind quelloffene (MIT), selbst gehostete, dauerhaft laufende persönliche KI-Agenten, die aus Ihren Chat-Apps gesteuert werden, beide betreiben ein langlebiges Gateway und beide registrieren ihren eigenen launchd-LaunchAgent (ai.nanobot.gateway vs. ai.openclaw.gateway). Die README von nanobot nennt nanobot gateway sogar den vertrauten Einstiegspunkt, wenn Sie von OpenClaw kommen. Die Unterschiede liegen im Stack und in der Ausrichtung. OpenClaw ist TypeScript auf Node.js (26.1+ oder 24.16+ über Homebrew) und wird mit npm installiert; nanobot ist Python 3.11+ von PyPI (nanobot-ai), installiert mit einem Einzeiler-Skript, uv oder pipx, ganz ohne Node.js. OpenClaw setzt auf Breite und die größere Community; nanobot auf einen kleinen, lesbaren Kern, Pairing pro Kanal plus eine integrierte macOS-Seatbelt-Exec-Sandbox (neu in v0.3.5), mehrere isolierte Instanzen auf einem Mac (multiple-instances.md) sowie ein Python-SDK plus eine OpenAI-kompatible API. OpenClaw unterstützt iMessage; nanobot nicht.
Wenn Sie den funktionsreichsten Assistenten sowie die größere Community und Kanalliste möchten, lesen Sie unsere Anleitung zu OpenClaw auf dem Mac mini. Wenn Sie einen leichtgewichtigen Python-Agenten wollen, den Sie von Anfang bis Ende lesen können, mehrere Instanzen in Sandboxes oder Ollama auf demselben Mac mini, passt nanobot besser. Eine dritte Option, Hermes Agent, behandeln wir in unserer Anleitung zu Hermes auf dem Mac mini. Der Mac mini, der launchd-Dienst und die lokale Ollama-Option sind bei allen dreien gleich.
10. FAQ
Ist nanobot kostenlos?
Ja. nanobot steht unter MIT-Lizenz und ist kostenlos; Sie zahlen nur für die LLM-Nutzung beim Anbieter Ihrer Wahl. Ein lokales Ollama-Modell auf Ihrem Mac mini läuft kostenlos. Der Mac mini selbst kostet bei MyRemoteMac ab 85 $/Monat (M4) oder 149 $/Monat (M6), abgerechnet in USD.
Welche Konfiguration des Mac mini sollte ich für nanobot wählen?
nanobot veröffentlicht keine RAM- oder CPU-Angaben, daher ist dies qualitativ. Für einen persönlichen Bot bei gehosteten Anbietern (Anthropic, OpenAI, OpenRouter usw.) ist der Mac mini M4 der Einstiegsklasse für 85 $/Monat (16 GB / 256 GB) die vernünftige Wahl: Der Agent wird als ultraleicht beschrieben. Wählen Sie den Mac mini M6 ab 149 $/Monat, wenn dieselbe Maschine auch ein lokales Ollama-Modell oder mehrere isolierte nanobot-Instanzen betreibt, denn die lokale Inferenz ist das, was Speicher und Rechenleistung braucht.
Übersteht nanobot einen Neustart des Mac mini?
Der von nanobot gateway install-service --manager launchd geschriebene LaunchAgent hat RunAtLoad true und KeepAlive, launchd startet ihn also, wenn Ihre Benutzersitzung geladen wird, und startet ihn nach einem Absturz neu. Er lebt in der gui-Domäne, das heißt, er kommt nach einem Neustart erst zurück, wenn Ihr Benutzer sich anmeldet. Wenn Ihre Einrichtung die automatische Anmeldung für diesen Benutzer erlaubt, stellt deren Aktivierung den Dienst nach einem Neustart wieder her, beachten Sie aber, dass die automatische Anmeldung die Sicherheit der Konsolenanmeldung gegen das Überstehen von Neustarts eintauscht, prüfen Sie das also zuerst gegen Ihre Betriebsrichtlinie, testen Sie dann einmal einen Neustart und prüfen Sie mit launchctl list | grep ai.nanobot.gateway. nanobot gateway --background wird nicht überwacht und übersteht keinen Neustart.
Kann nanobot ein lokales Modell statt einer API verwenden?
Ja. nanobot hat einen eigenen ollama-Provider (Standard-apiBase http://localhost:11434/v1) sowie lm_studio, vllm und OVMS für andere lokale OpenAI-kompatible Server. Starten Sie Ollama auf dem Mac mini, setzen Sie das model des Presets auf das reine Ollama-Tag (zum Beispiel llama3.2) und legen Sie provider auf ollama fest. Die meisten Ollama-Setups brauchen keinen API-Schlüssel. Wenn Durchläufe mit Tool-Nutzung langsam sind, empfiehlt die Dokumentation, das Chat-Template des Modells und die Wiederverwendung des Prompt-Cache zu prüfen, bevor Sie Speicher- oder Kontexteinstellungen anfassen.
Welche Messaging-Plattformen unterstützt nanobot?
Die offizielle Chat-Apps-Dokumentation listet Telegram, Discord, Slack, WhatsApp, WeChat/Weixin, WeCom, Feishu/Lark, DingTalk, QQ (und Napcat/OneBot), Matrix/Element, E-Mail, Mattermost, Linear, Microsoft Teams, Signal und Mochat, alle über ein einziges Gateway, dazu die mitgelieferte WebUI, die native Terminal-Oberfläche und eine OpenAI-kompatible HTTP-API über nanobot serve. iMessage wird nicht unterstützt.
Ist es sicher, einem KI-Agenten Shell-Zugriff auf meinen Mac mini zu geben?
Nur mit den dokumentierten Schutzmaßnahmen: Führen Sie nanobot als Standardbenutzer aus (niemals als root), setzen Sie tools.restrictToWorkspace auf true und tools.exec.sandbox auf seatbelt (die Produktionsempfehlung des Projekts unter macOS), oder setzen Sie tools.exec.enable auf false, wenn der Agent überhaupt keine Shell braucht. Behalten Sie auf jedem Kanal den reinen Pairing-Modus oder ein enges allowFrom bei, niemals den Wildcard, lassen Sie WebUI und API an localhost gebunden, belassen Sie das Standard-Ratenlimit von 6 Nachrichten pro Minute, setzen Sie ein Ausgabenlimit bei Ihrem Anbieter und aktualisieren Sie wöchentlich, 2026 wurden fünf Sicherheitshinweise veröffentlicht, verwenden Sie also 0.3.5 oder neuer.
11. Quellen und weiterführende Literatur
Jeder Befehl, Pfad und Konfigurationsschlüssel in dieser Anleitung stammt aus dem offiziellen nanobot-Repository (README und docs/-Verzeichnis, gelesen am 28. September 2026, v0.3.5) und dessen SECURITY.md. Die Dokumentation im Repository kann neuer sein als das jüngste Paket-Release; prüfen Sie also gegen das Repository, wenn sich ein Befehl anders verhält.
- nanobot GitHub-Repository (HKUDS/nanobot): Installation und Quick Start
- Quick Start (config.json, Workspace, Upgrade mit derselben Methode)
- Deployment: macOS LaunchAgent (install-service, launchctl kickstart)
- Konfigurationsreferenz (Secrets, ${VAR}-Platzhalter, MCP, Web-Tools)
- Konfiguration: Sicherheit (restrictToWorkspace, Seatbelt-Sandbox, exec.enable)
- Anbieter (Presets, Fallback-Ketten, Anbieter/Modell-Konflikt)
- Anbieter: Ollama (apiBase /v1, reines Modell-Tag)
- Chat-Apps (Telegram, Discord, Slack, WhatsApp, allowFrom, Pairing)
- Anleitung: Telegram-KI-Agent (reiner Pairing-Modus, headless Einrichtung)
- Anleitung: sicherer lokaler KI-Agent (localhost-Bindung, ein Workspace pro Vertrauensgrenze)
- CLI-Referenz (onboard --wizard / --refresh, gateway, plugins, channels)
- WebUI (127.0.0.1:8765, tokenIssueSecret, LAN-Zugriff)
- Automatisierungen (cron-Tool, lokale Trigger, Heartbeat)
- Mehrere Instanzen auf einer Maschine
- Fehlerbehebung (Python 3.11+, externally-managed-environment, Ports)
- SECURITY.md (niemals als root ausführen, chmod 600/700, bekannte Einschränkungen)
- Sicherheitshinweise (fünf im Jahr 2026 veröffentlicht)
- Release v0.3.5 (15. September 2026: Sitzungslayout, Seatbelt, Gateway-Lebensdauer)
- PyPI: nanobot-ai (erfordert Python 3.11+, Wheels für macOS 13+)
Verwandte Anleitungen
OpenClaw auf Mac mini installieren
Der funktionsreiche selbst gehostete KI-Agent-Harness auf Node.js/npm, dasselbe Rezept für den Mac mini mit eigenem gateway-install-LaunchAgent.
Hermes Agent auf Mac mini installieren
Der sich selbst verbessernde Python-Agent von Nous Research: Einzeiler-Installer, Telegram und Discord, launchd und lokales Ollama auf einem dedizierten Mac mini.
LLMs auf Mac mini M4 ausführen
Führen Sie Ollama, llama.cpp und lokale Sprachmodelle nativ auf Apple Silicon für kostenlose KI-Inferenz aus.
Mac mini M6 mieten
Apples neuester Mac mini, dediziert 1:1 ab 149 $/Monat, die richtige Wahl, wenn nanobot die Maschine mit einem lokalen Ollama-Modell teilt.