Panduan - AI & Otomatisasi

Cara Menjalankan nanobot 24/7 di Mac mini Khusus (Agen AI Self-Hosted)

nanobot adalah framework agen AI pribadi open-source, self-hosted, dan sangat ringan yang ditulis dalam Python (lisensi MIT, sekitar 48.6k bintang GitHub pada September 2026) dari Data Intelligence Lab di University of Hong Kong. Agen ini berjalan di WebUI bawaan, UI terminal, atau aplikasi chat Anda (Telegram, Discord, Slack, WhatsApp, dan selusin lainnya), menjadwalkan otomatisasinya sendiri, dan berkomunikasi dengan 40+ penyedia model, termasuk server Ollama lokal. Mac mini Apple Silicon khusus adalah host always-on yang alami: tidak ada laptop yang masuk mode sleep, hardware fisik 1:1, sandbox macOS bawaan, dan harga tetap mulai $85/bulan.

Baca 20 menit Diperbarui 28 September 2026

1. Mengapa Menjalankan nanobot di Mac mini?

nanobot dibangun di sekitar proses gateway yang berjalan lama: dokumentasi resmi meminta Anda menjaga nanobot gateway tetap berjalan karena proses inilah yang menangani pengiriman latar belakang untuk aplikasi chat, topik WebUI, otomatisasi terjadwal, trigger lokal, dan heartbeat. Itu hanya berfungsi di mesin yang tidak pernah sleep. Mac mini khusus dari MyRemoteMac memberi Anda persis itu, Mac Apple Silicon fisik, milik Anda sendiri, online 24/7 dengan SLA 99.9%, akses root penuh, SSH dan VNC, serta VPN WireGuard, dengan harga bulanan tetap alih-alih tagihan VPS tingkat GPU. Dan karena ini macOS, nanobot dapat menggunakan sandbox exec Seatbelt bawaannya (sandbox-exec, disertakan dalam macOS) dan menjalankan model Ollama lokal di mesin yang sama.

Fitur VPS Cloud (tingkat AI) Mac mini (MyRemoteMac)
Biaya Bulanan Harga tingkat GPU (bervariasi) M4 mulai $85/bln · M6 mulai $149/bln (tetap, USD)
Sandbox Exec bubblewrap (bwrap, perlu diinstal) Seatbelt (sandbox-exec), bawaan macOS
LLM Lokal (Ollama) Biaya tambahan / terbatas Native di unified memory Apple Silicon
Uptime Selalu Aktif Ya Ya (SLA 99.9%)
Hardware Bersama, tervirtualisasi Mac fisik khusus 1:1
Akses SSH SSH + VNC + VPN WireGuard, akses root penuh

Keunggulan Utama: Rekomendasi produksi nanobot adalah menggabungkan pelindung workspace tingkat aplikasi dengan sandbox exec OS, bubblewrap di Linux, Seatbelt di macOS. Di Mac mini, sandbox itu sudah tersedia: satu key konfigurasi saja sudah membatasi perintah shell agen ke filesystem workspace (tanpa pembatasan jaringan). Padukan dengan model Ollama lokal, dan tugas rutin tidak pernah meninggalkan mesin.

2. Prasyarat

nanobot didistribusikan sebagai paket PyPI nanobot-ai dengan wheel platform untuk macOS 13+ di Apple Silicon dan Intel yang menyertakan WebUI dan UI terminal native. Tidak ada persyaratan Node.js, Homebrew, atau Git untuk jalur instalasi standar. Berikut yang Anda butuhkan:

  • Sebuah Mac mini khusus dari MyRemoteMac, M4 mulai $85/bln (16 GB / 256 GB) atau M6 mulai $149/bln. Keduanya Apple Silicon dan tercakup oleh wheel macOS arm64.
  • Akses SSH ke Mac mini Anda (disediakan bersama langganan MyRemoteMac Anda) dan akun pengguna standar, non-root untuk menjalankan nanobot, SECURITY.md proyek ini menyatakan jangan pernah menjalankannya sebagai root.
  • Python 3.11 atau lebih baru dan curl. Installer satu perintah akan berhenti jika hanya menemukan python3 versi lama; uv atau pipx bersifat opsional tetapi direkomendasikan saat pip melaporkan externally-managed-environment.
  • Sebuah penyedia LLM: kunci API (Anthropic, OpenAI, OpenRouter, Gemini, DeepSeek, Groq, Mistral, dan sekitar 40 lainnya sudah bawaan) atau server lokal yang kompatibel dengan OpenAI seperti Ollama yang berjalan di Mac mini yang sama.
  • Akun perpesanan di Telegram, Discord, Slack, atau WhatsApp untuk menghubungi agen Anda (Telegram yang paling cepat: token bot dari @BotFather dan tanpa port masuk).

