HKUDS/nanobotPublic

Ultra-lightweight, open-source, self-hosted personal AI agent framework in Python with WebUI, tools, memory, MCP, multi-agent workflows, automation, and chat apps

AI summary: An ultra-lightweight, self-hosted Python framework for running persistent personal AI agents with native MCP support.

Stars
48.8K
+59 today
Forks
8.6K
Watchers
218
Open issues
216
Open PRs
575
Contributors
~456
Commits
4.6K
Branches
53

PythonMITCreated Feb 1, 2026Last push 1d agoLatest release v0.3.5+198 stars this week+1.1K this month

Quick answers

What is nanobot?
An ultra-lightweight, self-hosted Python framework for running persistent personal AI agents with native MCP support.
What does nanobot do?
Nanobot provides a minimalist framework for building and running personal AI agents locally or on a private server. It features a built-in WebUI and terminal interface, allowing users to interact with their agents seamlessly. The framework deeply integrates the Model Context Protocol (MCP), enabling agents to securely access local files, shell environments, and web tools. It maintains persistent long-term memory and session history, ensuring context survives between interactions. With its OpenAI-compatible API and broad chat app integrations, it serves as a versatile, private alternative to commercial agent platforms.
Who is nanobot for?
Python developers and self-hosting enthusiasts who want a private, highly customizable AI agent framework. It is ideal for users needing deep local integrations via MCP and persistent memory without relying on third-party cloud platforms.
How do I get started with nanobot?
curl -fsSL https://raw.githubusercontent.com/HKUDS/nanobot/main/scripts/install.sh | sh
How popular is nanobot on GitHub?
HKUDS/nanobot has 48,762 stars and 8,600 forks on GitHub, and gained 198 stars in the last 7 days.
What license does nanobot use?
HKUDS/nanobot is released under the MIT license.

Star history

since Jul 28, 2026
020K40KJul 2026Aug 2026Sep 2026Oct 2026
48.8K stars as of Oct 3, 2026. Measured daily since Jul 28, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

