nanobot README cover

English | 简体中文 | 繁體中文 | Español | Français | Bahasa Indonesia | 日本語 | 한국어 | Русский | Tiếng Việt

GitHub stars PyPI version PyPI downloads Test Suite Python 3.11 or newer MIT License nanobot documentation

Discord · X · WeChat / Feishu

# nanobot 🐈 **nanobot** is an ultra-lightweight, open-source, self-hosted personal AI agent framework written in Python. It runs in a WebUI, terminal, or chat apps and combines tools, long-term memory, MCP integrations, model routing, multi-agent delegation, scheduled automation, and an OpenAI-compatible API in a small, readable core. ## Start Here | You want to... | Go to | |---|---| | Install nanobot with no terminal/config background | [Start Without Technical Background](./docs/start-without-technical-background.md) | | Install quickly and get one CLI reply | [Install](#-install) and [Quick Start](#-quick-start) | | Open the bundled browser UI | [WebUI](#-webui) | | Connect Telegram, Discord, WeChat, Slack, Email, Mattermost, or another chat app | [Chat Apps](./docs/chat-apps.md) | | Configure providers, fallback models, Langfuse, MCP, web tools, or security | [Docs](./docs/README.md) and [Configuration](./docs/configuration.md) | | Understand or extend the internals | [Architecture](./docs/architecture.md) and [Development](./docs/development.md) | | Deploy to the cloud or keep nanobot running as a service | [Deployment](./docs/deployment.md) | ## 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 ## 💡 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: | Track | Install with | Update with | What runs | |---|---|---|---| | Stable | installer, `uv`, or pip | the same package tool | one released Python/WebUI/TUI version | | Current source | editable Git checkout | `git pull --ff-only` + editable dependency sync | Python, WebUI, and TUI from that checkout | Prerequisites: Python 3.11 or newer. Git and [Bun](https://bun.sh/) are only needed for a source install. Published packages include the WebUI and fetch a checksummed, version-matched TUI archive—with its licenses, notices, corresponding application source, source offer, and relinking instructions—on first use. If terminals, API keys, or config files are new to you, use the guided zero-background walkthrough in [Start Without Technical Background](./docs/start-without-technical-background.md) instead of this compact README path. **One-command setup** macOS / Linux: ```bash curl -fsSL https://raw.githubusercontent.com/HKUDS/nanobot/main/scripts/install.sh | sh ``` Windows PowerShell: ```powershell irm https://raw.githubusercontent.com/HKUDS/nanobot/main/scripts/install.ps1 | iex ``` The default command installs or upgrades `nanobot-ai` from PyPI. On a fresh local desktop, it then starts `nanobot webui` so you can configure the first provider and model in **Settings → Models**. SSH, headless, existing-config, and older-release paths keep the terminal setup wizard. The installer avoids system-wide pip installs by using an active virtual environment, `uv`, `pipx`, or a managed venv under `~/.nanobot/venv`. It also prints the exact command it used to run nanobot; reuse that full command below if `nanobot` is not on `PATH`. To preview the plan without changing your environment, pass `--dry-run`. ```bash curl -fsSL https://raw.githubusercontent.com/HKUDS/nanobot/main/scripts/install.sh | sh -s -- --dry-run ``` ```powershell & ([scriptblock]::Create((irm https://raw.githubusercontent.com/HKUDS/nanobot/main/scripts/install.ps1))) --dry-run ``` If you prefer to inspect the script first, open [`scripts/install.sh`](./scripts/install.sh) or [`scripts/install.ps1`](./scripts/install.ps1). **Install with `uv`** ```bash uv tool install nanobot-ai ``` **Install from PyPI with pip** ```bash 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** Clone the repository and install it in editable mode. Bun is required because the source checkout runs the matching TUI directly instead of downloading an older release binary. ```bash git clone https://github.com/HKUDS/nanobot.git cd nanobot python -m venv .venv ``` Activate it with `source .venv/bin/activate` on macOS/Linux or `.venv\Scripts\Activate.ps1` in Windows PowerShell, then run: ```bash python -m pip install -e . ``` After that, the normal commands are identical to a stable install. `nanobot` runs the TUI from this checkout, and `nanobot webui` rebuilds stale frontend assets automatically. A later `git pull --ff-only` updates the Python, TUI, and WebUI source together; rerun `python -m pip install -e .` when Python dependencies change. Contributors should also read [`CONTRIBUTING.md`](./CONTRIBUTING.md). Verify the install: ```bash nanobot --version ``` If `nanobot` is not on `PATH`, invoke it through the method that installed it: reuse the recommended installer's command, use `uv tool run --from nanobot-ai nanobot ...` or `pipx run --spec nanobot-ai nanobot ...`, or use the Python executable from the environment where pip installed the package. ## 🚀 Quick Start **Open nanobot in your browser** ```bash nanobot webui ``` This is the recommended first run. The launcher creates the config and workspace when needed, safely enables the local WebSocket channel after confirmation, starts or joins the shared local gateway, and opens [`http://127.0.0.1:8765`](http://127.0.0.1:8765). A fresh install can open before a model is configured, so setup continues in the browser instead of beginning in a JSON file. The first-run WebUI binds to localhost by default and is not exposed to your LAN. **Your first three steps** 1. Open **Settings → Models** and choose a provider, credential, and model. 2. Start a new topic and send `Hello!` to verify the connection. 3. Before project work, choose the intended workspace and access mode from the composer. Any normal reply means the provider, model, workspace, and browser gateway are working together. **Keep nanobot running after you close the terminal** ```bash nanobot gateway --background ``` This is the only command that promotes the shared gateway to persistent background mode. It leaves channels and automations running after every local TUI and WebUI launcher exits. Complete first-time model setup with `nanobot webui` before switching to background mode; open the same localhost WebUI again afterward. ```bash nanobot gateway status nanobot gateway logs nanobot gateway restart nanobot gateway stop ``` **Prefer a gateway-first workflow?** ```bash nanobot gateway ``` This skips WebUI setup and browser opening, then runs the same complete gateway in the current terminal. It is the familiar entry point if you are coming from OpenClaw or already operate agents as long-lived services. The WebUI remains available when its channel is configured; open it manually when needed. Use `nanobot gateway --background` for the same direct entry point without keeping the terminal attached. For automatic startup and supervision by the operating system, see [Deployment](./docs/deployment.md). **Prefer to work entirely in the terminal?** ```bash nanobot ``` This opens the native terminal client with the launch directory as its workspace. It shares saved conversations and the local gateway with the WebUI. The explicit `nanobot agent` form remains available for compatibility. - Type `/` to discover commands, `/sessions` to switch conversations, or `@` to mention an app, MCP server, or saved session. - Press `Enter` to send. While nanobot is working, `Enter` sends now and `Tab` sends after the current response. Press `Shift+Enter` to add a newline (`Ctrl+J` works in terminals that cannot distinguish modified Enter keys). - Use `/detach` to leave the current task running, or start with `nanobot gateway --background` when nanobot should stay online after all local clients exit. Each launch starts a new session by default. Use `--session` to resume one and `--workspace` to choose another workspace. See the [CLI reference](./docs/cli-reference.md#agent-cli) for session branching, diffs, history, shortcuts, gateway lifecycle, and compatibility options. For one request and an immediate exit, use: ```bash nanobot -m "Hello!" ``` The one-shot form is useful for a quick provider check, shell scripts, and local automation. If you have not configured a model yet, run `nanobot webui` and open **Settings → Models** first. Need manual JSON, another device on your LAN, or help with provider/model matching? Continue with [Install and Quick Start](./docs/quick-start.md), [WebUI](./docs/webui.md), or [Troubleshooting](./docs/troubleshooting.md). If nanobot worked for you, a star on GitHub is the simplest way to support the project. - Want a pasteable provider setup? See [Provider Cookbook](./docs/provider-cookbook.md) - Want to understand provider/model matching? See [Providers and Models](./docs/providers.md) - Want web search, MCP, security settings, or more config options? See [Configuration](./docs/configuration.md) - Want to run locally? See [Ollama](./docs/providers.md#ollama), [vLLM or another local OpenAI-compatible server](./docs/providers.md#vllm-or-other-local-openai-compatible-server), and the full [provider reference](./docs/configuration.md#providers). - Want to run nanobot in chat apps like Telegram, Discord, WeChat or Feishu? See [Chat Apps](./docs/chat-apps.md) - Want Docker or Linux service deployment? See [Deployment](./docs/deployment.md) ## ☁️ Deploy **Render — one click** Deploy nanobot's gateway and bundled WebUI from the repository's ready-to-use Blueprint: [![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/HKUDS/nanobot) Render will ask for `ANTHROPIC_API_KEY` and a private `NANOBOT_WEB_TOKEN`, then provision persistent storage for sessions, memory, and WebUI history. Persistent disks require a paid Render service. **Self-host** Prefer your own infrastructure? Follow the [deployment guide](./docs/deployment.md) for Docker, Docker Compose, Linux services, and macOS LaunchAgent setup. ## 🌐 WebUI The WebUI ships **inside the published wheel** with no separate frontend build. It is the browser workbench for persistent topics, temporary chats, visible agent activity, workspace controls, Apps, Skills, Automations, and settings.