3. Langkah 1: Hubungkan melalui SSH dan Instal nanobot

SSH ke Mac mini Anda dengan kredensial dari dashboard MyRemoteMac Anda. Jalankan setiap perintah dalam panduan ini sebagai pengguna macOS biasa, jangan pernah sebagai root: LaunchAgent yang Anda instal nanti berjalan di dalam sesi pengguna tersebut.

Hubungkan melalui SSH dan Periksa 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

Instal nanobot

Jalur default proyek ini adalah installer satu perintah yang menginstal atau meningkatkan nanobot-ai dari PyPI menggunakan virtual environment yang aktif, uv, pipx, atau venv terkelola di ~/.nanobot/venv, dan mencetak perintah persis yang digunakannya. Karena SSH_CONNECTION diset, installer melewati WebUI browser dan menjalankan wizard terminal nanobot onboard --wizard sebagai gantinya. Pratinjau dulu dengan --dry-run. Jika Anda lebih suka mengelola instalasi sendiri, uv dan pipx adalah alternatif yang terdokumentasi:

# 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

Verifikasi Instalasi

Jika nanobot tidak ada di PATH Anda pada shell baru, gunakan runner yang dicetak installer (uv tool run, pipx run, atau venv terkelola) atau tambahkan ~/.local/bin ke PATH Anda:

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. Langkah 2: Konfigurasikan Penyedia Model (API atau Ollama Lokal)

nanobot membaca semuanya dari ~/.nanobot/config.json (penyedia, preset model, saluran, tool) dan menyimpan memori, skill, serta file yang dihasilkan di ~/.nanobot/workspace/. Wizard terminal membuat keduanya. Cuplikan konfigurasi dalam dokumentasi resmi menggunakan key camelCase dan dimaksudkan untuk digabungkan ke dalam file, bukan ditempel secara utuh. File dibaca sekali saat startup, jadi mulai ulang gateway setelah setiap pengeditan.

Jalankan Wizard Terminal

# 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

Tambahkan Penyedia dan Preset Model

Preset mengikat penyedia ke sebuah model. Contoh dalam dokumentasi adalah Anthropic langsung dengan claude-opus-4-5; kegagalan pertama yang paling umum adalah mencampur kunci API dari satu penyedia dengan ID model dari penyedia lain, jadi selalu tetapkan penyedia di dalam preset. Contoh resmi merujuk kunci sebagai ${ANTHROPIC_API_KEY}, yang diambil dari lingkungan proses yang memulai nanobot dan tidak pernah ditulis kembali. Itu berfungsi untuk sesi foreground yang dimulai dari shell Anda (pewarisan lingkungan oleh proses --background yang terlepas tidak didokumentasikan), tetapi LaunchAgent yang dihasilkan di Langkah 4 tidak membawa variabel lingkungan, jadi untuk deployment launchd simpan kunci di config.json dan batasi izin filenya seperti yang dijelaskan 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

Opsional: Gunakan Model Lokal dengan Ollama

nanobot memiliki penyedia ollama khusus. Mulai Ollama di Mac mini secara terpisah (lihat panduan LLM di Mac mini kami), lalu arahkan penyedia ke http://localhost:11434/v1, nama modelnya adalah tag Ollama mentah, tanpa prefiks, dan sebagian besar pengaturan Ollama tidak memerlukan kunci API. Rantai fallback merujuk nama preset, sehingga Anda dapat mempertahankan model frontier hosted sebagai yang utama dan preset lokal sebagai fallback (atau sebaliknya):

# 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"] } }

Periksa Pengaturan dan Kirim Pesan Pertama

Dokumentasinya tegas: jangan tambahkan aplikasi chat, server MCP, fallback, atau layanan sampai ini berfungsi.

# 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. Langkah 3: Hubungkan Saluran Perpesanan