commits per day, last 52 weeks
SepOctNovDecJanFebMarAprMayJunJulAugSepMonWedFri2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 25 commits2026-02-02: 30 commits2026-02-03: 18 commits2026-02-04: 15 commits2026-02-05: 14 commits2026-02-06: 21 commits2026-02-07: 12 commits2026-02-08: 24 commits2026-02-09: 19 commits2026-02-10: 42 commits2026-02-11: 10 commits2026-02-12: 18 commits2026-02-13: 19 commits2026-02-14: 13 commits2026-02-15: 9 commits2026-02-16: 15 commits2026-02-17: 18 commits2026-02-18: 20 commits2026-02-19: 14 commits2026-02-20: 45 commits2026-02-21: 25 commits2026-02-22: 19 commits2026-02-23: 16 commits2026-02-24: 24 commits2026-02-25: 12 commits2026-02-26: 12 commits2026-02-27: 14 commits2026-02-28: 24 commits2026-03-01: 16 commits2026-03-02: 8 commits2026-03-03: 11 commits2026-03-04: 16 commits2026-03-05: 23 commits2026-03-06: 28 commits2026-03-07: 15 commits2026-03-08: 21 commits2026-03-09: 10 commits2026-03-10: 11 commits2026-03-11: 24 commits2026-03-12: 23 commits2026-03-13: 31 commits2026-03-14: 11 commits2026-03-15: 13 commits2026-03-16: 24 commits2026-03-17: 13 commits2026-03-18: 13 commits2026-03-19: 7 commits2026-03-20: 20 commits2026-03-21: 9 commits2026-03-22: 10 commits2026-03-23: 19 commits2026-03-24: 18 commits2026-03-25: 13 commits2026-03-26: 7 commits2026-03-27: 11 commits2026-03-28: 2 commits2026-03-29: 17 commits2026-03-30: 13 commits2026-03-31: 24 commits2026-04-01: 26 commits2026-04-02: 27 commits2026-04-03: 13 commits2026-04-04: 23 commits2026-04-05: 19 commits2026-04-06: 44 commits2026-04-07: 37 commits2026-04-08: 27 commits2026-04-09: 15 commits2026-04-10: 18 commits2026-04-11: 13 commits2026-04-12: 16 commits2026-04-13: 18 commits2026-04-14: 25 commits2026-04-15: 20 commits2026-04-16: 24 commits2026-04-17: 23 commits2026-04-18: 23 commits2026-04-19: 26 commits2026-04-20: 19 commits2026-04-21: 17 commits2026-04-22: 26 commits2026-04-23: 10 commits2026-04-24: 12 commits2026-04-25: 15 commits2026-04-26: 17 commits2026-04-27: 27 commits2026-04-28: 14 commits2026-04-29: 12 commits2026-04-30: 11 commits2026-05-01: 22 commits2026-05-02: 2 commits2026-05-03: 12 commits2026-05-04: 6 commits2026-05-05: 8 commits2026-05-06: 16 commits2026-05-07: 13 commits2026-05-08: 11 commits2026-05-09: 25 commits2026-05-10: 6 commits2026-05-11: 9 commits2026-05-12: 25 commits2026-05-13: 20 commits2026-05-14: 14 commits2026-05-15: 26 commits2026-05-16: 31 commits2026-05-17: 18 commits2026-05-18: 18 commits2026-05-19: 18 commits2026-05-20: 22 commits2026-05-21: 16 commits2026-05-22: 15 commits2026-05-23: 17 commits2026-05-24: 11 commits2026-05-25: 5 commits2026-05-26: 2 commits2026-05-27: 5 commits2026-05-28: 6 commits2026-05-29: 19 commits2026-05-30: 10 commits2026-05-31: 20 commits2026-06-01: 29 commits2026-06-02: 22 commits2026-06-03: 13 commits2026-06-04: 10 commits2026-06-05: 10 commits2026-06-06: 8 commits2026-06-07: 9 commits2026-06-08: 8 commits2026-06-09: 14 commits2026-06-10: 32 commits2026-06-11: 17 commits2026-06-12: 27 commits2026-06-13: 9 commits2026-06-14: 20 commits2026-06-15: 35 commits2026-06-16: 26 commits2026-06-17: 12 commits2026-06-18: 33 commits2026-06-19: 11 commits2026-06-20: 10 commits2026-06-21: 22 commits2026-06-22: 25 commits2026-06-23: 19 commits2026-06-24: 24 commits2026-06-25: 13 commits2026-06-26: 24 commits2026-06-27: 7 commits2026-06-28: 13 commits2026-06-29: 9 commits2026-06-30: 26 commits2026-07-01: 26 commits2026-07-02: 23 commits2026-07-03: 14 commits2026-07-04: 6 commits2026-07-05: 12 commits2026-07-06: 6 commits2026-07-07: 27 commits2026-07-08: 20 commits2026-07-09: 11 commits2026-07-10: 27 commits2026-07-11: 14 commits2026-07-12: 3 commits2026-07-13: 18 commits2026-07-14: 21 commits2026-07-15: 15 commits2026-07-16: 12 commits2026-07-17: 9 commits2026-07-18: 8 commits2026-07-19: 11 commits2026-07-20: 7 commits2026-07-21: 14 commits2026-07-22: 22 commits2026-07-23: 30 commits2026-07-24: 21 commits2026-07-25: 18 commits2026-07-26: 15 commits2026-07-27: 27 commits2026-07-28: 38 commits2026-07-29: 10 commits2026-07-30: 9 commits2026-07-31: 7 commits2026-08-01: 6 commits2026-08-02: 16 commits2026-08-03: 19 commits2026-08-04: 17 commits2026-08-05: 7 commits2026-08-06: 15 commits2026-08-07: 24 commits2026-08-08: 6 commits2026-08-09: 3 commits2026-08-10: 14 commits2026-08-11: 16 commits2026-08-12: 32 commits2026-08-13: 22 commits2026-08-14: 18 commits2026-08-15: 16 commits2026-08-16: 26 commits2026-08-17: 41 commits2026-08-18: 13 commits2026-08-19: 30 commits2026-08-20: 8 commits2026-08-21: 21 commits2026-08-22: 9 commits2026-08-23: 21 commits2026-08-24: 8 commits2026-08-25: 24 commits2026-08-26: 12 commits2026-08-27: 10 commits2026-08-28: 8 commits2026-08-29: 13 commits2026-08-30: 8 commits2026-08-31: 9 commits2026-09-01: 5 commits2026-09-02: 20 commits2026-09-03: 12 commits2026-09-04: 7 commits2026-09-05: 5 commits2026-09-06: 8 commits2026-09-07: 15 commits2026-09-08: 19 commits2026-09-09: 11 commits2026-09-10: 12 commits2026-09-11: 20 commits2026-09-12: 5 commits2026-09-13: 14 commits2026-09-14: 12 commits2026-09-15: 12 commits2026-09-16: 11 commits2026-09-17: 5 commits2026-09-18: 9 commits2026-09-19: 22 commits2026-09-20: 18 commits2026-09-21: 11 commits2026-09-22: 11 commits2026-09-23: 20 commits2026-09-24: 32 commits2026-09-25: 4 commits2026-09-26: 0 commits
3,943 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Widely adopted

    48,762 stars

  • Very active

    3,943 commits in 52 weeks

  • Community-driven

    ~456 contributors

  • Permissive license

    MIT

  • Continuous integration

    Automated checks passing

  • Repeat trending

    25 trending appearances