nanobot webui preview

Use it to: - keep separate topics for different tasks and projects; - use temporary chats when a conversation should not be saved to history or memory; - inspect reasoning, tool calls, file edits, diffs, command output, and generated artifacts; - switch models and workspaces without leaving the conversation; - configure providers and chat channels, connect Apps, discover Skills, and manage Automations from one place. See the [WebUI guide](./docs/webui.md) for LAN access, background operation, workspace controls, and the full feature tour. Working on the frontend itself? Use [`webui/README.md`](./webui/README.md). ## 🏗️ Architecture

nanobot 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. ## 📚 Docs Browse the [repo docs](./docs/README.md) for the latest features and GitHub development version, or visit [nanobot.wiki](https://nanobot.wiki/docs/latest/getting-started/nanobot-overview) for the stable release documentation. - Use task-oriented guides: [Guides](./docs/guides/README.md) - Start with no technical background: [Start Without Technical Background](./docs/start-without-technical-background.md) - Start from zero with developer basics: [Install and Quick Start](./docs/quick-start.md) - Understand the runtime model: [Concepts](./docs/concepts.md) - Read the source-level map: [Architecture](./docs/architecture.md) - Choose a provider/model: [Providers and Models](./docs/providers.md) - Copy provider setup recipes: [Provider Cookbook](./docs/provider-cookbook.md) - Debug setup and runtime failures: [Troubleshooting](./docs/troubleshooting.md) - Talk to your nanobot with familiar chat apps: [Chat App AI Agent](./docs/guides/chat-app-ai-agent.md) · [Chat Apps](./docs/chat-apps.md) - Schedule or trigger agent work: [Automations](./docs/automations.md) - Configure providers, web search, MCP, and runtime behavior: [Configuration](./docs/configuration.md) - Integrate nanobot with local tools and automations: [OpenAI-Compatible API](./docs/openai-api.md) · [Python SDK](./docs/python-sdk.md) - Run nanobot with Docker or as a Linux service: [Deployment](./docs/deployment.md) ## Releases **Latest release: [v0.3.0 - The Agency Release](https://github.com/HKUDS/nanobot/releases/tag/v0.3.0)** The Agency Release turns nanobot from a durable workbench into an agent runtime that can coordinate helpers, switch models per session, and carry authorized work through to completion. - Consult inline subagents without leaving the current task - Switch model presets per session directly from the composer - Start from a guided WebUI setup with clearer execution controls - Apply configuration changes live across a more reliable provider, channel, and tool runtime [Read the v0.3.0 release notes](https://github.com/HKUDS/nanobot/releases/tag/v0.3.0) ## Recent Updates - **2026-07-24** Guided first-run setup, inline subagents, and model switching from the composer. - **2026-07-23** Grok OAuth with hosted X Search, live image settings, and clearer fallback models. - **2026-07-22** Parallel Search, live configuration reloads, richer app discovery, and a smoother mobile WebUI. - **2026-07-21** Codex fast mode, visible skill references, safer configuration saves, and sturdier task cleanup. - **2026-07-20** Cleaner code blocks and copy actions, self-contained channels, and steadier QQ reconnects. For older updates, see the [release archive](./docs/release-archive.md) or [GitHub releases](https://github.com/HKUDS/nanobot/releases). ## Open Source Partners

