๐ nanobot is an open-source, ultra-lightweight personal AI agent you can truly own. It keeps the agent core small and readable while giving you the practical pieces for real long-running work: WebUI, chat channels, tools, memory, MCP, model routing, automation, and deployment.
Start Here
| You want to... | Go to |
|---|
| Install nanobot with no terminal/config background | Start Without Technical Background |
| Install quickly and get one CLI reply | Install and Quick Start |
| Open the bundled browser UI | WebUI |
| Connect Telegram, Discord, WeChat, Slack, Email, Mattermost, or another chat app | Chat Apps |
| Configure providers, fallback models, Langfuse, MCP, web tools, or security | Docs and Configuration |
| Understand or extend the internals | Architecture and Development |
What can nanobot do?
nanobot is a self-hosted personal AI agent runtime. It can:
- run in a browser WebUI or terminal
- connect to Telegram, Discord, Slack, WeChat, Email, Mattermost, and other chat apps
- use tools such as files, shell, web search, web fetch, MCP, cron, image generation, and subagents
- keep session history and long-term memory through Dream
- run long-horizon goals and scheduled automations
- expose a Python SDK and OpenAI-compatible API for integrations
- deploy as a long-running local or server-side agent gateway
Latest Release
v0.2.2 - Durability Release
Highlights:
- Segmented WebUI transcripts
- Python SDK runtime controls
- Automation management
- Search/STT provider improvements
- Gateway/session/provider reliability
See full changelog
Open Source Partners
Recent Updates
- 2026-06-21 Python SDK runtime controls, optional Keenable key, cleaner run hooks.
- 2026-06-20 Telegram rich messages, safer SDK concurrency, smoother Quick Start.
- 2026-06-19 Firecrawl app, OpenAI image edits, safer session deletion.
- 2026-06-18 Feishu recovery, Keenable search, Mistral polish, workspace-aware git.
- 2026-06-17 Default idle auto-compact, clearer
/dream, macOS installer fixes.
For older updates, see the release archive or GitHub releases.
๐ก Why nanobot
- Persistent workflows: goals, memory, tools, and chat context survive long-running work.
- Chat-native reach: WebUI, API, Telegram, Feishu, Slack, Discord, Teams, email, and Mattermost.
- Model freedom: OpenAI-compatible APIs, local LLMs, image generation, search, and fallbacks.
- Small core: readable internals with MCP, memory, deployment, and automation built in.
- Own your stack: inspect, customize, self-host, and extend without a giant platform.
๐ฆ Install
[!IMPORTANT]
If you want the newest features and experiments, install from source.
If you want the most stable day-to-day experience, install from PyPI or with uv.
Pick one install method:
Prerequisites: Python 3.11 or newer. Git is only needed for a source install; Node.js/Bun are only needed if you are developing the WebUI itself.
If terminals, API keys, or config files are new to you, use the guided zero-background walkthrough in Start Without Technical Background instead of this compact README path.
One-command setup
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/HKUDS/nanobot/main/scripts/install.sh | sh
Windows PowerShell:
irm https://raw.githubusercontent.com/HKUDS/nanobot/main/scripts/install.ps1 | iex
The default command installs or upgrades nanobot-ai from PyPI, then starts nanobot onboard --wizard. It avoids system-wide pip installs by using an active virtual environment, uv, pipx, or a managed venv under ~/.nanobot/venv. If Quick Start finishes, skip the manual initialize/configure steps below and go straight to Open the WebUI.
To preview the plan without changing your environment, pass --dry-run; combine it with --dev when you want to preview the main-branch install.
curl -fsSL https://raw.githubusercontent.com/HKUDS/nanobot/main/scripts/install.sh | sh -s -- --dry-run
& ([scriptblock]::Create((irm https://raw.githubusercontent.com/HKUDS/nanobot/main/scripts/install.ps1))) --dry-run
To install the current main branch instead, pass --dev:
curl -fsSL https://raw.githubusercontent.com/HKUDS/nanobot/main/scripts/install.sh | sh -s -- --dev
& ([scriptblock]::Create((irm https://raw.githubusercontent.com/HKUDS/nanobot/main/scripts/install.ps1))) --dev
If you prefer to inspect the script first, open scripts/install.sh or scripts/install.ps1.
Install with uv
uv tool install nanobot-ai
Install from PyPI with pip
python -m pip install nanobot-ai
If pip reports externally-managed-environment on macOS or Linux, use the one-command installer, uv tool install nanobot-ai, pipx install nanobot-ai, or install inside a virtual environment.
Install from source
git clone https://github.com/HKUDS/nanobot.git
cd nanobot
python -m pip install -e .
Verify the install:
nanobot --version
๐ Quick Start
1. Initialize
Skip this step if the one-command setup already started the wizard and Quick Start finished there.
nanobot onboard
Use nanobot onboard --wizard if you prefer an interactive setup.
2. Configure (~/.nanobot/config.json)
Skip this step if you already configured provider and model settings in the wizard.
nanobot onboard creates ~/.nanobot/config.json and ~/.nanobot/workspace/. Configure these two parts in the config file. Add or merge the following blocks into the existing file instead of replacing the whole file.
The example below uses a generic OpenAI-compatible custom provider so the compact path does not recommend one hosted service. Provider examples are recipes, not rankings or endorsements. For copyable provider-specific setup, see Provider Cookbook.
Set your API key:
{
"providers": {
"custom": {
"apiKey": "your-api-key",
"apiBase": "https://api.example.com/v1"
}
}
}
Set a model preset and make it active:
{
"modelPresets": {
"primary": {
"label": "Primary",
"provider": "custom",
"model": "model-id-from-your-provider",
"maxTokens": 8192,
"contextWindowTokens": 200000,
"temperature": 0.1
}
},
"agents": {
"defaults": {
"modelPreset": "primary"
}
}
}
Direct agents.defaults.provider and agents.defaults.model still work for existing configs, but named presets are the recommended path because they also power /model switching and fallbackModels.
For another provider, the same config shape still applies:
| Replace | Where |
|---|
| Provider config key | providers.<provider> |
| API key | providers.<provider>.apiKey |
| Preset provider name | modelPresets.primary.provider |
| Model ID | modelPresets.primary.model |
| Endpoint URL, only when needed | providers.<provider>.apiBase |
3. Open the WebUI
Start the browser workbench:
nanobot webui
nanobot webui prepares the local WebSocket channel if needed, starts the gateway, and opens http://127.0.0.1:8765. It binds the first-run WebUI to 127.0.0.1 by default, so it is not exposed to your LAN. Prefer not to keep a terminal open? Use nanobot webui --background, then manage the gateway with nanobot gateway status, logs, restart, and stop.
For manual or terminal-only setup, test one CLI message:
nanobot status
nanobot agent -m "Hello!"
In nanobot status, it is normal for most providers to say not set. The active preset's provider should be configured, and Config plus Workspace should show check marks.
If that works, start an interactive chat:
nanobot agent
Need help with PATH, API keys, provider/model matching, or JSON errors? See the fuller Install and Quick Start and Troubleshooting.
๐ WebUI
The WebUI ships inside the published wheel โ no extra build step. It is the browser workbench for chat sessions, workspace controls, Apps, Skills, Automations, and settings. For the full user guide, see docs/webui.md.
Open it
nanobot webui
The command enables the local WebSocket channel after confirmation, starts the gateway, and opens http://127.0.0.1:8765. To open it from another device on your LAN, see WebUI docs -> LAN access.
The WebUI is served by the WebSocket channel on port 8765 by default. The gateway's 18790 port is for the health endpoint, not the browser UI.
[!TIP]
Working on the WebUI itself? Check out webui/README.md for the source-tree, Vite dev server, build, and test workflow.
๐๏ธ Architecture
๐ nanobot stays lightweight by centering everything around a small agent loop: messages come in from chat apps, the LLM decides when tools are needed, and memory or skills are pulled in only as context instead of becoming a heavy orchestration layer. That keeps the core path readable and easy to extend, while still letting you add channels, tools, memory, and deployment options without turning the system into a monolith.
โจ Features
๐ Docs
Browse the repo docs for the latest features and GitHub development version, or visit nanobot.wiki for the stable release documentation.
๐ค Contribute & Roadmap
PRs welcome! The codebase is intentionally small and readable. ๐ค
Contribution Flow
See CONTRIBUTING.md for setup, review, and contribution guidelines.
Roadmap โ Pick an item and open a PR!
- Multi-modal โ See and hear (images, voice, video)
- Long-term memory โ Never forget important context
- Better reasoning โ Multi-step planning and reflection
- More integrations โ Calendar and more
- Self-improvement โ Learn from feedback and mistakes
Contact
This project was started by Xubin Ren as a personal open-source project and continues to be maintained in an individual capacity using personal resources, with contributions from the open-source community. Feel free to contact xubinrencs@gmail.com for questions, ideas, or collaboration.
Contributors
โญ Star History