What nanobot does

Nanobot provides a minimalist framework for building and running personal AI agents locally or on a private server. It features a built-in WebUI and terminal interface, allowing users to interact with their agents seamlessly. The framework deeply integrates the Model Context Protocol (MCP), enabling agents to securely access local files, shell environments, and web tools. It maintains persistent long-term memory and session history, ensuring context survives between interactions. With its OpenAI-compatible API and broad chat app integrations, it serves as a versatile, private alternative to commercial agent platforms.

Python developers and self-hosting enthusiasts who want a private, highly customizable AI agent framework. It is ideal for users needing deep local integrations via MCP and persistent memory without relying on third-party cloud platforms.

  • Ultra-lightweight core: Designed for fast, efficient execution on local hardware without the bloat of large commercial agent frameworks.
  • Native MCP integration: Connects securely to Model Context Protocol servers to access databases, APIs, and local files.
  • Persistent memory system: Utilizes long-term memory storage to ensure agents remember context and goals across multiple sessions.
  • Broad chat integrations: Connects seamlessly to Telegram, Discord, Slack, and WeChat for ubiquitous access to your personal agent.
  • OpenAI-compatible API: Exposes a standard API endpoint, allowing the agent to function as a drop-in replacement in existing AI pipelines.
  • Scheduled automations: Supports cron-based triggers for running long-horizon goals and automated tasks in the background.

Where teams use it

Private personal assistant

Deploy a self-hosted agent to manage local files and answer questions without sending sensitive data to external cloud providers.

Automated ChatOps

Connect the agent to Discord or Slack to autonomously manage server infrastructure and respond to team queries.

Scheduled data research

Configure cron-based tasks for the agent to scrape websites and generate daily summary reports automatically.

Local pipeline testing

Use the OpenAI-compatible API to test complex multi-agent applications locally before deploying expensive production models.

Getting started: curl -fsSL https://raw.githubusercontent.com/HKUDS/nanobot/main/scripts/install.sh | sh

README

main branch
nanobot README cover

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
Install quickly and get one CLI reply Install and Quick Start
Open the bundled browser UI WebUI
Connect Telegram, Discord, WeChat, Slack, Email, Mattermost, Linear, or another channel Chat Apps
Configure providers, fallback models, Langfuse, MCP, web tools, or security Docs and Configuration
Understand or extend the internals Architecture and Development
Deploy to the cloud or keep nanobot running as a service Deployment

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, Linear, and other channels
  • 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, Mattermost, and Linear.
  • 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 are only needed for a source install. Published packages include the WebUI, and supported platform wheels also include the native TUI. A source-distribution install can 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 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. 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.

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

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.

Platform wheels include both the WebUI and the native terminal UI: macOS 13+ (Apple Silicon and Intel), glibc 2.17+ Linux (ARM64 and x64), and Windows x64. The x64 runtime requires SSE4.2. Pip selects the matching wheel; opening the TUI does not need a separate GitHub download or Bun installation. A source-distribution install on a supported target can use the matching checksummed GitHub release archive. On other platforms, use nanobot --classic or the WebUI.

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.

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:

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.

Verify the install:

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

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. 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

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.