Kimi Open Source Friends MiniMax

## 🤝 Contribute Use nanobot for a real task, report what broke, and then pick a focused improvement. - Read [CONTRIBUTING.md](./CONTRIBUTING.md) for the development workflow. - Browse [open issues](https://github.com/HKUDS/nanobot/issues) for problems to investigate. - Open a [pull request](https://github.com/HKUDS/nanobot/pulls) for a focused fix or integration. ## Maintainers
Xubin Ren
Xubin Ren

Xubin Ren on X
Yongru Chen
Yongru Chen

Yongru Chen on X
## Community Contributors

Athemis axelray-dev yorkhellen 04cb santhreal yu-xin-c xcosmosbox kunalk16 chaohuang-ai zayfod nikolasdehor JiajunBernoulli flobo3 hamb1y SergioSV96 KDB-Wind morandot coldxiangyu163 boogieLing michaelxer aiguozhi123456 pinhua33 pixan-ai hussein1362 alekwo haosenwang1018 IlyaGusev T3chC0wb0y VITOHJL macroadster Hinotoi-agent kingassune goodtiding5 kiplangatkorir elkaix KimGLee m11y LingaoM DaryeDev CJWTRUST xzq-xu pikaxinge arcdrake22 JackLuguibin HaisamAbbas anunay999 flaviovs C-Li Ho1yShif pjhoberman nghiahsgs Bahtya tangtaizong666 XJPeng12 yanghan-cyber ZhouJ-sh Yuxin-Lou LeoFYH claude chris-alexander benlenarts outlook84 Mrart ramonpaolo huhu-tiger tangjiabin yeyitech Flinn-X bingqilinweimaotai Qinnnnnn HengWeiBin waelantar tanishra olgagaga masterlyj xgzlucario dzydzydzy7 dajiaohuang concertypin WangCheng0116 yarikoptic lukemilby gongpx20069 tobrien Shiniese shawnWXN sbyinin nne998 lahuman hlgone franciscomaestre fat-operator shixi-li who96 cyzlmh zhuzhh zpljd258 cms19859230182-lang amplifierplus LZDQ wb213 shaun0927 wzrayyy LHMQ878 Michael-lhh Mizarka rick2047 kuchazi-yy Protocol-zero-0 subalkum vystartasv ZJUCQR ZegWe ZhangYuanhan-AI chtangwin dxtime ethanclaw WufeiHalf stutiredboy stupidloud asif786ka robbyczgw-cla cypggs web-flow eliumusk mikaku9944 mamamiyear jr551 invictus-z imfondof hyoukadev hata33 fengxiaohu vivganes themavik flyzstu pikaqqqqqq wyjBot pblocz niradler longle325 primit1v0 honjiaxuan DeeJ4yNg danielphang yanalialiuk zhouzhuojie zerone0x yrk111222 Xerxes-cn suger-m mengyhang Liwx1014 Shizoqua KailBug 19emtuck tsubasakong wseng 3927o FloRainRJY agbocsardi JilunSun7274 dvejmz ddadaal jiehaoZ Lbin91 Alex-yang00 xek Harvey-Mackie chenyahui angleyanalbedo adabarbulescu yoheinishikubo WormW WhalerO thomya Tejas1Koli Seeratul SJK-py RongLei-intel QQQ300kuai MiguelPF mterhar Pringlas pjbakker luojiaaoo NearlCrews yongPhone ZXGERIC erikmackinnon rickererer ferkans-amir for13to1 futurist Maaannnn rubychilds init-new-world Idealist17 gola greyishsong h4nz4 hoaresky hcanyz himax12 Zeknes ZhihaoZhang97 linziyanleo akinolur alairjt noki1928 barreler126 bllackhu brendanlevy-clarahealth cdkey85 ducheng121 SamZhu19921116 justforyoudear choiking cocolato luomaohao codedragoncom d1ago daliu858 danielyangfei dingyanyi2019 djmaze dulltackle samyzhh shen0122 shenchengtsi sidkang skiyo sontianye spartan077 tercerapersona tlguszz1010 vandazia vincentchen0x2-dev tianrking wcmolin dynames0098 knightconnorp wymcmh weijun-xia yaotutu yeounhyeok Endeavour-Yuan ziuus dsxyy azhengzz jhkim43 kimkitsuragi26 kinchahoy A11Might kronk307 lailoo lang07123 tetratorus spinvettel li-yazhou ALIZE126 Rheasilvia mru4913 mt-huerta mytechdream nikube npodbielski oriengy popcell qixinbo qulllee rav-melisono razzh7 rise2689 hlibr gthieleb Rafa-Ross korruz hyudryu breitburg IlyaSemenov Tevkanbot JakeRowe19 JamesWrigley La-Volpe JavisPeng Jefsky letzdoo-js 95256155o joel611 NiceLargeHuo kamalakarrao KEEPSLAMDUNK krisLu Krislu1221 kyya rreben ATECHPCS adrianhoehne Aisht669 AlbertWang688 AlexanderMerkel khmylov karimluna Bayern4ever-dot abhinavaditya811 bjoshuanoah hanouticelina quanmou ClaytonWWilson kaseru danielemden dmarkey desmondsow intelliot eugenechae ehs208 Felix8568 GabrielWithTina georgeatparallel SHLE1 lzmjlrt saimonventura SIDD-KIDD sihyeonn Seym0n fyhertz sohamb117 Solaris-star Syoc tedyyan xuayan-nokia TheAutomatic TomLisankie tamvicky MVS-source wingkwong wenjielei1990 Wenzhang-Chen wesleyzhangwq XiaoHuo888-hue Lyt060814 limdingwen luc-nguyen-cake maciejwojcik86 mvanhorn twiddles maxmilian mrbob-git MuataSr Neutralmilkzzz nblondiau omdv rbankole orrinwitt pjperez pve PeterDaveHello Molunerfinn power88 srajasimman groudas RohitDayanand katafractari rudy-of-the-corner

Thanks for visiting ✨ nanobot!

Views