- Official website at nanobot.wiki with multilingual documentation in English, Chinese, Japanese, Korean, Spanish, and French
- Long-running tasks now handle CancelledError without orphaning subprocesses
- Retry classification uses structured error metadata instead of regex-on-error-text
- Dream two-stage memory system separating live conversation history from consolidated long-term knowledge
- Git-versioned memory storage for recovery of every memory state
- Jinja2 templating for controlling agent response and memory summary shaping
- Sandboxing of exec calls via bwrap
- Config secrets support ${VAR} interpolation
- nanobot-api Docker service providing isolated OpenAI-compatible endpoint
- GPT-5 model family support with proper temperature handling
- Xiaomi MiMo provider for on-device inference
- Baidu Qianfan provider for Chinese ecosystem
- Email channel now extracts attachments with MIME filtering and filename sanitization
- WhatsApp voice transcription via Groq/OpenAI Whisper
- Feishu video downloads support
- Telegram tool hints rendered as collapsible blockquotes and supports DM threads
- reasoning_content chain-of-thought visibility through full message pipeline
- Built-in grep and glob tools for agent code search
- Langfuse integration for production observability
- CLI gained --config flag for multi-instance setups
- Containers run as non-root by default
- API port binds to localhost by default
- SDK-level auto-retries disabled to prevent request amplification
- Azure retries no longer double-dip
- Legacy HISTORY.md files migrate automatically to new memory system
- Tool class refactored with proper JSON Schema for parameters
- Web search unified under WebToolsConfig with toggle controls
- /status command now shows web search provider usage alongside cache hit rates
- Test suite expanded to 1,142 tests
- Exec tool no longer leaks host environment variables to the LLM
- Dashscope and ModelArk proper thinking parameter control
- WhatsApp bridge gained automatic local auth
- Feishu auto-removes reactions after processing
- Telegram splits oversized streamed replies
- WeChat multimodal alignment continued
🐈 nanobot v0.1.5 is here 🎉 — 66 PRs merged, 27 new contributors, and the first release with its own home.
We're excited to announce that nanobot now has an official website at nanobot.wiki, with multilingual documentation in English, Chinese, Japanese, Korean, Spanish, and French. Building it reminded us why we do this: nanobot has always belonged to the open-source community, and a proper home — one that speaks your language — felt overdue. Every doc page, every translation, every example is open and contribution-ready. That's not going to change.
Now, about the release itself. If v0.1.4.post6 was about decomposing the foundation, v0.1.5 is about making the building livable. The agent can now run for hours without losing its mind. Memory got a proper architecture. And running nanobot in production went from "possible" to "comfortable." This is the release where nanobot stops being a prototype and starts being infrastructure.
Highlights
-
Long-running tasks got more reliable — Long-running tasks received a ground-up reliability pass. The runtime now handles
CancelledErrorwithout orphaning subprocesses, retry classification uses structured error metadata instead of regex-on-error-text (so a 429 quota exhaustion stops immediately while a rate limit waits and retries), SDK-level auto-retries were disabled to prevent request amplification, and Azure retries no longer double-dip. If your agent runs cron jobs, orchestrates tools overnight, or handles bursty traffic — this is the release that makes those sessions stick. (#2733, #2762, #2759, #2761, #2765) -
Memory got an architecture — meet Dream — The new two-stage memory system separates live conversation history from consolidated long-term knowledge. Dream runs as a background consolidation pass — think of it as the agent sleeping on what it learned — backed by git-versioned storage so every memory state is recoverable. Legacy
HISTORY.mdfiles migrate automatically. Jinja2 templating arrived alongside Dream, giving you control over how the agent shapes its responses and memory summaries. This isn't a feature bolted on — it's the memory system nanobot should have had from day one. (#2717, #2779, and 10+ follow-up hardening commits) -
Running nanobot in production got real —
execcalls are now sandboxed viabwrapand containers run as non-root by default. The exec tool no longer leaks host environment variables to the LLM. API port binds to localhost by default. Config secrets support${VAR}interpolation so you never have to hardcode a key again. A newnanobot-apiDocker service gives you an isolated OpenAI-compatible endpoint out of the box. WhatsApp bridge gained automatic local auth. These aren't glamorous changes — they're the reason you'll sleep through the night after deploying. (#1940, #2831, #2830, #2841, #2715) -
Three new providers, and GPT-5 is ready — GPT-5 model family support landed with proper temperature handling. Xiaomi MiMo joined for on-device inference fans. Baidu Qianfan arrived for the Chinese ecosystem. Dashscope and ModelArk got proper thinking parameter control. And
reasoning_content(chain-of-thought from DeepSeek-R1, Kimi, MiMo) is now visible and preserved through the full message pipeline. nanobot keeps meeting users wherever their models are. (#2788, #2495, #2811, #2840, #2770) -
Channels kept getting better — Email now extracts attachments with MIME filtering and filename sanitization. WhatsApp gained voice transcription via Groq/OpenAI Whisper. Feishu auto-removes reactions after processing and supports video downloads. Telegram renders tool hints as collapsible blockquotes, supports DM threads, and splits oversized streamed replies. WeChat multimodal alignment continued. Langfuse integration landed for production observability. And
/statusnow shows web search provider usage alongside cache hit rates. (#2815, #2530, #2812, #2810, #2793, #2520, #2659, #2832, #2703) -
Developer experience, quietly — Built-in
grepandglobtools give the agent native code search. The Tool class was refactored with proper JSON Schema for parameters. The Python SDK facade enables programmatic per-session isolation. The CLI gained--configfor multi-instance setups. Web search was unified underWebToolsConfigwith toggle controls. And the test suite grew to 1,142 tests, all green. (#2754, #2780, #2653, #2740, #2643)
Community
Welcome to our 27 new contributors who made their first contribution in this release.
v0.1.5 is shaped by a simple conviction: an AI agent framework earns trust not by adding features, but by being the kind of software you'd run unattended on a Friday night. Memory that doesn't forget. Retries that don't amplify. Sandboxes that don't leak. Every contributor who hardened a boundary, caught a race condition, or added a test — you made nanobot more trustworthy today than it was yesterday. That's the only metric that matters.
Full Changelog: https://github.com/HKUDS/nanobot/compare/v0.1.4.post6...v0.1.5
What's Changed
- fix(skill-creator): Fix grammar in SKILL.md: 'another the agent' by @quanmou in https://github.com/HKUDS/nanobot/pull/2586
- feat: add OpenAI-compatible API by @goxofy in https://github.com/HKUDS/nanobot/pull/1362
- feat(agent): add CompositeHook for composable lifecycle hooks by @sontianye in https://github.com/HKUDS/nanobot/pull/2615
- feat: add Python SDK facade and per-session isolation by @Re-bin in https://github.com/HKUDS/nanobot/pull/2653
- fix: three minor user-facing fixes (#2651, #2566, #2579) by @04cb in https://github.com/HKUDS/nanobot/pull/2656
- fix: Prevent ExecTool registration in Subagent when exec_config.enable is False by @yorkhellen in https://github.com/HKUDS/nanobot/pull/2648
- feat(channel): matrix/discord enhancement by @chengyongru in https://github.com/HKUDS/nanobot/pull/2673
- Feat(WeiXin): WeXin multimodal capabilities and align with version 2.1.1 by @xcosmosbox in https://github.com/HKUDS/nanobot/pull/2614
- fix(test): fix flaky test_fixed_session_requests_are_serialized by @chengyongru in https://github.com/HKUDS/nanobot/pull/2676
- fix: restore GitHub Copilot auth flow by @RongLei-intel in https://github.com/HKUDS/nanobot/pull/2668
- fix(agent): message tool incorrectly replies to original chat when targeting different chat_id by @WormW in https://github.com/HKUDS/nanobot/pull/2474
- fix: ExecTool to block root directory paths when restrict_to_workspace is enabled by @yorkhellen in https://github.com/HKUDS/nanobot/pull/2683
- fix(providers): only apply cache_control for Claude models on OpenRouter by @Tejas1Koli in https://github.com/HKUDS/nanobot/pull/2687
- feat(provider): show cache hit rate in /status (#2645) by @chengyongru in https://github.com/HKUDS/nanobot/pull/2703
- feat(cron): add deliver parameter to support silent jobs by @xgzlucario in https://github.com/HKUDS/nanobot/pull/2718
- chore(provider): Use OpenAI Responses API for Azure OpenAI Provider by @kunalk16 in https://github.com/HKUDS/nanobot/pull/2661
- test(matrix): skip cleanly when optional deps are missing by @haosenwang1018 in https://github.com/HKUDS/nanobot/pull/2741
- feat(cli): add --config option to channels login and status commands by @masterlyj in https://github.com/HKUDS/nanobot/pull/2740
- feat: harden agent runtime for long-running tasks by @Re-bin in https://github.com/HKUDS/nanobot/pull/2733
- feat(channel): channel enhancement by @chengyongru in https://github.com/HKUDS/nanobot/pull/2769
- fix: restore Weixin typing indicator by @cypggs in https://github.com/HKUDS/nanobot/pull/2646
- feat(provider): add Xiaomi MiMo LLM support by @LingaoM in https://github.com/HKUDS/nanobot/pull/2495
- feat(provider): support reasoning_content in OpenAI compat provider by @LingaoM in https://github.com/HKUDS/nanobot/pull/2770
- fix(restart): send completion notice after channel is ready and unify… by @imfondof in https://github.com/HKUDS/nanobot/pull/2745
- feat: unify web tool config under WebToolsConfig + add web tool toggle controls by @Shiniese in https://github.com/HKUDS/nanobot/pull/2643
- fix: Support media directory access when
restrict_to_workspaceis enabled by @Shiniese in https://github.com/HKUDS/nanobot/pull/2743 - fix: Retry-After was ignored, causing premature retries (now honors header/json hints) by @pikaxinge in https://github.com/HKUDS/nanobot/pull/2761
- fix: stop retry amplification (12→4 requests) by disabling SDK auto-retries by @pikaxinge in https://github.com/HKUDS/nanobot/pull/2759
- feat(memory): two-stage memory system with Dream consolidation by @chengyongru in https://github.com/HKUDS/nanobot/pull/2717
- feat: integrate Jinja2 templating for agent responses and memory cons… by @JackLuguibin in https://github.com/HKUDS/nanobot/pull/2779
- fix(security): add ssrfWhitelist config to unblock Tailscale/CGNAT (#2669) by @04cb in https://github.com/HKUDS/nanobot/pull/2715
- refactor: streamline Tool class methods and improve type handling by @JackLuguibin in https://github.com/HKUDS/nanobot/pull/2780
- fix(provider): restore reasoning_content and extra_content in message… by @LingaoM in https://github.com/HKUDS/nanobot/pull/2786
- feat(providers): add GPT-5 model family support by @friday-james in https://github.com/HKUDS/nanobot/pull/2788
- perf(cache): stabilize tool prefix caching under MCP tool churn by @pikaxinge in https://github.com/HKUDS/nanobot/pull/2722
- fix(docker): rewrite github ssh git deps to https for npm build by @Wenzhang-Chen in https://github.com/HKUDS/nanobot/pull/1700
- feat(agent): add built-in grep and glob search tools by @Re-bin in https://github.com/HKUDS/nanobot/pull/2754
- fix(cli): prevent spinner ANSI escape codes from being printed verbatim by @chengyongru in https://github.com/HKUDS/nanobot/pull/2809
- feat(telegram): render tool hints as expandable blockquotes by @chengyongru in https://github.com/HKUDS/nanobot/pull/2810
- feat(provider): add Qianfan provider support by @chengyongru in https://github.com/HKUDS/nanobot/pull/2811
- feat(feishu): auto-remove reaction after processing and support video download by @chengyongru in https://github.com/HKUDS/nanobot/pull/2812
- fix: stop leaking reasoning_content to stream output by @chengyongru in https://github.com/HKUDS/nanobot/pull/2817
- fix(dream): allow LLM to retry on tool errors by @chengyongru in https://github.com/HKUDS/nanobot/pull/2824
- fix(web-search): fix Jina search request format and restore DuckDuckGo fallback by @KimGLee in https://github.com/HKUDS/nanobot/pull/2808
- Fix: add asyncio timeout guard for DuckDuckGo search by @hoaresky in https://github.com/HKUDS/nanobot/pull/2805
- fix(telegram): support threads in DMs by @IlyaSemenov in https://github.com/HKUDS/nanobot/pull/2793
- refactor(agent): streamline hook method calls and enhance error logging by @JackLuguibin in https://github.com/HKUDS/nanobot/pull/2794
- feat: sandbox exec calls with bwrap and run container as non-root (minimally fixes #1873) by @kinchahoy in https://github.com/HKUDS/nanobot/pull/1940
- chore: add codespell support (config, workflow to detect/not fix) and make it fix a few typos by @yarikoptic in https://github.com/HKUDS/nanobot/pull/121
- security: prevent exec tool from leaking process env vars by @benlenarts in https://github.com/HKUDS/nanobot/pull/2831
- docs: another two places for renaming assitant to agent by @qixinbo in https://github.com/HKUDS/nanobot/pull/2835
- expand /status to show web search provider usage limits (#2820) by @wanghesong2019 in https://github.com/HKUDS/nanobot/pull/2832
- security: support ${VAR} env var interpolation for config secrets by @benlenarts in https://github.com/HKUDS/nanobot/pull/2830
- fix(shell): kill subprocess on CancelledError to prevent orphan proce… by @LingaoM in https://github.com/HKUDS/nanobot/pull/2765
- fix(feishu): match bot's own open_id in _is_bot_mentioned to prevent … by @yq612 in https://github.com/HKUDS/nanobot/pull/2719
- feat(provider): 添加 Langfuse 观测平台的集成支持 by @lang07123 in https://github.com/HKUDS/nanobot/pull/2659
- fix(matrix): fix e2ee authentication by @limdingwen in https://github.com/HKUDS/nanobot/pull/2596
- feat(whatsapp): add voice message transcription via OpenAI/Groq Whisper by @franciscomaestre in https://github.com/HKUDS/nanobot/pull/2530
- fix(whatsapp): detect phone vs LID by JID suffix, not field name by @franciscomaestre in https://github.com/HKUDS/nanobot/pull/2531
- Fix cron reminder notifications being suppressed by @mrbob-git in https://github.com/HKUDS/nanobot/pull/2449
- fix(telegram): split oversized final streamed replies by @Michael-lhh in https://github.com/HKUDS/nanobot/pull/2520
- feat(email): add attachment extraction support by @benlenarts in https://github.com/HKUDS/nanobot/pull/2815
- feat(agent): Adjust thinking method for Dashscope and Modelark by @power88 in https://github.com/HKUDS/nanobot/pull/2840
- feat(docker): add nanobot-api service with isolated workspace by @dividduang in https://github.com/HKUDS/nanobot/pull/2841
- fix: make app-layer retry classification structured (408/409/timeout/connection) by @pikaxinge in https://github.com/HKUDS/nanobot/pull/2762
- fix(status): use correct AgentLoop attribute for web search config by @yanghan-cyber in https://github.com/HKUDS/nanobot/pull/2844
New Contributors
- @quanmou made their first contribution in https://github.com/HKUDS/nanobot/pull/2586
- @goxofy made their first contribution in https://github.com/HKUDS/nanobot/pull/1362
- @sontianye made their first contribution in https://github.com/HKUDS/nanobot/pull/2615
- @RongLei-intel made their first contribution in https://github.com/HKUDS/nanobot/pull/2668
- @WormW made their first contribution in https://github.com/HKUDS/nanobot/pull/2474
- @Tejas1Koli made their first contribution in https://github.com/HKUDS/nanobot/pull/2687
- @masterlyj made their first contribution in https://github.com/HKUDS/nanobot/pull/2740
- @cypggs made their first contribution in https://github.com/HKUDS/nanobot/pull/2646
- @LingaoM made their first contribution in https://github.com/HKUDS/nanobot/pull/2495
- @imfondof made their first contribution in https://github.com/HKUDS/nanobot/pull/2745
- @Shiniese made their first contribution in https://github.com/HKUDS/nanobot/pull/2643
- @friday-james made their first contribution in https://github.com/HKUDS/nanobot/pull/2788
- @Wenzhang-Chen made their first contribution in https://github.com/HKUDS/nanobot/pull/1700
- @hoaresky made their first contribution in https://github.com/HKUDS/nanobot/pull/2805
- @IlyaSemenov made their first contribution in https://github.com/HKUDS/nanobot/pull/2793
- @kinchahoy made their first contribution in https://github.com/HKUDS/nanobot/pull/1940
- @yarikoptic made their first contribution in https://github.com/HKUDS/nanobot/pull/121
- @qixinbo made their first contribution in https://github.com/HKUDS/nanobot/pull/2835
- @wanghesong2019 made their first contribution in https://github.com/HKUDS/nanobot/pull/2832
- @yq612 made their first contribution in https://github.com/HKUDS/nanobot/pull/2719
- @lang07123 made their first contribution in https://github.com/HKUDS/nanobot/pull/2659
- @limdingwen made their first contribution in https://github.com/HKUDS/nanobot/pull/2596
- @franciscomaestre made their first contribution in https://github.com/HKUDS/nanobot/pull/2530
- @mrbob-git made their first contribution in https://github.com/HKUDS/nanobot/pull/2449
- @power88 made their first contribution in https://github.com/HKUDS/nanobot/pull/2840
- @dividduang made their first contribution in https://github.com/HKUDS/nanobot/pull/2841
- @yanghan-cyber made their first contribution in https://github.com/HKUDS/nanobot/pull/2844
Full Changelog: https://github.com/HKUDS/nanobot/compare/v0.1.4.post6...v0.1.5