nanobot gateway status
nanobot gateway logs
nanobot gateway restart
nanobot gateway stop

Prefer a gateway-first workflow?

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.

Prefer to work entirely in the terminal?

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.
  • Paste clipboard images with Ctrl+V or Alt+V, and use $ to complete skill references.
  • Use /diff to inspect file changes, /context to inspect session context, or /branch to continue from a completed reply in a new 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 for session branching, diffs, history, shortcuts, gateway lifecycle, and compatibility options.

For one request and an immediate exit, use:

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, WebUI, or Troubleshooting.

If nanobot worked for you, a star on GitHub is the simplest way to support the project.

☁️ Deploy

Render — one click

Deploy nanobot's gateway and bundled WebUI from the repository's ready-to-use Blueprint:

Deploy to Render

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 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. Start it with nanobot webui.

The screenshots below use example conversations, illustrative token counts, and paused schedules.

nanobot WebUI new-topic screen with the hero composer, workspace access, project, and model controls

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.

Keep related work side by side

Group up to four conversations and arrange them in columns, rows, a grid, or a main pane with supporting panes. Each topic keeps its own history. Select another topic from the @ menu, or drag it into the composer, to let the agent read its context and coordinate work across sessions.

Three conversations in one workbench: a release plan beside quick-start work and documentation review

Choose a project, access mode, and model for each task. Attach documents or images, then send follow-ups immediately or queue them for the next response. Explore topics and panes →

Inspect the work and its context

Expand agent activity to see reasoning, tool calls, and file changes. Switch Settings → Appearance → File edit display to Diff for inline patches. The composer's context indicator shows the current context size, input tokens by round, and cache reuse when the provider reports it.

An expanded file-edit diff above the context usage chart, with input tokens and cache reuse shown across four rounds

Context compaction also appears in the conversation timeline. Explore activity and context →

Bring your tools into the conversation

Use Apps to connect MCP servers, enable Agent Plugins, and manage local CLI App adapters. Add a preset or a custom server, then attach an available tool with @. Skills provide reusable instructions; Settings holds model, voice, image, web, and chat-channel setup.

The Apps MCP catalog with integration presets and controls to add or import a custom MCP server

Explore Apps → · Discover Skills → · Connect chat apps →

Let recurring work run on a schedule

Ask for an automation from the topic that should receive its results. Use Tasks to review and manage schedules, or Calendar to scan completed and upcoming runs by date. Local triggers let a script start a saved task on demand.

The Automations calendar with completed and upcoming recurring tasks arranged by date

Keep the gateway running for scheduled delivery. Explore Automations →

For a conversation that should stay out of saved topic history and long-term memory, use Temporary chat from the header. Temporary chats end when the connection closes and use the default workspace in Restricted mode.

See the WebUI guide for LAN access, background operation, workspace controls, and the full feature tour. Working on the frontend itself? Use 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 for the latest features and GitHub development version, or visit nanobot.wiki for the stable release documentation.

Releases

Latest release: v0.3.5

v0.3.5 brings the workbench to the terminal and makes conversations easier to continue across the browser, terminal, and chat apps.

  • Use the native terminal workbench with the same gateway and saved conversations as the WebUI.
  • Arrange up to four browser conversations side by side, mention saved sessions, or open a temporary chat.
  • Inspect per-round context usage and compaction progress, with more durable history and recovery.
  • Discover Skills, connect Apps, and manage scheduled work through expanded WebUI flows.

Read the v0.3.5 release notes and upgrade notes

Recent Updates

  • 2026-09-19 🔎 Searchable provider setup, consistent provider identities, and smoother Linear onboarding.
  • 2026-09-18 ♻️ Clearer recovery for interrupted work and Discord reply-context support.
  • 2026-09-16 📦 Platform wheels bundle the version-matched native terminal UI.
  • 2026-09-15 🚀 Released v0.3.5 with a shared terminal workbench, multi-pane WebUI, and visible context continuity.
  • 2026-09-07 🔌 WeCom media uploads use the SDK API, and CI skips unrelated jobs.

For earlier updates, see the release archive or GitHub 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.

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

Recent activity

commits and pull requests

Releases and announcements

