nanobot
ultra-lightweight personal AI agent · v0.1.5 · Python ≥3.11 · MIT
nanobot は HKUDS が開発する超軽量パーソナル AI エージェント。OpenClaw にインスパイアされ、フルスタック代替比で 99% 少ないコード行数 でコアエージェント機能を実現している。
nanobot onboard 一発でセットアップ完了。ウィザード付き対話型初期化も可能。--config フラグで複数インスタンスを独立して運用。チャンネル別・テナント別の分離も容易。CLI / Gateway がエントリポイントとなり、Message Bus を介してチャンネルと Agent Loop が疎結合で接続されている。
モジュール構成
インストール — pip / uv / source から選択:
# PyPI(安定版)
pip install nanobot-ai
# uv(推奨 — 高速)
uv tool install nanobot-ai
# ソースから(最新機能)
git clone https://github.com/HKUDS/nanobot.git
cd nanobot && pip install -e .初期化 — config と workspace を生成:
nanobot onboard
# または対話型ウィザード
nanobot onboard --wizard設定 — ~/.nanobot/config.json を編集:
{
"providers": {
"openrouter": {
"apiKey": "sk-or-v1-xxx"
}
},
"agents": {
"defaults": {
"model": "anthropic/claude-opus-4-5",
"provider": "openrouter"
}
}
}チャット — CLI で即座に対話:
# 対話モード
nanobot agent
# 1 回だけ
nanobot agent -m "README を要約して"
# ゲートウェイ(チャンネル接続)
nanobot gatewayopenrouter(全モデルアクセス)が推奨。環境変数 ${VAR_NAME} 参照もサポートしており、シークレットを config.json に直書きしなくて済む。
| コマンド | 説明 |
|---|---|
nanobot onboard | ~/.nanobot/ に config と workspace を初期化 |
nanobot onboard --wizard | 対話型セットアップウィザード起動 |
nanobot agent -m "..." | エージェントに 1 メッセージ送信 |
nanobot agent | 対話モード(/exit で終了) |
nanobot gateway | ゲートウェイ起動(チャンネル接続) |
nanobot serve | OpenAI 互換 API サーバー起動(ポート 8900) |
nanobot status | 設定・プロバイダー状態を表示 |
nanobot provider login <name> | OAuth プロバイダー認証(Copilot / Codex) |
nanobot channels login <ch> | チャンネル認証(WhatsApp QR scan 等) |
すべてのチャンネルは channels.*.allowFrom でアクセス制御できる。空配列はデフォルトで全拒否(["*"] で全許可)。
| チャンネル | 接続方式 | 必要なもの | 備考 |
|---|---|---|---|
| Telegram 推奨 | Polling / WebSocket | @BotFather トークン | ストリーミング対応、グループポリシー設定可 |
| Discord | WebSocket | Bot トークン + Message Content Intent | groupPolicy: "mention" でメンション時のみ応答 |
| Node.js bridge | Node.js ≥18 + QR スキャン | アップグレード時は bridge の再ビルドが必要 | |
| WeChat (Weixin) | HTTP long-poll | pip install nanobot-ai[weixin] |
デスクトップクライアント不要 |
| Feishu | WebSocket long connection | App ID + App Secret + CardKit 権限 | 公開 IP 不要、CardKit streaming 対応 |
| DingTalk | Stream Mode | AppKey + AppSecret | 公開 IP 不要 |
| Slack | Socket Mode | Bot Token + App-Level Token | groupPolicy: "mention" / "open" / "allowlist" |
| Matrix | Matrix SDK | pip install nanobot-ai[matrix] + homeserver URL |
E2EE 対応(推奨: password login) |
| IMAP / SMTP polling | IMAP + SMTP 認証情報 | 添付ファイル受信・自動返信 on/off 可 | |
| botpy SDK / WebSocket | AppID + AppSecret | プライベートメッセージのみ、サンドボックスでテスト | |
| Wecom (企業微信) | WebSocket long connection | pip install nanobot-ai[wecom] |
AI ボット API モード |
| Mochat | Socket.IO WebSocket | Claw トークン(自動セットアップ可) | nanobot に「Mochat に参加して」と送るだけで自動構成 |
docs/CHANNEL_PLUGIN_GUIDE.md を参照。プラグイン形式で任意の通信チャンネルを接続できる。
プロバイダーは nanobot/providers/registry.py に ProviderSpec を 1 エントリ追加するだけで拡張できる。config.json に providers.<name> フィールドも追加する必要がある(2 ステップのみ)。
| プロバイダー | 種別 | 取得先 |
|---|---|---|
openrouter 推奨 | ゲートウェイ(全モデルアクセス) | openrouter.ai |
anthropic | Claude ダイレクト | console.anthropic.com |
openai | GPT + Whisper 音声転写 | platform.openai.com |
azure_openai | Azure OpenAI | portal.azure.com |
deepseek | DeepSeek ダイレクト | platform.deepseek.com |
groq | LLM + Whisper 転写(デフォルト) | console.groq.com |
gemini | Gemini ダイレクト | aistudio.google.com |
volcengine / byteplus | VolcEngine(国内 / 海外) | volcengine.com / byteplus.com |
minimax | MiniMax ダイレクト | platform.minimaxi.com |
dashscope | Qwen(Alibaba) | dashscope.console.aliyun.com |
moonshot | Moonshot / Kimi | platform.moonshot.cn |
zhipu | Zhipu GLM | open.bigmodel.cn |
stepfun | Step Fun / 阶跃星辰 | platform.stepfun.com |
mimo | Xiaomi MiMo | platform.xiaomimimo.com |
ollama | ローカル LLM(API key 不要) | ollama.ai |
vllm | ローカル OpenAI 互換サーバー | — (any vLLM endpoint) |
ovms | Intel GPU / OpenVINO Model Server | docs.openvino.ai |
openai_codex | Codex(OAuth、ChatGPT Plus 必須) | nanobot provider login openai-codex |
github_copilot | GitHub Copilot(OAuth) | nanobot provider login github-copilot |
custom | 任意の OpenAI 互換エンドポイント | — |
siliconflow, mistral, aihubmix, qianfan | 各種サードパーティ | 各公式サイト参照 |
3 層メモリ: SOUL.md(エージェント人格), USER.md(ユーザー情報), memory/MEMORY.md(長期記憶)。memory/history.jsonl に追記式で要約履歴を保存。
Dream は定期実行(またはチャット内 /dream コマンド)でメモリを統合。/dream-restore <sha> で過去状態への復元も可能。
Stdio(npx / uvx 等)と HTTP(SSE)の両方に対応。Claude Desktop / Cursor の config 形式と互換。
{
"tools": {
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y",
"@modelcontextprotocol/server-filesystem",
"/path"]
}
}
}
}enabledTools で登録ツールを絞り込み可能。
CLI なしでライブラリとして利用できる。セッションキーで会話を独立管理。
from nanobot import Nanobot
bot = Nanobot.from_config()
result = await bot.run(
"README を要約して",
session_key="user-alice"
)
print(result.content)AgentHook でツール呼び出し前後のライフサイクルフックも追加できる。
nanobot serve で 127.0.0.1:8900 にエンドポイントを公開。既存の OpenAI クライアントからそのまま利用できる。
GET /healthGET /v1/modelsPOST /v1/chat/completions
"session_id" で会話を分離(省略時は共有デフォルトセッション)。
公式 Docker イメージは非 root ユーザー(UID 1000)で動作。bubblewrap(bwrap)によるサンドボックスが事前インストール済み。
docker compose run --rm nanobot-cli onboard
vim ~/.nanobot/config.json
docker compose up -d nanobot-gatewaysystemd ユーザーサービスとして登録すればログアウト後も常時稼働可能(loginctl enable-linger)。
本番運用向け推奨設定:
{
"tools": {
"restrictToWorkspace": true,
"exec": { "sandbox": "bwrap" }
}
}bwrap で exec をサンドボックス化(Linux のみ)。channels.*.allowFrom は空配列で全拒否がデフォルト。
/new(会話リセット), /stop(タスク停止), /restart(再起動), /status(状態表示), /dream(記憶統合即時実行), /dream-restore(メモリ復元), /help。すべての対応チャンネルと CLI モードで共通動作。