Dokumentasi aplikasi chat nanobot mencakup Telegram, Discord, Slack, WhatsApp, WeChat, WeCom, Feishu/Lark, DingTalk, QQ, Matrix, Email, Mattermost, Linear, Microsoft Teams, Signal, dan Mochat, ditambah WebUI bawaan, UI terminal, dan API yang kompatibel dengan OpenAI (nanobot serve). iMessage tidak didukung. Dependensi saluran adalah fitur opsional: aktifkan dengan nanobot plugins enable <channel> sebelum menyalakan saluran di konfigurasi. Telegram yang paling cepat dijalankan, long polling secara default, jadi tidak perlu port masuk di Mac mini. Panduan Telegram merekomendasikan mode pairing-only untuk pengaturan pertama: hilangkan allowFrom dan setujui DM pertama Anda dari CLI lokal yang tepercaya:

# 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

Hubungkan Discord, Slack, atau WhatsApp

Discord memerlukan token bot dengan MESSAGE CONTENT INTENT diaktifkan di Developer Portal; pertahankan groupPolicy default mention agar bot hanya membalas saat di-@mention. Slack menggunakan Socket Mode (token bot ditambah token tingkat aplikasi dengan connections:write) dan tidak memerlukan URL publik, tetapi DM terbuka secara default, set dm.policy ke allowlist untuk mendapatkan kode pairing. WhatsApp terhubung melalui kode QR dan sudah murni Python sejak v0.3.0 (tanpa bridge Node.js); database sesinya setara dengan akses akun penuh, jadi pertahankan ~/.nanobot/whatsapp-auth pada mode 0700 dan gunakan nomor terpisah:

# 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

Kontrol Akses: allowFrom dan Pairing

Setiap saluran yang mendukung DM mengikuti aturan yang sama. Dengan allowFrom dihilangkan, DM pertama mengembalikan kode pairing yang Anda setujui dari chat yang sudah disetujui atau dari CLI. Daftar yang tidak kosong adalah allowlist ketat: semua orang lain diabaikan. Wildcard melewati pairing dan membiarkan siapa pun yang dapat menjangkau saluran tersebut berbicara dengan bot, dokumentasi hanya mengizinkannya secara sengaja atau sementara di sandbox privat, jangan pernah di produksi:

# 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. Langkah 4: Perkuat, Jalankan 24/7 dengan launchd, Perbarui

Hentikan gateway foreground (Ctrl+C) sebelum melanjutkan. nanobot mendokumentasikan tiga cara menjaga gateway tetap hidup di macOS: LaunchAgent yang ditulisnya sendiri, proses latar belakang terlepas yang dikelola dari CLI, atau proses foreground biasa untuk pengujian. Untuk Mac mini headless 24/7, gunakan LaunchAgent, itu satu-satunya opsi yang diawasi launchd dan dimulai ulang saat gagal. Perkuat konfigurasinya terlebih dahulu.

Perkuat Sebelum Menjadi Persisten

Rekomendasi produksi resmi adalah keduanya: pelindung workspace tingkat aplikasi dan sandbox exec OS, Seatbelt di macOS. Seatbelt membatasi perintah shell agen ke workspace (baca-tulis), media (hanya-baca), dan jalur sistem yang diperlukan, menyembunyikan direktori konfigurasi ~/.nanobot, serta mengarahkan HOME dan TMPDIR ke workspace. Seatbelt tidak membatasi akses jaringan, dan restrictToWorkspace saja bukanlah sandbox OS. Jika agen sama sekali tidak memerlukan shell, hapus tool tersebut sepenuhnya. Pertahankan juga tools.maxSessionMessagesPerMinute pada default 6 dan tetapkan batas pengeluaran di penyedia LLM Anda:

# 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 = []

Instal LaunchAgent

nanobot gateway install-service menulis ~/Library/LaunchAgents/ai.nanobot.gateway.plist, yang menjalankan python -m nanobot gateway --foreground dengan Python Anda saat ini, dimulai saat dimuat (RunAtLoad), dimulai ulang saat crash (KeepAlive dengan SuccessfulExit false), dan mencatat log ke ~/.nanobot/logs/. Perintah ini gagal dengan address already in use jika gateway manual masih berjalan, jadi hentikan dulu dan pratinjau dengan --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/

Kelola Layanan