20 total
  1. v0.3.5v0.3.5Sep 15, 2026315 downloads

    🐈 **nanobot `v0.3.5`** brings the workbench to the terminal — and makes conversations easier to continue across the browser, terminal, and chat apps. The headline is **one agent, more places to work**. Run `nanobot` for the native terminal client or `nanobot webui` for the browser. Both use the same gateway and saved WebSocket conversations. Terminal sessions can be resumed, forked, inspected, and detached without building a separate agent runtime. The browser workbench has grown around real multitasking: grouped conversation panes, temporary chats, persistent sidebar ordering, session mentions, a skills marketplace, portable Agent Plugins, and browser OAuth for remote MCP servers. Automations now have task and calendar views, clearer scheduling controls, and per-run replies. Mobile composition, settings, context charts, app logos, and branded mentions received another round of focused polish. The other story is **continuity you can inspect**. Context usage and compaction are visible, interrupted work has clearer recovery controls, and session history is more durable across pagination, reconnects, and upgrades. This release also tightens attachment, process, workspace, and emai

  2. v0.3.0v0.3.0Jul 25, 2026

    🐈 **nanobot `v0.3.0`** is here: **260 PRs merged and 38 new contributors**. The agent gained agency. The fastest way to experience the release is one command: ```bash nanobot webui ``` It prepares the local WebUI, starts the gateway, and opens the browser workbench. On a fresh install, guided setup helps you choose a provider and configure access without beginning in a JSON file. The published package already includes the WebUI, so there is no separate frontend build. The product story is **a WebUI that now feels like the front door to nanobot**. Chats read as topics; documents, quoted follow-ups, multimodal tool results, file diffs, code previews, and model fallback are visible in the conversation. Model presets can be switched from the composer, native desktop hosts can open a system folder picker, settings work better across narrow screens and dark mode, and the interface now includes Brazilian Portuguese plus substantially improved Traditional Chinese. Underneath that experience is **agency with boundaries**. nanobot can consult inline subagents, carry explicitly authorized work through verification, route turn state through a clearer runtime context, and swit

  3. v0.2.2v0.2.2Jun 23, 2026

    🐈 **nanobot `v0.2.2`** is here — 140 PRs merged, 21 new contributors. The agent got sturdier! The headline is **durability**. WebUI conversations now survive more of real life: transcripts are segmented instead of living in one fragile file, forked chats preserve replies more reliably, active turns scroll and replay more predictably, startup paths block less, and gateway shutdown is much calmer. Long sessions, stale providers, slow routes, broken config files, malformed history, stream stalls, and empty provider responses all got less likely to derail the work. The second story is **nanobot becoming a real Python runtime**. The SDK is no longer just a thin convenience layer around the agent loop: concurrent `run()` calls are isolated, hooks are cleaner, MCP lifecycle handling is safer, runtime controls are broader, and the docs now teach the SDK from first principles. If you want to embed nanobot inside your own application, `v0.2.2` is the first release where that path feels intentional. The third story is **the workbench getting broader and easier to live in**. The WebUI gained automation management, prompt navigation, token usage visibility, mobile polish, better updat

  4. v0.2.1v0.2.1Jun 1, 2026

    🐈 **nanobot `v0.2.1`** is here — 84 PRs merged, 17 new contributors. The agent got a real workbench. The headline is the **WebUI becoming the place where work actually happens**. The chat surface is smoother, faster, and easier to trust: live file edits show up as activity, tool traces render more cleanly, source links get readable favicons, markdown and code blocks behave better, new chats survive refreshes, and Thought / response ordering now matches the model's real turn structure. Settings, sidebar controls, model switching, context-window control, slash commands, project workspaces, and access modes all moved closer to a single coherent control surface. The second story is **long-running work getting more durable**. Sustained goals no longer trip the runner, goal iteration budget is higher, session locks prevent overlapping turns from stepping on each other, AutoCompact and consolidation races were fixed, heartbeat moved onto cron, and session archive retention got several data-loss fixes. In practice, this means fewer mysterious interruptions, fewer duplicate archives, and a much better chance that a long agent workflow keeps its thread of intent. The third story is

  5. v0.2.0v0.2.0May 16, 2026

    🐈 **nanobot `v0.2.0`** is here 🎉 — 105 PRs merged, 20 new contributors. The agent learned to hold a goal. The headline is `/goal`. Mark a thread as a sustained objective with `long_task`, and the active goal stays pinned in Runtime Context every turn — surviving compaction, surviving long tool chains, surviving the model's own forgetfulness — until you call `complete_goal`. The wall-clock timeout widens automatically while a goal is active; streaming requests fall back to an idle timeout instead of a hard wall, so a model that's still thinking doesn't get killed mid-thought. The second story is the **WebUI growing up**. After several releases as a source-only preview, it now ships **inside the wheel** — `pip install nanobot-ai` and you have it. Settings and BYOK got a full redesign, the slash palette is localized, LAN access is gated by a token, reasoning streams live to the chat, and a brand-new image-generation tool turns "draw me X" into an inline preview without leaving the conversation. The third story is **the engine room**. The agent loop got a real refactor — `AgentLoop.from_config()` for clean embedding, `_process_message` rewritten as a functional state machine

