Nanobot AI
MIT-licensed personal AI agent framework with a small Python core, WebUI, CLI, chat channels, persistent goals, memory, MCP servers, CLI Apps, cron, shell and file tools, provider routing, OpenAI-compatible API serving, and deployment paths for long-running self-hosted agents.
Open the source and read safety notes before installing.
Safety notes
- Prefer package-manager installs such as `uv tool install nanobot-ai`, `pipx install nanobot-ai`, or a reviewed virtual-environment install. Upstream also documents downloaded installer scripts; inspect those scripts first instead of running remote shell content blindly.
- Nanobot can execute shell commands, read and write workspace files, call MCP servers, fetch web content, run cron jobs, access chat channels, and keep long-running agent goals alive. Review every enabled tool surface before exposing it to nonlocal users.
- `tools.restrictToWorkspace` is an application-level guard, not an operating-system sandbox. On Linux, combine it with `tools.exec.sandbox: "bwrap"` when shell execution should be isolated from config files and API keys.
- HTTP and SSE MCP endpoints share Nanobot's SSRF guard. Keep `tools.ssrfWhitelist` narrow and prefer single-host CIDRs when private endpoints must be allowed.
- Channel `allowFrom` and pairing controls decide who can talk to the bot. Avoid `allowFrom: ["*"]` unless the channel, workspace, and tool policy are intentionally public.
- Docker deployment can require extra Linux capability settings for bubblewrap-based shell sandboxing. Review the Docker security notes before mounting secrets or persistent workspaces.
Privacy notes
- Nanobot stores config, sessions, memory, cron jobs, workspace files, media, channel state, and logs under the configured Nanobot paths, usually `~/.nanobot`.
- Provider API keys, bot tokens, email credentials, OAuth state, MCP headers, and chat-channel secrets can appear in config or environment variables. Use environment placeholders and protected files instead of literal secrets.
- WebUI, chat apps, CLI sessions, and the OpenAI-compatible API can expose prompts, files, generated artifacts, tool output, screenshots or media attachments, channel IDs, user IDs, and conversation history to the selected model provider and enabled observability tools.
- Langfuse tracing, if configured with environment variables and installed support, can export OpenAI-compatible provider calls to the configured Langfuse project.
- Remote MCP servers, hosted search providers, image providers, chat platforms, and model providers each receive the data sent through their specific integration path.
Prerequisites
- Python 3.11 or newer and either uv, pipx, pip in a virtual environment, or a source checkout.
- At least one model provider, local model endpoint, OAuth-backed provider, or OpenAI-compatible endpoint configured with credentials or an API base URL.
- A persistent `~/.nanobot` config and workspace location for sessions, memory, cron jobs, channel state, logs, generated artifacts, and WebUI runtime data.
- Optional chat-channel credentials for Telegram, Discord, Slack, Matrix, Feishu, WeChat, Email, Microsoft Teams, Signal, or another supported channel.
- A reviewed MCP, CLI App, shell, filesystem, and workspace policy before exposing Nanobot to long-running chat channels or shared WebUI access.
Schema details
- Install type
- cli
- Troubleshooting
- No
- Scope
- Source repo
- Estimated setup
- 30 minutes
- Difficulty
- advanced
- Website
- https://nanobot.wiki
- Pricing
- free
- Disclosure
- editorial
- Application category
- DeveloperApplication
- Operating system
- Cross-platform
Full copyable content
uv tool install nanobot-ai
nanobot --version
nanobot onboard --wizard
nanobot status
nanobot agent -m "Hello!"About this resource
Overview
Nanobot AI is an open-source personal agent framework for running a lightweight agent across local CLI sessions, a browser WebUI, chat apps, MCP servers, CLI Apps, memory, cron, and long-running workspaces. It is not just a chatbot UI: the Python package exposes an agent runtime with channels, provider routing, workspace-aware tools, MCP integration, an OpenAI-compatible API surface, and deployment patterns for keeping the gateway online.
Use it when you want a self-hosted agent that can stay connected to your own tools and channels without adopting a large hosted automation platform. It is especially relevant for searches around personal AI agents, Claude-compatible workbenches, Codex/OpenAI provider routing, MCP-enabled agents, and chat-native agent deployment.
Install
Install the published Python package:
uv tool install nanobot-ai
nanobot --version
Initialize or refresh the local config and workspace:
nanobot onboard --wizard
nanobot status
nanobot agent -m "Hello!"
The upstream README also documents downloaded installer scripts for macOS, Linux, and Windows. Those are convenience paths, but they should be inspected before use. For agent and automation environments, prefer a package manager, virtual environment, or reviewed source checkout so the install path is clear.
Configuration Model
Nanobot stores its default config at ~/.nanobot/config.json and workspace
state under ~/.nanobot/workspace/. The docs recommend proving a single local
agent reply before enabling WebUI, chat channels, Docker, systemd, LaunchAgent,
or custom tools.
Minimal production-oriented settings usually cover:
- Provider credentials through environment variables or a protected config file.
- A named model preset selected by
agents.defaults.modelPreset. - Workspace restriction for filesystem and shell-adjacent work.
- Explicit channel access control through
allowFromor pairing. - Narrow MCP tool exposure with
enabledToolswhen a server offers broad capabilities.
Capability Map
| Area | Nanobot Coverage |
|---|---|
| CLI agent | nanobot agent, one-shot messages, interactive chat, explicit config/workspace flags, and session selection |
| WebUI | Browser workbench with chat sessions, model controls, project workspaces, activity rendering, Apps, Skills, settings, and automations |
| Gateway | Long-running process for chat channels, WebSocket/WebUI, cron-backed jobs, Dream/memory jobs, and a health endpoint |
| Chat channels | Telegram, Discord, WhatsApp, WeChat, Feishu, DingTalk, Slack, Matrix, Email, QQ, Napcat, WeCom, Microsoft Teams, Mochat, and Signal docs |
| MCP | Stdio and HTTP/SSE MCP servers configured under tools.mcpServers, with optional headers, timeouts, and enabledTools filtering |
| CLI Apps | Extension path for CLI-native tools, surfaced with MCP-style capability mentions in newer releases |
| Tools | Filesystem, shell execution, web search/fetch, MCP, cron, image generation, and runtime self-inspection |
| Memory | Session history, long-term memory, Dream consolidation, and workspace-scoped state |
| Providers | Anthropic, OpenAI-compatible providers, local endpoints, OAuth-backed OpenAI Codex/GitHub Copilot paths, image providers, transcription, fallbacks, and model presets |
| API | nanobot serve exposes OpenAI-compatible /v1/chat/completions, /v1/models, and health routes |
| Deployment | Docker Compose, Docker CLI, Linux systemd user service, and macOS LaunchAgent docs |
MCP and Agent Workflows
Nanobot treats MCP servers as native agent tools once they are configured under
tools.mcpServers. Stdio servers use command, args, and optional env;
remote servers use url and optional headers. HTTP and SSE MCP connections
are checked by the shared SSRF guard before probing, before connecting, and
again before following redirects.
For broad MCP servers, use enabledTools to keep the active tool surface small.
The setting accepts raw MCP tool names such as read_file or Nanobot-wrapped
names such as mcp_filesystem_read_file.
WebUI and Channels
The WebUI is served by the WebSocket channel after nanobot gateway starts. It
adds session management, project workspace selection, visible agent activity,
model settings, Apps, Skills, and automations around the same Nanobot runtime.
Chat channels use a common setup pattern: configure the channel credentials,
keep access narrow with allowFrom or pairing, verify nanobot channels status, then run nanobot gateway --verbose while debugging startup. The
docs call out that allowing everyone on a channel should only be used when that
is intentional.
Security Boundaries
Nanobot has useful controls, but they need to be configured deliberately:
tools.restrictToWorkspacekeeps workspace-aware file tools under the active workspace and applies best-effort shell working-directory checks.tools.exec.sandbox: "bwrap"adds Linux bubblewrap isolation for shell commands and hides config files/API keys from the sandboxed process.tools.exec.enable: falseremoves the shell tool entirely.tools.ssrfWhitelistexempts private networks from the shared SSRF guard and should be kept as narrow as possible.- Channel
allowFromand pairing determine who can send instructions into the agent.
Those controls matter because a long-running personal agent often has access to local files, project workspaces, chat credentials, model provider keys, and MCP tools at the same time.
Use Cases
- Run a local personal agent with persistent workspace, sessions, memory, and provider routing.
- Connect a Claude/OpenAI-compatible model workflow to MCP servers without manually wiring every tool into a separate host app.
- Keep an AI assistant online in Discord, Telegram, Slack, Matrix, Email, or a private WebUI while preserving explicit channel access controls.
- Operate long-running goals, cron automations, and workbench sessions from a self-hosted Python runtime.
- Expose a controlled OpenAI-compatible API for local experiments around one configured Nanobot instance.
- Compare lightweight self-hosted personal-agent stacks against larger agent platforms or hosted workflow automation tools.
Source Review
Verified on 2026-06-18:
- GitHub metadata reported
HKUDS/nanobotas an MIT-licensed Python repository with the descriptionLightweight, open-source AI agent for your tools, chats, and workflows, a homepage atnanobot.wiki, active updates on 2026-06-18, latest releasev0.2.1published on 2026-06-01, and more than 44,000 stars. - PyPI metadata for
nanobot-aireported version0.2.1, summaryA lightweight personal AI assistant framework, Python>=3.11, MIT license, and dependencies including Anthropic, OpenAI, MCP, web, channel, document, cron, and provider-related packages. - The docs index says the repository docs track current source while published
release documentation lives at
nanobot.wiki, and points users through quick start, concepts, provider, WebUI, chat app, deployment, OpenAI API, Python SDK, and MCP configuration pages. - The configuration docs document environment-variable secret placeholders, provider/model presets, channel settings, web tools, image generation, MCP servers, shell/workspace controls, SSRF whitelisting, pairing, and Langfuse observability.
- The MCP configuration section documents stdio and HTTP/SSE server config,
optional headers,
toolTimeout,enabledTools, and shared SSRF validation for remote MCP endpoints. - The WebUI docs describe a packaged browser workbench with chat sessions, visible agent activity, workspace selection, Apps, MCP presets, Skills, Automations, settings, and WebSocket-channel serving.
- The chat-app docs document a common gateway-backed setup pattern and channel coverage across Telegram, Discord, WhatsApp, WeChat, Feishu, DingTalk, Slack, Matrix, Email, QQ, Napcat, WeCom, Microsoft Teams, Mochat, and Signal.
- The architecture docs map the runtime across channels, message bus, agent loop, provider/tool runner, tools, state, WebUI/gateway, memory, MCP, filesystem, shell, web, cron, image generation, and security boundaries.
- Release
v0.2.1describes WebUI workbench improvements, stronger long-running goal stability, unified CLI Apps and MCP extension workflows, broader provider routing, channel additions, and security/reliability hardening.
Source citations
Add this badge to your README
How it compares
Nanobot AI side by side with 3 alternatives on trust, install, platform support, and disclosed safety notes — all from reviewed registry metadata.
| Field | Nanobot AI MIT-licensed personal AI agent framework with a small Python core, WebUI, CLI, chat channels, persistent goals, memory, MCP servers, CLI Apps, cron, shell and file tools, provider routing, OpenAI-compatible API serving, and deployment paths for long-running self-hosted agents. Open dossier | Open WebUI Self-hosted AI platform and web UI for Ollama, OpenAI-compatible APIs, RAG, Python function tools, model builder workflows, artifacts, web search, vector databases, enterprise auth, observability, plugins, and MCP-adjacent OpenAPI integrations. Open dossier | AnythingLLM Local-first AI application for private chat, document RAG, workspace agents, MCP-compatible tools, model routing, memories, scheduled tasks, multimodal workflows, multi-user Docker deployments, and self-hosted agent automation. Open dossier | LobeHub (formerly LobeChat) Self-hostable AI agent workspace formerly known as LobeChat, with agent builder, agent groups, personal memory, model-provider routing, skills, MCP-compatible plugins, Docker deployment, Vercel deployment, and IM gateway workflows. Open dossier |
|---|---|---|---|---|
| Trust | ||||
| Install risk | Review first | Review first | Review first | Review first |
| Notes | Safety ✓ Privacy ✓ | Safety ✓ Privacy ✓ | Safety ✓ Privacy ✓ | Safety ✓ Privacy ✓ |
| Category | tools | tools | tools | tools |
| Source | source-backed | source-backed | source-backed | source-backed |
| Author | HKUDS | Open WebUI | Mintplex Labs | LobeHub |
| Added | 2026-06-18 | 2026-06-18 | 2026-06-18 | 2026-06-18 |
| Platforms | CLI | CLI | CLI | CLI |
| Source repo | — | — | — | — |
| Safety notes | ✓Prefer package-manager installs such as `uv tool install nanobot-ai`, `pipx install nanobot-ai`, or a reviewed virtual-environment install. Upstream also documents downloaded installer scripts; inspect those scripts first instead of running remote shell content blindly. Nanobot can execute shell commands, read and write workspace files, call MCP servers, fetch web content, run cron jobs, access chat channels, and keep long-running agent goals alive. Review every enabled tool surface before exposing it to nonlocal users. `tools.restrictToWorkspace` is an application-level guard, not an operating-system sandbox. On Linux, combine it with `tools.exec.sandbox: "bwrap"` when shell execution should be isolated from config files and API keys. HTTP and SSE MCP endpoints share Nanobot's SSRF guard. Keep `tools.ssrfWhitelist` narrow and prefer single-host CIDRs when private endpoints must be allowed. Channel `allowFrom` and pairing controls decide who can talk to the bot. Avoid `allowFrom: ["*"]` unless the channel, workspace, and tool policy are intentionally public. Docker deployment can require extra Linux capability settings for bubblewrap-based shell sandboxing. Review the Docker security notes before mounting secrets or persistent workspaces. | ✓Open WebUI can run Python function-calling tools, RAG ingestion, web search, web browsing, image generation, plugins, and model/provider integrations; review each capability before enabling it for untrusted users. Docker examples expose web ports and persistent volumes. Mount persistent data, set admin/auth controls, and avoid treating demo defaults as production hardening. Python function tools and plugin pipelines can execute application logic and access configured services. Restrict tool creation and plugin installation to trusted administrators. RAG and web browsing can ingest local documents, URLs, cloud files, and extracted text; test indexing quality and permissions before exposing private corpora to users. Open WebUI uses a custom Open WebUI License with branding restrictions and enterprise-license exceptions. Verify license terms before redistribution, white-labeling, or commercial deployment. | ✓AnythingLLM can run agents, scheduled tasks, MCP-compatible tools, browser-like workspace actions, developer APIs, and external model calls; scope tools and credentials before enabling them for users. The upstream Docker guide includes examples that add the SYS_ADMIN capability to the container. Review whether that capability is acceptable for the host before copying production run commands. Multi-user Docker deployments need normal production controls: authentication, TLS, network isolation, secret management, persistent-volume ownership, backups, and upgrade planning. Agent tools, custom agents, model routing, memories, and scheduled tasks can change behavior over time; use least privilege, logging, review gates, and rollback plans for write-capable workflows. Localhost services such as Ollama, Chroma, LocalAI, or LM Studio may need Docker host routing adjustments; avoid exposing local provider ports wider than intended. | ✓Review the official deployment guide, generated Compose files, image tags, mounted volumes, and network bindings before running LobeHub on production or personal machines. LobeHub can organize agent teams, schedule work, use memory, connect skills, and use MCP-compatible plugins. Restrict write-capable plugins, account integrations, and scheduled actions until permissions are reviewed. Docker deployment can expose persistent storage, service ports, and provider credentials. Keep compose files, environment files, backups, and reverse-proxy configs under normal server hardening rules. The current repository license file uses the LobeHub Community License with additional commercial derivative-work conditions, while `package.json` still reports MIT. Treat the LICENSE file as the review source for usage decisions. Do not assume self-hosting removes third-party risk: model providers, plugins, skills, analytics, storage providers, and sandbox integrations can still receive data. |
| Privacy notes | ✓Nanobot stores config, sessions, memory, cron jobs, workspace files, media, channel state, and logs under the configured Nanobot paths, usually `~/.nanobot`. Provider API keys, bot tokens, email credentials, OAuth state, MCP headers, and chat-channel secrets can appear in config or environment variables. Use environment placeholders and protected files instead of literal secrets. WebUI, chat apps, CLI sessions, and the OpenAI-compatible API can expose prompts, files, generated artifacts, tool output, screenshots or media attachments, channel IDs, user IDs, and conversation history to the selected model provider and enabled observability tools. Langfuse tracing, if configured with environment variables and installed support, can export OpenAI-compatible provider calls to the configured Langfuse project. Remote MCP servers, hosted search providers, image providers, chat platforms, and model providers each receive the data sent through their specific integration path. | ✓Chats, prompts, uploaded files, document chunks, embeddings, vector metadata, web search results, browser-fetched pages, Python tool inputs, plugin outputs, voice/video data, logs, metrics, and traces may contain private data. Configured model providers, vector databases, document extraction engines, web search providers, image providers, object storage, Redis, auth providers, and observability backends may receive user data. Keep provider keys, OAuth/LDAP/SSO secrets, database URLs, object storage keys, plugin credentials, uploaded files, RAG indexes, and OpenTelemetry exports out of public repos and screenshots. Define retention, deletion, tenant separation, group permissions, export policy, and audit review before using Open WebUI as a shared internal workspace. | ✓Uploaded documents, parsed chunks, embeddings, workspace memories, prompts, chat history, agent state, scheduled task inputs, MCP payloads, provider responses, logs, and API calls may contain sensitive data. The README documents anonymous telemetry and an opt-out through DISABLE_TELEMETRY=true or the in-app privacy setting; review this before using regulated or confidential data. Even with telemetry disabled, outbound calls may still go to configured LLMs, embedding models, vector databases, external tools, cdn.anythingllm.com, GitHub, or GitHubusercontent depending on the deployment. Keep provider keys, JWT secrets, workspace invite links, storage paths, private documents, and generated citations out of public prompts, screenshots, issues, and examples. | ✓Agent prompts, chat history, scheduled tasks, personal memory, workspace context, uploaded files, model responses, tool calls, plugin traffic, MCP-compatible plugin payloads, logs, and analytics can contain private data. Model provider API keys, auth secrets, S3/storage credentials, database URLs, sandbox credentials, and analytics settings should stay in deployment secrets, not committed configs or screenshots. If using shared workspaces, define who can inspect agent memory, saved prompts, generated pages, project history, plugin configuration, logs, and scheduled task results. Before enabling cloud providers, plugins, skills, or analytics, review data retention and regional handling outside the self-hosted instance. |
| Prerequisites |
|
|
|
|
| Install | | | | |
| Config | | — | — | — |
| Citations | ||||
| Claim | Unclaimed | Unclaimed | Unclaimed | Unclaimed |
Signals
Loading live community signals…
A short, calm digest of reviewed Claude resources. Unsubscribe any time.