LaunchAgent berada di domain gui pengguna Anda, sehingga berjalan begitu sesi login pengguna tersebut ada, dokumentasi menggambarkannya sebagai tetap online setelah Anda login. Setelah reboot Mac mini headless, layanan hanya kembali jika pengguna Anda login secara otomatis; uji reboot sekali dan periksa dengan launchctl list. Mulai ulang setelah setiap pengeditan 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)

Alternatif Lebih Ringan: nanobot gateway --background

README menyebutnya sebagai satu-satunya perintah yang mempromosikan gateway bersama ke mode latar belakang persisten. Praktis untuk pengujian tetapi tidak diawasi OS, jadi tidak akan kembali sendiri setelah reboot, jangan mencampurnya dengan LaunchAgent:

nanobot gateway --background
nanobot gateway status
nanobot gateway logs
nanobot gateway restart
nanobot gateway stop

Perbarui nanobot

Tidak ada perintah nanobot update: tingkatkan dengan metode yang sama seperti saat Anda menginstal. Proyek ini meminta Anda memeriksa pembaruan setiap minggu dan telah menerbitkan lima advisori keamanan pada 2026, jadi segera tingkatkan. Baca catatan rilis terlebih dahulu, v0.3.5 memindahkan file sesi ke sessions/<workspace-id>/ dan meminta Anda mencadangkan konfigurasi, workspace, dan penyimpanan sesi serta menghentikan proses lama terlebih dahulu. Jadi hentikan gateway (uninstall LaunchAgent, atau nanobot gateway stop dalam mode latar belakang), cadangkan, tingkatkan, lalu mulai lagi, jangan pernah membiarkan dua versi menulis ke workspace yang sama secara bersamaan:

# 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. Pemecahan Masalah Umum

Installer berhenti, pip menolak menginstal, atau nanobot tidak ada di PATH

Installer berhenti jika python3 lebih lama dari 3.11, instal Python terkini dan arahkan variabel PYTHON ke sana. Jangan pernah menjawab error externally-managed-environment dengan --break-system-packages: gunakan uv, pipx, atau virtual environment. Jika perintahnya hilang di shell baru, gunakan runner yang dicetak installer:

# 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"

Pesan pertama gagal: model salah, ConfigLoadError, atau error penyedia

Kunci dari satu penyedia dengan ID model dari penyedia lain adalah kegagalan pertama yang paling umum. Placeholder ${VAR} yang tidak diset membuat startup gagal cepat dengan ConfigLoadError, di bawah LaunchAgent tidak ada lingkungan yang diteruskan, jadi gunakan kunci tersimpan di sana. Periksa pengaturan tanpa memanggil model, lalu coba lagi dengan logging verbose:

# 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

Bot Telegram tetap diam

Biasanya salah satu dari tiga hal: fitur telegram tidak pernah diaktifkan di lingkungan Python yang sama, DM Anda masih menunggu persetujuan pairing, atau Anda mengedit config.json tanpa memulai ulang gateway (konfigurasi hanya dibaca saat startup). Periksa daftar saluran, setujui pairing yang tertunda, dan mulai ulang:

# 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 tidak mau memulai atau gateway hilang setelah reboot

address already in use berarti gateway yang dimulai secara manual (foreground atau --background) masih memegang port, hentikan dan instal ulang. Setelah reboot, LaunchAgent domain gui hanya dimulai setelah pengguna Anda login. Log ada di ~/.nanobot/logs/; WebUI ada di port 8765 sedangkan 18790 hanyalah endpoint health:

# "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. Analisis Biaya vs. VPS Cloud

nanobot sendiri gratis (MIT). Yang Anda bayar adalah host dan penggunaan LLM. Perbandingan host di bawah ini menggunakan kembali rentang VPS cloud dari panduan OpenClaw dan Hermes kami; penggunaan API LLM ditagih secara terpisah oleh penyedia Anda dan identik di host mana pun, kecuali Anda menjalankan model Ollama lokal di Mac mini, yang dalam hal ini biaya inferensinya $0. nanobot tidak mempublikasikan angka jejak RAM atau CPU (proyek ini hanya menggambarkannya sebagai sangat ringan), jadi penentuan ukuran paket di bawah ini bersifat kualitatif.