Code frequency

additions and deletions
+92.6K-92.6KWeek of 2026-02-01: +18,542 linesWeek of 2026-02-01: -7,580 linesWeek of 2026-02-08: +14,599 linesWeek of 2026-02-08: -7,778 linesWeek of 2026-02-15: +4,473 linesWeek of 2026-02-15: -3,038 linesWeek of 2026-02-22: +4,410 linesWeek of 2026-02-22: -3,748 linesWeek of 2026-03-01: +7,176 linesWeek of 2026-03-01: -2,783 linesWeek of 2026-03-08: +13,828 linesWeek of 2026-03-08: -6,068 linesWeek of 2026-03-15: +8,070 linesWeek of 2026-03-15: -2,282 linesWeek of 2026-03-22: +22,876 linesWeek of 2026-03-22: -15,922 linesWeek of 2026-03-29: +19,723 linesWeek of 2026-03-29: -5,509 linesWeek of 2026-04-05: +18,246 linesWeek of 2026-04-05: -3,952 linesWeek of 2026-04-12: +18,841 linesWeek of 2026-04-12: -1,794 linesWeek of 2026-04-19: +24,646 linesWeek of 2026-04-19: -5,236 linesWeek of 2026-04-26: +9,987 linesWeek of 2026-04-26: -1,600 linesWeek of 2026-05-03: +19,294 linesWeek of 2026-05-03: -8,922 linesWeek of 2026-05-10: +24,923 linesWeek of 2026-05-10: -8,015 linesWeek of 2026-05-17: +33,042 linesWeek of 2026-05-17: -6,237 linesWeek of 2026-05-24: +33,314 linesWeek of 2026-05-24: -8,131 linesWeek of 2026-05-31: +27,366 linesWeek of 2026-05-31: -6,788 linesWeek of 2026-06-07: +21,989 linesWeek of 2026-06-07: -8,224 linesWeek of 2026-06-14: +11,901 linesWeek of 2026-06-14: -3,721 linesWeek of 2026-06-21: +14,076 linesWeek of 2026-06-21: -3,673 linesWeek of 2026-06-28: +16,908 linesWeek of 2026-06-28: -3,857 linesWeek of 2026-07-05: +16,450 linesWeek of 2026-07-05: -6,734 linesWeek of 2026-07-12: +26,504 linesWeek of 2026-07-12: -4,068 linesWeek of 2026-07-19: +92,623 linesWeek of 2026-07-19: -59,525 linesWeek of 2026-07-26: +40,822 linesWeek of 2026-07-26: -10,439 linesWeek of 2026-08-02: +22,111 linesWeek of 2026-08-02: -8,074 linesWeek of 2026-08-09: +62,406 linesWeek of 2026-08-09: -26,756 linesWeek of 2026-08-16: +42,673 linesWeek of 2026-08-16: -20,513 linesWeek of 2026-08-23: +21,149 linesWeek of 2026-08-23: -7,656 linesWeek of 2026-08-30: +11,765 linesWeek of 2026-08-30: -5,301 linesWeek of 2026-09-06: +43,364 linesWeek of 2026-09-06: -15,678 linesWeek of 2026-09-13: +13,440 linesWeek of 2026-09-13: -3,875 linesWeek of 2026-09-20: +21,635 linesWeek of 2026-09-20: -10,492 linesFeb 1, 2026Sep 20, 2026
+803.2K lines added, -304K removed over the last year.

