โญ 15933 Stars ๐Ÿด 2247 Forks ๐Ÿ‘€ 15933 Watchers Python mit
GitHub ้“พๆŽฅhttps://github.com/HKUDS/nanobot
้กน็›ฎ็ฎ€ไป‹"๐Ÿˆ nanobot: The Ultra-Lightweight OpenClaw"
ๅˆ›ๅปบๆ—ถ้—ด2026-02-01
ๆ›ดๆ–ฐๆ—ถ้—ด2026-02-11
๐Ÿ“– README English
<div align="center"> <img src="nanobot_logo.png" alt="nanobot" width="500"> <h1>nanobot: Ultra-Lightweight Personal AI Assistant</h1> <p> <a href="https://pypi.org/project/nanobot-ai/"><img src="https://img.shields.io/pypi/v/nanobot-ai" alt="PyPI"></a> <a href="https://pepy.tech/project/nanobot-ai"><img src="https://static.pepy.tech/badge/nanobot-ai" alt="Downloads"></a> <img src="https://img.shields.io/badge/python-โ‰ฅ3.11-blue" alt="Python"> <img src="https://img.shields.io/badge/license-MIT-green" alt="License"> <a href="./COMMUNICATION.md"><img src="https://img.shields.io/badge/Feishu-Group-E9DBFC?style=flat&logo=feishu&logoColor=white" alt="Feishu"></a> <a href="./COMMUNICATION.md"><img src="https://img.shields.io/badge/WeChat-Group-C5EAB4?style=flat&logo=wechat&logoColor=white" alt="WeChat"></a> <a href="https://discord.gg/MnCvHqpUGB"><img src="https://img.shields.io/badge/Discord-Community-5865F2?style=flat&logo=discord&logoColor=white" alt="Discord"></a> </p> </div> ๐Ÿˆ **nanobot** is an **ultra-lightweight** personal AI assistant inspired by [OpenClaw](https://github.com/openclaw/openclaw) โšก๏ธ Delivers core agent functionality in just **~4,000** lines of code โ€” **99% smaller** than Clawdbot's 430k+ lines. ๐Ÿ“ Real-time line count: **3,510 lines** (run `bash core_agent_lines.sh` to verify anytime) ## ๐Ÿ“ข News - **2026-02-10** ๐ŸŽ‰ Released v0.1.3.post6 with improvements! Check the updates [notes](https://github.com/HKUDS/nanobot/releases/tag/v0.1.3.post6) and our [roadmap](https://github.com/HKUDS/nanobot/discussions/431). - **2026-02-09** ๐Ÿ’ฌ Added Slack, Email, and QQ support โ€” nanobot now supports multiple chat platforms! - **2026-02-08** ๐Ÿ”ง Refactored Providersโ€”adding a new LLM provider now takes just 2 simple steps! Check [here](#providers). - **2026-02-07** ๐Ÿš€ Released v0.1.3.post5 with Qwen support & several key improvements! Check [here](https://github.com/HKUDS/nanobot/releases/tag/v0.1.3.post5) for details. - **2026-02-06** โœจ Added Moonshot/Kimi provider, Discord integration, and enhanced security hardening! - **2026-02-05** โœจ Added Feishu channel, DeepSeek provider, and enhanced scheduled tasks support! - **2026-02-04** ๐Ÿš€ Released v0.1.3.post4 with multi-provider & Docker support! Check [here](https://github.com/HKUDS/nanobot/releases/tag/v0.1.3.post4) for details. - **2026-02-03** โšก Integrated vLLM for local LLM support and improved natural language task scheduling! - **2026-02-02** ๐ŸŽ‰ nanobot officially launched! Welcome to try ๐Ÿˆ nanobot! ## Key Features of nanobot: ๐Ÿชถ **Ultra-Lightweight**: Just ~4,000 lines of core agent code โ€” 99% smaller than Clawdbot. ๐Ÿ”ฌ **Research-Ready**: Clean, readable code that's easy to understand, modify, and extend for research. โšก๏ธ **Lightning Fast**: Minimal footprint means faster startup, lower resource usage, and quicker iterations. ๐Ÿ’Ž **Easy-to-Use**: One-click to deploy and you're ready to go. ## ๐Ÿ—๏ธ Architecture <p align="center"> <img src="nanobot_arch.png" alt="nanobot architecture" width="800"> </p> ## โœจ Features <table align="center"> <tr align="center"> <th><p align="center">๐Ÿ“ˆ 24/7 Real-Time Market Analysis</p></th> <th><p align="center">๐Ÿš€ Full-Stack Software Engineer</p></th> <th><p align="center">๐Ÿ“… Smart Daily Routine Manager</p></th> <th><p align="center">๐Ÿ“š Personal Knowledge Assistant</p></th> </tr> <tr> <td align="center"><p align="center"><img src="case/search.gif" width="180" height="400"></p></td> <td align="center"><p align="center"><img src="case/code.gif" width="180" height="400"></p></td> <td align="center"><p align="center"><img src="case/scedule.gif" width="180" height="400"></p></td> <td align="center"><p align="center"><img src="case/memory.gif" width="180" height="400"></p></td> </tr> <tr> <td align="center">Discovery โ€ข Insights โ€ข Trends</td> <td align="center">Develop โ€ข Deploy โ€ข Scale</td> <td align="center">Schedule โ€ข Automate โ€ข Organize</td> <td align="center">Learn โ€ข Memory โ€ข Reasoning</td> </tr> </table> ## ๐Ÿ“ฆ Install **Install from source** (latest features, recommended for development) ```bash git clone https://github.com/HKUDS/nanobot.git cd nanobot pip install -e . ``` **Install with [uv](https://github.com/astral-sh/uv)** (stable, fast) ```bash uv tool install nanobot-ai ``` **Install from PyPI** (stable) ```bash pip install nanobot-ai ``` ## ๐Ÿš€ Quick Start > [!TIP] > Set your API key in `~/.nanobot/config.json`. > Get API keys: [OpenRouter](https://openrouter.ai/keys) (Global) ยท [Brave Search](https://brave.com/search/api/) (optional, for web search) **1. Initialize** ```bash nanobot onboard ``` **2. Configure** (`~/.nanobot/config.json`) For OpenRouter - recommended for global users: ```json { "providers": { "openrouter": { "apiKey": "sk-or-v1-xxx" } }, "agents": { "defaults": { "model": "anthropic/claude-opus-4-5" } } } ``` **3. Chat** ```bash nanobot agent -m "What is 2+2?" ``` That's it! You have a working AI assistant in 2 minutes. ## ๐Ÿ–ฅ๏ธ Local Models (vLLM) Run nanobot with your own local models using vLLM or any OpenAI-compatible server. **1. Start your vLLM server** ```bash vllm serve meta-llama/Llama-3.1-8B-Instruct --port 8000 ``` **2. Configure** (`~/.nanobot/config.json`) ```json { "providers": { "vllm": { "apiKey": "dummy", "apiBase": "http://localhost:8000/v1" } }, "agents": { "defaults": { "model": "meta-llama/Llama-3.1-8B-Instruct" } } } ``` **3. Chat** ```bash nanobot agent -m "Hello from my local LLM!" ``` > [!TIP] > The `apiKey` can be any non-empty string for local servers that don't require authentication. ## ๐Ÿ’ฌ Chat Apps Talk to your nanobot through Telegram, Discord, WhatsApp, Feishu, Mochat, DingTalk, Slack, Email, or QQ โ€” anytime, anywhere. | Channel | Setup | |---------|-------| | **Telegram** | Easy (just a token) | | **Discord** | Easy (bot token + intents) | | **WhatsApp** | Medium (scan QR) | | **Feishu** | Medium (app credentials) | | **Mochat** | Medium (claw token + websocket) | | **DingTalk** | Medium (app credentials) | | **Slack** | Medium (bot + app tokens) | | **Email** | Medium (IMAP/SMTP credentials) | | **QQ** | Easy (app credentials) | <details> <summary><b>Telegram</b> (Recommended)</summary> **1. Create a bot** - Open Telegram, search `@BotFather` - Send `/newbot`, follow prompts - Copy the token **2. Configure** ```json { "channels": { "telegram": { "enabled": true, "token": "YOUR_BOT_TOKEN", "allowFrom": ["YOUR_USER_ID"] } } } ``` > You can find your **User ID** in Telegram settings. It is shown as `@yourUserId`. > Copy this value **without the `@` symbol** and paste it into the config file. **3. Run** ```bash nanobot gateway ``` </details> <details> <summary><b>Mochat (Claw IM)</b></summary> Uses **Socket.IO WebSocket** by default, with HTTP polling fallback. **1. Ask nanobot to set up Mochat for you** Simply send this message to nanobot (replace `xxx@xxx` with your real email): ``` Read https://raw.githubusercontent.com/HKUDS/MoChat/refs/heads/main/skills/nanobot/skill.md and register on MoChat. My Email account is xxx@xxx Bind me as your owner and DM me on MoChat. ``` nanobot will automatically register, configure `~/.nanobot/config.json`, and connect to Mochat. **2. Restart gateway** ```bash nanobot gateway ``` That's it โ€” nanobot handles the rest! <br> <details> <summary>Manual configuration (advanced)</summary> If you prefer to configure manually, add the following to `~/.nanobot/config.json`: > Keep `claw_token` private. It should only be sent in `X-Claw-Token` header to your Mochat API endpoint. ```json { "channels": { "mochat": { "enabled": true, "base_url": "https://mochat.io", "socket_url": "https://mochat.io", "socket_path": "/socket.io", "claw_token": "claw_xxx", "agent_user_id": "6982abcdef", "sessions": ["*"], "panels": ["*"], "reply_delay_mode": "non-mention", "reply_delay_ms": 120000 } } } ``` </details> </details> <details> <summary><b>Discord</b></summary> **1. Create a bot** - Go to https://discord.com/developers/applications - Create an application โ†’ Bot โ†’ Add Bot - Copy the bot token **2. Enable intents** - In the Bot settings, enable **MESSAGE CONTENT INTENT** - (Optional) Enable **SERVER MEMBERS INTENT** if you plan to use allow lists based on member data **3. Get your User ID** - Discord Settings โ†’ Advanced โ†’ enable **Developer Mode** - Right-click your avatar โ†’ **Copy User ID** **4. Configure** ```json { "channels": { "discord": { "enabled": true, "token": "YOUR_BOT_TOKEN", "allowFrom": ["YOUR_USER_ID"] } } } ``` **5. Invite the bot** - OAuth2 โ†’ URL Generator - Scopes: `bot` - Bot Permissions: `Send Messages`, `Read Message History` - Open the generated invite URL and add the bot to your server **6. Run** ```bash nanobot gateway ``` </details> <details> <summary><b>WhatsApp</b></summary> Requires **Node.js โ‰ฅ18**. **1. Link device** ```bash nanobot channels login # Scan QR with WhatsApp โ†’ Settings โ†’ Linked Devices ``` **2. Configure** ```json { "channels": { "whatsapp": { "enabled": true, "allowFrom": ["+1234567890"] } } } ``` **3. Run** (two terminals) ```bash # Terminal 1 nanobot channels login # Terminal 2 nanobot gateway ``` </details> <details> <summary><b>Feishu (้ฃžไนฆ)</b></summary> Uses **WebSocket** long connection โ€” no public IP required. **1. Create a Feishu bot** - Visit [Feishu Open Platform](https://open.feishu.cn/app) - Create a new app โ†’ Enable **Bot** capability - **Permissions**: Add `im:message` (send messages) - **Events**: Add `im.message.receive_v1` (receive messages) - Select **Long Connection** mode (requires running nanobot first to establish connection) - Get **App ID** and **App Secret** from "Credentials & Basic Info" - Publish the app **2. Configure** ```json { "channels": { "feishu": { "enabled": true, "appId": "cli_xxx", "appSecret": "xxx", "encryptKey": "", "verificationToken": "", "allowFrom": [] } } } ``` > `encryptKey` and `verificationToken` are optional for Long Connection mode. > `allowFrom`: Leave empty to allow all users, or add `["ou_xxx"]` to restrict access. **3. Run** ```bash nanobot gateway ``` > [!TIP] > Feishu uses WebSocket to receive messages โ€” no webhook or public IP needed! </details> <details> <summary><b>QQ (QQๅ•่Š)</b></summary> Uses **botpy SDK** with WebSocket โ€” no public IP required. Currently supports **private messages only**. **1. Register & create bot** - Visit [QQ Open Platform](https://q.qq.com) โ†’ Register as a developer (personal or enterprise) - Create a new bot application - Go to **ๅผ€ๅ‘่ฎพ็ฝฎ (Developer Settings)** โ†’ copy **AppID** and **AppSecret** **2. Set up sandbox for testing** - In the bot management console, find **ๆฒ™็ฎฑ้…็ฝฎ (Sandbox Config)** - Under **ๅœจๆถˆๆฏๅˆ—่กจ้…็ฝฎ**, click **ๆทปๅŠ ๆˆๅ‘˜** and add your own QQ number - Once added, scan the bot's QR code with mobile QQ โ†’ open the bot profile โ†’ tap "ๅ‘ๆถˆๆฏ" to start chatting **3. Configure** > - `allowFrom`: Leave empty for public access, or add user openids to restrict. You can find openids in the nanobot logs when a user messages the bot. > - For production: submit a review in the bot console and publish. See [QQ Bot Docs](https://bot.q.qq.com/wiki/) for the full publishing flow. ```json { "channels": { "qq": { "enabled": true, "appId": "YOUR_APP_ID", "secret": "YOUR_APP_SECRET", "allowFrom": [] } } } ``` **4. Run** ```bash nanobot gateway ``` Now send a message to the bot from QQ โ€” it should respond! </details> <details> <summary><b>DingTalk (้’‰้’‰)</b></summary> Uses **Stream Mode** โ€” no public IP required. **1. Create a DingTalk bot** - Visit [DingTalk Open Platform](https://open-dev.dingtalk.com/) - Create a new app -> Add **Robot** capability - **Configuration**: - Toggle **Stream Mode** ON - **Permissions**: Add necessary permissions for sending messages - Get **AppKey** (Client ID) and **AppSecret** (Client Secret) from "Credentials" - Publish the app **2. Configure** ```json { "channels": { "dingtalk": { "enabled": true, "clientId": "YOUR_APP_KEY", "clientSecret": "YOUR_APP_SECRET", "allowFrom": [] } } } ``` > `allowFrom`: Leave empty to allow all users, or add `["staffId"]` to restrict access. **3. Run** ```bash nanobot gateway ``` </details> <details> <summary><b>Slack</b></summary> Uses **Socket Mode** โ€” no public URL required. **1. Create a Slack app** - Go to [Slack API](https://api.slack.com/apps) โ†’ **Create New App** โ†’ "From scratch" - Pick a name and select your workspace **2. Configure the app** - **Socket Mode**: Toggle ON โ†’ Generate an **App-Level Token** with `connections:write` scope โ†’ copy it (`xapp-...`) - **OAuth & Permissions**: Add bot scopes: `chat:write`, `reactions:write`, `app_mentions:read` - **Event Subscriptions**: Toggle ON โ†’ Subscribe to bot events: `message.im`, `message.channels`, `app_mention` โ†’ Save Changes - **App Home**: Scroll to **Show Tabs** โ†’ Enable **Messages Tab** โ†’ Check **"Allow users to send Slash commands and messages from the messages tab"** - **Install App**: Click **Install to Workspace** โ†’ Authorize โ†’ copy the **Bot Token** (`xoxb-...`) **3. Configure nanobot** ```json { "channels": { "slack": { "enabled": true, "botToken": "xoxb-...", "appToken": "xapp-...", "groupPolicy": "mention" } } } ``` **4. Run** ```bash nanobot gateway ``` DM the bot directly or @mention it in a channel โ€” it should respond! > [!TIP] > - `groupPolicy`: `"mention"` (default โ€” respond only when @mentioned), `"open"` (respond to all channel messages), or `"allowlist"` (restrict to specific channels). > - DM policy defaults to open. Set `"dm": {"enabled": false}` to disable DMs. </details> <details> <summary><b>Email</b></summary> Give nanobot its own email account. It polls **IMAP** for incoming mail and replies via **SMTP** โ€” like a personal email assistant. **1. Get credentials (Gmail example)** - Create a dedicated Gmail account for your bot (e.g. `my-nanobot@gmail.com`) - Enable 2-Step Verification โ†’ Create an [App Password](https://myaccount.google.com/apppasswords) - Use this app password for both IMAP and SMTP **2. Configure** > - `consentGranted` must be `true` to allow mailbox access. This is a safety gate โ€” set `false` to fully disable. > - `allowFrom`: Leave empty to accept emails from anyone, or restrict to specific senders. > - `smtpUseTls` and `smtpUseSsl` default to `true` / `false` respectively, which is correct for Gmail (port 587 + STARTTLS). No need to set them explicitly. > - Set `"autoReplyEnabled": false` if you only want to read/analyze emails without sending automatic replies. ```json { "channels": { "email": { "enabled": true, "consentGranted": true, "imapHost": "imap.gmail.com", "imapPort": 993, "imapUsername": "my-nanobot@gmail.com", "imapPassword": "your-app-password", "smtpHost": "smtp.gmail.com", "smtpPort": 587, "smtpUsername": "my-nanobot@gmail.com", "smtpPassword": "your-app-password", "fromAddress": "my-nanobot@gmail.com", "allowFrom": ["your-real-email@gmail.com"] } } } ``` **3. Run** ```bash nanobot gateway ``` </details> ## โš™๏ธ Configuration Config file: `~/.nanobot/config.json` ### Providers > [!TIP] > - **Groq** provides free voice transcription via Whisper. If configured, Telegram voice messages will be automatically transcribed. > - **Zhipu Coding Plan**: If you're on Zhipu's coding plan, set `"apiBase": "https://open.bigmodel.cn/api/coding/paas/v4"` in your zhipu provider config. > - **MiniMax (Mainland China)**: If your API key is from MiniMax's mainland China platform (minimaxi.com), set `"apiBase": "https://api.minimaxi.com/v1"` in your minimax provider config. | Provider | Purpose | Get API Key | |----------|---------|-------------| | `openrouter` | LLM (recommended, access to all models) | [openrouter.ai](https://openrouter.ai) | | `anthropic` | LLM (Claude direct) | [console.anthropic.com](https://console.anthropic.com) | | `openai` | LLM (GPT direct) | [platform.openai.com](https://platform.openai.com) | | `deepseek` | LLM (DeepSeek direct) | [platform.deepseek.com](https://platform.deepseek.com) | | `groq` | LLM + **Voice transcription** (Whisper) | [console.groq.com](https://console.groq.com) | | `gemini` | LLM (Gemini direct) | [aistudio.google.com](https://aistudio.google.com) | | `minimax` | LLM (MiniMax direct) | [platform.minimax.io](https://platform.minimax.io) | | `aihubmix` | LLM (API gateway, access to all models) | [aihubmix.com](https://aihubmix.com) | | `dashscope` | LLM (Qwen) | [dashscope.console.aliyun.com](https://dashscope.console.aliyun.com) | | `moonshot` | LLM (Moonshot/Kimi) | [platform.moonshot.cn](https://platform.moonshot.cn) | | `zhipu` | LLM (Zhipu GLM) | [open.bigmodel.cn](https://open.bigmodel.cn) | | `vllm` | LLM (local, any OpenAI-compatible server) | โ€” | <details> <summary><b>Adding a New Provider (Developer Guide)</b></summary> nanobot uses a **Provider Registry** (`nanobot/providers/registry.py`) as the single source of truth. Adding a new provider only takes **2 steps** โ€” no if-elif chains to touch. **Step 1.** Add a `ProviderSpec` entry to `PROVIDERS` in `nanobot/providers/registry.py`: ```python ProviderSpec( name="myprovider", # config field name keywords=("myprovider", "mymodel"), # model-name keywords for auto-matching env_key="MYPROVIDER_API_KEY", # env var for LiteLLM display_name="My Provider", # shown in `nanobot status` litellm_prefix="myprovider", # auto-prefix: model โ†’ myprovider/model skip_prefixes=("myprovider/",), # don't double-prefix ) ``` **Step 2.** Add a field to `ProvidersConfig` in `nanobot/config/schema.py`: ```python class ProvidersConfig(BaseModel): ... myprovider: ProviderConfig = ProviderConfig() ``` That's it! Environment variables, model prefixing, config matching, and `nanobot status` display will all work automatically. **Common `ProviderSpec` options:** | Field | Description | Example | |-------|-------------|---------| | `litellm_prefix` | Auto-prefix model names for LiteLLM | `"dashscope"` โ†’ `dashscope/qwen-max` | | `skip_prefixes` | Don't prefix if model already starts with these | `("dashscope/", "openrouter/")` | | `env_extras` | Additional env vars to set | `(("ZHIPUAI_API_KEY", "{api_key}"),)` | | `model_overrides` | Per-model parameter overrides | `(("kimi-k2.5", {"temperature": 1.0}),)` | | `is_gateway` | Can route any model (like OpenRouter) | `True` | | `detect_by_key_prefix` | Detect gateway by API key prefix | `"sk-or-"` | | `detect_by_base_keyword` | Detect gateway by API base URL | `"openrouter"` | | `strip_model_prefix` | Strip existing prefix before re-prefixing | `True` (for AiHubMix) | </details> ### Security > For production deployments, set `"restrictToWorkspace": true` in your config to sandbox the agent. | Option | Default | Description | |--------|---------|-------------| | `tools.restrictToWorkspace` | `false` | When `true`, restricts **all** agent tools (shell, file read/write/edit, list) to the workspace directory. Prevents path traversal and out-of-scope access. | | `channels.*.allowFrom` | `[]` (allow all) | Whitelist of user IDs. Empty = allow everyone; non-empty = only listed users can interact. | ## CLI Reference | Command | Description | |---------|-------------| | `nanobot onboard` | Initialize config & workspace | | `nanobot agent -m "..."` | Chat with the agent | | `nanobot agent` | Interactive chat mode | | `nanobot agent --no-markdown` | Show plain-text replies | | `nanobot agent --logs` | Show runtime logs during chat | | `nanobot gateway` | Start the gateway | | `nanobot status` | Show status | | `nanobot channels login` | Link WhatsApp (scan QR) | | `nanobot channels status` | Show channel status | Interactive mode exits: `exit`, `quit`, `/exit`, `/quit`, `:q`, or `Ctrl+D`. <details> <summary><b>Scheduled Tasks (Cron)</b></summary> ```bash # Add a job nanobot cron add --name "daily" --message "Good morning!" --cron "0 9 * * *" nanobot cron add --name "hourly" --message "Check status" --every 3600 # List jobs nanobot cron list # Remove a job nanobot cron remove <job_id> ``` </details> ## ๐Ÿณ Docker > [!TIP] > The `-v ~/.nanobot:/root/.nanobot` flag mounts your local config directory into the container, so your config and workspace persist across container restarts. Build and run nanobot in a container: ```bash # Build the image docker build -t nanobot . # Initialize config (first time only) docker run -v ~/.nanobot:/root/.nanobot --rm nanobot onboard # Edit config on host to add API keys vim ~/.nanobot/config.json # Run gateway (connects to enabled channels, e.g. Telegram/Discord/Mochat) docker run -v ~/.nanobot:/root/.nanobot -p 18790:18790 nanobot gateway # Or run a single command docker run -v ~/.nanobot:/root/.nanobot --rm nanobot agent -m "Hello!" docker run -v ~/.nanobot:/root/.nanobot --rm nanobot status ``` ## ๐Ÿ“ Project Structure ``` nanobot/ โ”œโ”€โ”€ agent/ # ๐Ÿง  Core agent logic โ”‚ โ”œโ”€โ”€ loop.py # Agent loop (LLM โ†” tool execution) โ”‚ โ”œโ”€โ”€ context.py # Prompt builder โ”‚ โ”œโ”€โ”€ memory.py # Persistent memory โ”‚ โ”œโ”€โ”€ skills.py # Skills loader โ”‚ โ”œโ”€โ”€ subagent.py # Background task execution โ”‚ โ””โ”€โ”€ tools/ # Built-in tools (incl. spawn) โ”œโ”€โ”€ skills/ # ๐ŸŽฏ Bundled skills (github, weather, tmux...) โ”œโ”€โ”€ channels/ # ๐Ÿ“ฑ Chat channel integrations โ”œโ”€โ”€ bus/ # ๐ŸšŒ Message routing โ”œโ”€โ”€ cron/ # โฐ Scheduled tasks โ”œโ”€โ”€ heartbeat/ # ๐Ÿ’“ Proactive wake-up โ”œโ”€โ”€ providers/ # ๐Ÿค– LLM providers (OpenRouter, etc.) โ”œโ”€โ”€ session/ # ๐Ÿ’ฌ Conversation sessions โ”œโ”€โ”€ config/ # โš™๏ธ Configuration โ””โ”€โ”€ cli/ # ๐Ÿ–ฅ๏ธ Commands ``` ## ๐Ÿค Contribute & Roadmap PRs welcome! The codebase is intentionally small and readable. ๐Ÿค— **Roadmap** โ€” Pick an item and [open a PR](https://github.com/HKUDS/nanobot/pulls)! - [x] **Voice Transcription** โ€” Support for Groq Whisper (Issue #13) - [ ] **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 ### Contributors <a href="https://github.com/HKUDS/nanobot/graphs/contributors"> <img src="https://contrib.rocks/image?repo=HKUDS/nanobot&max=100&columns=12&updated=20260210" alt="Contributors" /> </a> ## โญ Star History <div align="center"> <a href="https://star-history.com/#HKUDS/nanobot&Date"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=HKUDS/nanobot&type=Date&theme=dark" /> <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=HKUDS/nanobot&type=Date" /> <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=HKUDS/nanobot&type=Date" style="border-radius: 15px; box-shadow: 0 0 30px rgba(0, 217, 255, 0.3);" /> </picture> </a> </div> <p align="center"> <em> Thanks for visiting โœจ nanobot!</em><br><br> <img src="https://visitor-badge.laobi.icu/badge?page_id=HKUDS.nanobot&style=for-the-badge&color=00d4ff" alt="Views"> </p> <p align="center"> <sub>nanobot is for educational, research, and technical exchange purposes only</sub> </p>