Kasus Penggunaan Panggilan AI/Bulan Biaya VPS Cloud Biaya MyRemoteMac Penghematan Bulanan
Asisten pribadi (model API hosted) ~500 panggilan $120/bln (VPS GPU dasar) $85/bln (Mac mini M4) $35/bln
Bot tim + otomatisasi terjadwal ~5,000 panggilan $200/bln $85/bln (Mac mini M4) $115/bln
Model Ollama lokal + agen di satu mesin Tanpa batas (lokal) $350+/bln (VPS GPU) $149/bln (Mac mini M6) $201+/bln
Beberapa instans terisolasi, otomatisasi berat 10,000+ panggilan $600+/bln $149/bln (Mac mini M6) $451+/bln

Asumsi: harga VPS adalah rentang yang sama yang digunakan di seluruh panduan kami untuk instans tingkat AI berkemampuan GPU dan bukan penawaran dari penyedia tertentu; harga MyRemoteMac adalah tarif bulanan saat ini dalam USD (1 Gbps sudah termasuk, Mac mini M6 tersedia sejak 22 September 2026). Pembagian M4/M6 adalah rekomendasi, bukan persyaratan terukur: Mac mini M4 sudah lebih dari cukup untuk bot pribadi dengan penyedia hosted; pilih M6 saat mesin yang sama juga melayani model Ollama lokal atau beberapa instans nanobot.

Kesimpulan: Mac mini khusus lebih murah daripada VPS GPU di setiap tingkat penggunaan, dan rantai fallback berbasis preset nanobot memungkinkan Anda mengarahkan pekerjaan rutin ke preset Ollama lokal gratis sambil mempertahankan model frontier hosted untuk pertanyaan yang sulit, semuanya di hardware yang sepenuhnya milik Anda.

9. nanobot vs. OpenClaw

Keduanya adalah agen AI pribadi open-source (MIT), self-hosted, dan always-on yang dikendalikan dari aplikasi chat Anda, keduanya menjalankan gateway yang berjalan lama, dan keduanya mendaftarkan LaunchAgent launchd miliknya sendiri (ai.nanobot.gateway vs ai.openclaw.gateway). README nanobot bahkan menyebut nanobot gateway sebagai titik masuk yang sudah akrab jika Anda datang dari OpenClaw. Perbedaannya ada pada stack dan penawarannya. OpenClaw adalah TypeScript di atas Node.js (26.1+ atau 24.16+ via Homebrew) yang diinstal dengan npm; nanobot adalah Python 3.11+ dari PyPI (nanobot-ai), diinstal dengan skrip satu baris, uv, atau pipx, tanpa Node.js sama sekali. Penawaran OpenClaw adalah keluasan fitur dan komunitas yang lebih besar; penawaran nanobot adalah inti yang kecil dan mudah dibaca, pairing per saluran ditambah sandbox exec Seatbelt macOS bawaan (baru di v0.3.5), beberapa instans terisolasi di satu Mac (multiple-instances.md), serta Python SDK plus API yang kompatibel dengan OpenAI. OpenClaw mendukung iMessage; nanobot tidak.

Jika Anda menginginkan asisten dengan fitur terlengkap serta komunitas dan daftar saluran yang lebih besar, baca panduan OpenClaw di Mac mini kami. Jika Anda menginginkan agen Python ringan yang dapat Anda baca dari awal sampai akhir, beberapa instans ter-sandbox, atau Ollama di Mac mini yang sama, nanobot lebih cocok. Opsi ketiga, Hermes Agent, dibahas dalam panduan Hermes di Mac mini kami. Mac mini, layanan launchd, dan opsi Ollama lokal sama untuk ketiganya.

10. FAQ

Apakah nanobot gratis digunakan?

Ya. nanobot berlisensi MIT dan gratis; Anda hanya membayar penggunaan LLM dari penyedia yang Anda pilih. Model Ollama lokal di Mac mini Anda gratis untuk dijalankan. Mac mini itu sendiri mulai $85/bulan (M4) atau $149/bulan (M6) di MyRemoteMac, ditagih dalam USD.

Konfigurasi Mac mini mana yang sebaiknya saya pilih untuk nanobot?