Commits per week

last 52 weeks
1730Week of 2025-09-27: 0 commitsWeek of 2025-10-04: 0 commitsWeek of 2025-10-11: 0 commitsWeek of 2025-10-18: 0 commitsWeek of 2025-10-25: 0 commitsWeek of 2025-11-01: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 135 commitsWeek of 2026-02-08: 145 commitsWeek of 2026-02-15: 146 commitsWeek of 2026-02-22: 121 commitsWeek of 2026-03-01: 117 commitsWeek of 2026-03-08: 131 commitsWeek of 2026-03-15: 99 commitsWeek of 2026-03-22: 80 commitsWeek of 2026-03-29: 143 commitsWeek of 2026-04-05: 173 commitsWeek of 2026-04-12: 149 commitsWeek of 2026-04-19: 125 commitsWeek of 2026-04-26: 105 commitsWeek of 2026-05-03: 91 commitsWeek of 2026-05-10: 131 commitsWeek of 2026-05-17: 124 commitsWeek of 2026-05-24: 58 commitsWeek of 2026-05-31: 112 commitsWeek of 2026-06-07: 116 commitsWeek of 2026-06-14: 147 commitsWeek of 2026-06-21: 134 commitsWeek of 2026-06-28: 117 commitsWeek of 2026-07-05: 117 commitsWeek of 2026-07-12: 86 commitsWeek of 2026-07-19: 123 commitsWeek of 2026-07-26: 112 commitsWeek of 2026-08-02: 104 commitsWeek of 2026-08-09: 121 commitsWeek of 2026-08-16: 148 commitsWeek of 2026-08-23: 96 commitsWeek of 2026-08-30: 66 commitsWeek of 2026-09-06: 90 commitsWeek of 2026-09-13: 85 commitsWeek of 2026-09-20: 96 commitsSep 27, 2025Sep 20, 2026
3.9K commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 32 commitsSun 1:00 — 9 commitsSun 2:00 — 15 commitsSun 3:00 — 10 commitsSun 4:00 — 5 commitsSun 5:00 — 7 commitsSun 6:00 — 7 commitsSun 7:00 — 10 commitsSun 8:00 — 8 commitsSun 9:00 — 13 commitsSun 10:00 — 9 commitsSun 11:00 — 10 commitsSun 12:00 — 20 commitsSun 13:00 — 24 commitsSun 14:00 — 21 commitsSun 15:00 — 48 commitsSun 16:00 — 38 commitsSun 17:00 — 42 commitsSun 18:00 — 29 commitsSun 19:00 — 26 commitsSun 20:00 — 29 commitsSun 21:00 — 36 commitsSun 22:00 — 29 commitsSun 23:00 — 41 commitsMon 0:00 — 27 commitsMon 1:00 — 22 commitsMon 2:00 — 14 commitsMon 3:00 — 12 commitsMon 4:00 — 9 commitsMon 5:00 — 14 commitsMon 6:00 — 18 commitsMon 7:00 — 8 commitsMon 8:00 — 19 commitsMon 9:00 — 22 commitsMon 10:00 — 28 commitsMon 11:00 — 53 commitsMon 12:00 — 23 commitsMon 13:00 — 28 commitsMon 14:00 — 31 commitsMon 15:00 — 55 commitsMon 16:00 — 49 commitsMon 17:00 — 38 commitsMon 18:00 — 28 commitsMon 19:00 — 18 commitsMon 20:00 — 13 commitsMon 21:00 — 29 commitsMon 22:00 — 17 commitsMon 23:00 — 18 commitsTue 0:00 — 31 commitsTue 1:00 — 11 commitsTue 2:00 — 9 commitsTue 3:00 — 18 commitsTue 4:00 — 7 commitsTue 5:00 — 9 commitsTue 6:00 — 6 commitsTue 7:00 — 16 commitsTue 8:00 — 31 commitsTue 9:00 — 20 commitsTue 10:00 — 29 commitsTue 11:00 — 52 commitsTue 12:00 — 27 commitsTue 13:00 — 41 commitsTue 14:00 — 47 commitsTue 15:00 — 54 commitsTue 16:00 — 50 commitsTue 17:00 — 51 commitsTue 18:00 — 36 commitsTue 19:00 — 22 commitsTue 20:00 — 9 commitsTue 21:00 — 26 commitsTue 22:00 — 28 commitsTue 23:00 — 24 commitsWed 0:00 — 31 commitsWed 1:00 — 23 commitsWed 2:00 — 15 commitsWed 3:00 — 9 commitsWed 4:00 — 11 commitsWed 5:00 — 3 commitsWed 6:00 — 6 commitsWed 7:00 — 14 commitsWed 8:00 — 13 commitsWed 9:00 — 35 commitsWed 10:00 — 42 commitsWed 11:00 — 35 commitsWed 12:00 — 17 commitsWed 13:00 — 37 commitsWed 14:00 — 51 commitsWed 15:00 — 56 commitsWed 16:00 — 42 commitsWed 17:00 — 36 commitsWed 18:00 — 36 commitsWed 19:00 — 16 commitsWed 20:00 — 18 commitsWed 21:00 — 19 commitsWed 22:00 — 18 commitsWed 23:00 — 35 commitsThu 0:00 — 31 commitsThu 1:00 — 13 commitsThu 2:00 — 12 commitsThu 3:00 — 12 commitsThu 4:00 — 11 commitsThu 5:00 — 8 commitsThu 6:00 — 13 commitsThu 7:00 — 7 commitsThu 8:00 — 9 commitsThu 9:00 — 12 commitsThu 10:00 — 30 commitsThu 11:00 — 41 commitsThu 12:00 — 12 commitsThu 13:00 — 36 commitsThu 14:00 — 43 commitsThu 15:00 — 46 commitsThu 16:00 — 44 commitsThu 17:00 — 41 commitsThu 18:00 — 22 commitsThu 19:00 — 15 commitsThu 20:00 — 10 commitsThu 21:00 — 21 commitsThu 22:00 — 20 commitsThu 23:00 — 22 commitsFri 0:00 — 26 commitsFri 1:00 — 16 commitsFri 2:00 — 7 commitsFri 3:00 — 19 commitsFri 4:00 — 10 commitsFri 5:00 — 9 commitsFri 6:00 — 8 commitsFri 7:00 — 13 commitsFri 8:00 — 20 commitsFri 9:00 — 33 commitsFri 10:00 — 31 commitsFri 11:00 — 47 commitsFri 12:00 — 22 commitsFri 13:00 — 37 commitsFri 14:00 — 48 commitsFri 15:00 — 53 commitsFri 16:00 — 43 commitsFri 17:00 — 46 commitsFri 18:00 — 40 commitsFri 19:00 — 15 commitsFri 20:00 — 5 commitsFri 21:00 — 20 commitsFri 22:00 — 21 commitsFri 23:00 — 20 commitsSat 0:00 — 19 commitsSat 1:00 — 22 commitsSat 2:00 — 7 commitsSat 3:00 — 9 commitsSat 4:00 — 8 commitsSat 5:00 — 9 commitsSat 6:00 — 8 commitsSat 7:00 — 12 commitsSat 8:00 — 23 commitsSat 9:00 — 7 commitsSat 10:00 — 12 commitsSat 11:00 — 31 commitsSat 12:00 — 22 commitsSat 13:00 — 17 commitsSat 14:00 — 21 commitsSat 15:00 — 33 commitsSat 16:00 — 24 commitsSat 17:00 — 35 commitsSat 18:00 — 17 commitsSat 19:00 — 19 commitsSat 20:00 — 12 commitsSat 21:00 — 22 commitsSat 22:00 — 18 commitsSat 23:00 — 25 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.
DateListRankStars gained
Mar 9, 2026daily#22+151
Feb 26, 2026daily#23+170
Feb 24, 2026daily#17+178
Feb 23, 2026daily#24+123
Feb 22, 2026daily#16+210
Feb 21, 2026daily#19+166
Feb 20, 2026daily#23+111
Feb 19, 2026daily#18+137
Feb 18, 2026daily#20+144
Feb 17, 2026daily#15+170
Feb 16, 2026daily#8+227
Feb 15, 2026daily#15+225
Feb 14, 2026daily#11+202
Feb 13, 2026daily#12+155
Feb 12, 2026daily#6+233