nanobot tidak mempublikasikan angka RAM atau CPU, jadi ini bersifat kualitatif. Untuk bot pribadi dengan penyedia hosted (Anthropic, OpenAI, OpenRouter, dll.), Mac mini M4 entry-level seharga $85/bulan (16 GB / 256 GB) adalah pilihan yang masuk akal: agennya digambarkan sebagai sangat ringan. Pilih Mac mini M6 mulai $149/bulan saat mesin yang sama juga menjalankan model Ollama lokal atau beberapa instans nanobot terisolasi, karena inferensi lokal-lah yang membutuhkan memori dan komputasi.

Apakah nanobot tetap berjalan setelah Mac mini di-reboot?

LaunchAgent yang ditulis oleh nanobot gateway install-service --manager launchd memiliki RunAtLoad true dan KeepAlive, sehingga launchd memulainya saat sesi pengguna Anda dimuat dan memulai ulang setelah crash. LaunchAgent ini berada di domain gui, yang berarti kembali setelah reboot hanya setelah pengguna Anda login. Jika pengaturan Anda memungkinkan login otomatis untuk pengguna tersebut, mengaktifkannya akan memulihkan layanan setelah reboot, tetapi ketahuilah bahwa auto-login menukar keamanan login konsol dengan ketahanan terhadap reboot, jadi pastikan dulu sesuai kebijakan ops Anda, lalu uji reboot sekali dan verifikasi dengan launchctl list | grep ai.nanobot.gateway. nanobot gateway --background tidak diawasi dan tidak bertahan setelah reboot.

Bisakah nanobot menggunakan model lokal alih-alih API?

Ya. nanobot memiliki penyedia ollama khusus (apiBase default http://localhost:11434/v1) ditambah lm_studio, vllm, dan OVMS untuk server lokal lain yang kompatibel dengan OpenAI. Mulai Ollama di Mac mini, set model preset ke tag Ollama mentah (misalnya llama3.2), dan tetapkan provider ke ollama. Sebagian besar pengaturan Ollama tidak memerlukan kunci API. Jika giliran yang menggunakan tool terasa lambat, dokumentasi meminta Anda memeriksa chat template model dan penggunaan ulang prompt-cache sebelum menyentuh pengaturan memori atau konteks.

Platform perpesanan apa saja yang didukung nanobot?

Dokumentasi aplikasi chat resmi mencantumkan Telegram, Discord, Slack, WhatsApp, WeChat/Weixin, WeCom, Feishu/Lark, DingTalk, QQ (dan Napcat/OneBot), Matrix/Element, Email, Mattermost, Linear, Microsoft Teams, Signal, dan Mochat, yang dilayani oleh satu gateway, ditambah WebUI bawaan, UI terminal native, dan API HTTP yang kompatibel dengan OpenAI melalui nanobot serve. iMessage tidak didukung.

Apakah aman memberi agen AI akses shell di Mac mini saya?

Hanya dengan pengaman yang terdokumentasi: jalankan nanobot sebagai pengguna standar (jangan pernah root), set tools.restrictToWorkspace ke true dan tools.exec.sandbox ke seatbelt (rekomendasi produksi proyek ini di macOS), atau set tools.exec.enable ke false jika agen sama sekali tidak memerlukan shell. Pertahankan mode pairing-only atau allowFrom yang sempit di setiap saluran, jangan pernah wildcard, jaga WebUI dan API tetap terikat ke localhost, pertahankan rate limit default 6 pesan per menit, tetapkan batas pengeluaran di penyedia Anda, dan perbarui setiap minggu, lima advisori diterbitkan pada 2026, jadi jalankan 0.3.5 atau lebih baru.

11. Sumber dan Bacaan Lebih Lanjut

Setiap perintah, jalur, dan key konfigurasi dalam panduan ini berasal dari repositori nanobot resmi (README dan pohon docs/, dibaca pada 28 September 2026, v0.3.5) serta SECURITY.md-nya. Dokumentasi repositori bisa lebih baru daripada rilis paket terbaru, jadi periksa ulang terhadap repositori jika sebuah perintah berperilaku berbeda.

Panduan Terkait

Siap Menjalankan nanobot 24/7?

Deploy Mac mini khusus sebagai host agen AI self-hosted Anda. Mac mini M4 mulai $85/bulan, Mac mini M6 mulai $149/bulan, 1 Gbps sudah termasuk.

Butuh detail lebih lanjut?

Jelajahi dokumentasi lengkap untuk panduan langkah demi langkah, referensi konfigurasi, dan pemecahan masalah.

Buka dokumentasi →