# nanobot changelog > Ultra-lightweight, open-source, self-hosted personal AI agent framework in Python with WebUI, tools, memory, MCP, multi-agent workflows, automation, and chat apps - Vendor: HKUDS - Category: Developer Tools - Official site: https://nanobot.wiki/ - Tracked by: What's New (https://whatsnew.fyi/product/nanobot) - Harvested from: GitHub (HKUDS/nanobot) - Entries below: 10 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## Releases ### v0.3.0 - Date: 2026-07-25 - Version: v0.3.0 - Original notes: https://github.com/HKUDS/nanobot/releases/tag/v0.3.0 - Permalink: https://whatsnew.fyi/product/nanobot/releases/v0.3.0 - **added** — nanobot webui command prepares the local WebUI channel, starts the gateway, opens the browser, and leads first-time users into guided setup - **added** — Inline subagents can consult inside the active task with explicitly authorized work continuing through verification - **added** — /goal command opts a task into sustained execution with clearer permission, cancellation, timeout, heartbeat, and local-trigger behavior - **added** — OpenCode Zen and OpenCode Go providers - **added** — Kimi Coding provider - **added** — Grok OAuth with hosted X Search provider - **added** — Parallel Search provider - **added** — Serper provider - **added** — Mattermost channel - **added** — Native Neonize WhatsApp channel - **added** — Brazilian Portuguese language support in WebUI - **changed** — WebUI chats now read as topics with quoted follow-ups, document attachments, multimodal tool results, and file diffs visible in conversation - **changed** — Model presets can be switched from the composer - **changed** — Native desktop hosts can open a system folder picker - **changed** — Settings work better across narrow screens and dark mode - **changed** — Configuration can reload without tearing down the process - **changed** — Typed runtime context keeps provider-owned state out of ad hoc loop logic - **changed** — Traditional Chinese language substantially improved in WebUI - **fixed** — Chained-command allowlist bypasses are now blocked - **fixed** — SSRF checks pin validated DNS - **security** — Credentials are redacted from MCP URLs - **security** — Remote API binds require authentication - **security** — Attachment ingress is constrained 🐈 **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 switch model presets per session. Long-running behavior is deliberate: `/goal` opts a task into sustained execution, while ordinary conversations remain ordinary conversations. The foundation is **a runtime built for real deployment**. Configuration can reload without tearing down the process, channels have clearer package boundaries, gateway restart and shutdown paths are sturdier, and Docker and Render deployment are easier to reproduce. Provider-scoped proxies, OpenCode, Kimi Coding, Grok OAuth with hosted X Search, Parallel Search, Serper, Mattermost, and the native Neonize WhatsApp channel broaden where nanobot can run and what it can reach. ##### Highlights - **One command to the workbench** - `nanobot webui` prepares the local channel, starts the gateway, opens the browser, and leads first-time users into guided setup. - **A stronger browser workbench** - Topic-style chats, composer model switching, quoted follow-ups, document attachments, native folder selection, responsive settings, and clearer fallback state. - **Agent coordination without core sprawl** - Inline subagents can consult inside the active task, authorized work can continue through verification, and typed runtime context keeps provider-owned state out of ad hoc loop logic. - **Explicit long-running goals** - Sustained execution is gated behind `/goal`, with clearer permission, cancellation, timeout, heartbeat, and local-trigger behavior. - **Files and tool activity you can inspect** - Syntax-highlighted previews, live file-edit diffs, better code-copy behavior, structured tool errors, richer MCP artifacts, and preserved multimodal tool output. - **A more operational runtime** - Live configuration reloads, bounded session and exec state, safer restart/shutdown, cleaner cancellation ownership, more reliable scheduled work, and faster CI. - **Broader providers and search** - OpenCode Zen/Go, Kimi Coding, Grok OAuth, provider-scoped proxies, Copilot Enterprise overrides, Parallel Search, Serper, and steadier authentication fallback. - **Channels as maintainable extensions** - Native Neonize WhatsApp, Mattermost, improved Feishu/Telegram/Discord/Matrix/QQ behavior, optional channel dependencies, and clearer setup flows. - **Security tightened at the edges** - Chained-command allowlist bypasses are blocked, SSRF checks pin validated DNS, credentials are redacted from MCP URLs, remote API binds require authentication, and attachment ingress is constrained. - **Documentation and delivery caught up** - Workflow-oriented docs, an automation guide, one-click Render deployment, stronger Docker controls, community-maintained project language, and a refreshed SVG identity. ##### Upgrade Notes - **WhatsApp now uses Neonize instead of the old Node.js/Baileys bridge.** Remove _[Truncated at 4000 characters — full notes: https://github.com/HKUDS/nanobot/releases/tag/v0.3.0]_ ### v0.2.2 - Date: 2026-06-23 - Version: v0.2.2 - Original notes: https://github.com/HKUDS/nanobot/releases/tag/v0.2.2 - Permalink: https://whatsnew.fyi/product/nanobot/releases/v0.2.2 - **changed** — WebUI transcript storage now uses segmentation instead of single monolithic files for improved durability of large conversations - **fixed** — Fork and replay paths now preserve assistant replies more reliably - **fixed** — Active turns remain anchored while the model works without getting revived on refresh - **added** — WebUI gained prompt navigation capability - **added** — WebUI now displays token usage rendering - **added** — WebUI activity durations are now shown with clearer timing information - **changed** — Python SDK now has safer concurrent run() behavior with isolated calls - **changed** — SDK hooks are now cleaner with explicit per-run hook handling - **changed** — MCP lifecycle handling is now safer with better cleanup - **added** — SDK documentation now teaches from first principles for easier embedding in custom applications - **added** — Web search now covers Firecrawl, Exa, Bocha, Keenable, and Volcengine providers - **added** — Transcription expanded with OpenRouter, StepFun, SiliconFlow, Xiaomi MiMo, and AssemblyAI support - **added** — Firecrawl is now available as a keyless Web Data app - **changed** — Mistral reasoning handling has been improved - **added** — Kimi K2.7 thinking support added - **added** — Custom image generation capability added - **added** — OpenAI image edits support added - **fixed** — Stream stalls can now retry or fall back without returning truncated answers - **fixed** — Malformed history is now skipped during processing - **fixed** — Recent-history context is now token-capped 🐈 **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 update checks, richer activity timing, and a faster settings surface. The ecosystem expanded with Firecrawl as a keyless Web Data app, Exa / Bocha / Keenable / Volcengine search, more transcription providers, custom image generation, better Mistral and Kimi handling, and many channel fixes across Telegram, Feishu, WhatsApp, Slack, Email, QQ, DingTalk, and more. ##### Highlights - **More durable WebUI sessions** — Segmented transcript storage keeps large conversations readable without throwing away old turns, fork/replay paths preserve assistant replies more reliably, session deletion cleans up legacy files, refreshes no longer revive stale content, and active turns stay anchored while the model works. The WebUI also got prompt navigation, better mobile layout, clearer activity durations, token usage rendering, safer startup fetches, and on-demand version checks. - **Python SDK as a first-class runtime** — The SDK now has safer concurrent `run()` behavior, explicit runtime controls, cleaner per-run hook handling, better MCP cleanup, improved facade lifecycle behavior, and more beginner-friendly documentation. This makes nanobot easier to embed in scripts, services, evaluations, and custom agent products. - **Gateway and onboarding polish** — The gateway gained background/service controls, cleaner foreground shutdown, safer Ctrl+C behavior, and better MCP stdio cleanup. The onboarding flow was simplified around provider-first Quick Start, more neutral provider selection, safer WebUI setup, rollback on WebSocket failure, and better keyboard navigation. - **Search, speech, and provider coverage** — Web search now covers Firecrawl, Exa, Bocha, Keenable, and Volcengine paths; transcription expanded with shared voice input plus OpenRouter, StepFun, SiliconFlow, Xiaomi MiMo, and AssemblyAI support. Providers got better Mistral reasoning handling, Kimi K2.7 thinking, OpenAI-compatible query/body controls, custom image generation, OpenAI image edits, safer Anthropic tool IDs, and stronger retry/fallback behavior. - **Reliability hardening across the agent core** — Recent-history context is token-capped, idle auto-compact is on by default, Dream explains empty runs, malformed history is skipped, history cursors stay monotonic, tool schema estimates are cached, unknown builtin tool parameters are rejected, provider fallback logs the primary error, and stream stalls can retry or fall back without returning a truncated answer. - **Channels that behave more like real apps** — Telegram gained richer message support with safer fallback detection; Feishu got streaming recovery, WebSocket card reading, table extraction, lazy SDK loading, and QR login; WhatsApp got read receipts, forwarded-message handling, and LID mapping; Slack allowlisted channels can _[Truncated at 4000 characters — full notes: https://github.com/HKUDS/nanobot/releases/tag/v0.2.2]_ ### v0.2.1 - Date: 2026-06-01 - Version: v0.2.1 - Original notes: https://github.com/HKUDS/nanobot/releases/tag/v0.2.1 - Permalink: https://whatsnew.fyi/product/nanobot/releases/v0.2.1 - **added** — WebUI now includes live file edit visibility, improved activity rendering, and cleaner source link display - **added** — WebUI gained project workspaces and access controls - **added** — Context-window settings and model controls added to WebUI - **added** — Slash command actions integrated into WebUI - **added** — CLI Apps introduced as a way to connect CLI-native tools - **added** — Extension registry created as a first-class home for integrations - **added** — Support for Ant Ling, Skywork, Novita, Step Plan, and StepFun providers - **added** — Support for Zhipu image generation - **added** — OpenAI-compatible image generation support added - **added** — Ollama image generation support added - **added** — Signal channel support added - **added** — Telegram webhook mode added - **added** — Discord model slash commands added - **changed** — Thought and response ordering now matches the model's real turn structure in WebUI - **changed** — Goal iteration budget extended for multi-turn work - **changed** — Sustained goals no longer trip the runner - **changed** — Session locks prevent overlapping turns from stepping on each other - **changed** — Gateway cold start reduced from seconds to sub-second territory - **fixed** — AutoCompact and consolidation races fixed - **fixed** — Archive retention now avoids duplicate archives and message loss - **fixed** — WebSocket token issuance now requires authentication - **security** — Redirect targets are validated before web fetches 🐈 **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 **nanobot becoming easier to plug into real stacks**. CLI Apps and MCP now share a more unified extension path; preset setup and capability mentions make tools easier to discover; the extension registry gives integrations a first-class home. Provider coverage expanded across Ant Ling, Skywork, Novita, Step Plan, StepFun, Zhipu image generation, OpenAI/Codex image generation, Ollama image generation, and richer OpenAI-compatible configuration. Channels also grew with Signal, Telegram webhook mode, Discord model slash commands, Matrix verification fixes, and safer Weixin / Teams / Matrix behavior. ##### Highlights - **WebUI as a daily workbench** — The WebUI is no longer just a packaged chat surface. It now has better activity rendering, live file edit visibility, cleaner source links, stronger markdown/code rendering, improved sidebar performance, project workspaces, access controls, context-window settings, model controls, slash command actions, and a more polished native-host feel. The final Thought / response ordering fix makes streamed agent work read in the order it actually happened. (#3877, #3899, #3906, #3951, #3953, #3987, #4007, #4045, #4108, #4121, #4137) - **Long-running agent stability** — Goal mode and multi-turn work got sturdier: sustained goals keep the runner alive, goal iteration budget is extended, `process_direct` now has per-session locking, streaming/session concurrency bugs were tightened, AutoCompact and consolidator races were fixed, and archive retention now avoids duplicate archives and message loss. (#3881, #3999, #4041, #4104, #4127, #4129) - **CLI Apps, MCP, and extension workflows** — CLI Apps landed as a way to connect CLI-native tools, then got unified with MCP concepts through preset setup, capability mentions, stale install recovery, registry logos, and an extension registry source. The result is a clearer path from "I have a useful local tool" to "nanobot can invoke it in a workflow." (#3963, #3979, #3991, #4046) - **More providers, richer model routing** — The provider surface widened with Ant Ling, Skywork, Novita, Step Plan, OpenAI API type selection, `extraBody`, and multiple image-generation providers including StepFun, OpenAI/Codex, Ollama, and Zhipu. Several follow-up fixes preserve tool-call IDs, improve quota/billing errors, handle provider transport edge cases, and keep thinking/reasoning controls honest across OpenAI-compatible routes. (#3900, #3910, #3916, #3927, #3946, #3954, #3971, #3974, #3984, #3988, #4048) - **Channels and deployment polish** — Signal support, Telegram webhook mode, Discord model slash commands, Docker/WebUI deployment fixes, and clearer secret/deployment docs make nanobot easier to run outside a local terminal. Gateway cold start also dropped dramatically, from _[Truncated at 4000 characters — full notes: https://github.com/HKUDS/nanobot/releases/tag/v0.2.1]_ ### v0.2.0 - Date: 2026-05-16 - Version: v0.2.0 - Original notes: https://github.com/HKUDS/nanobot/releases/tag/v0.2.0 - Permalink: https://whatsnew.fyi/product/nanobot/releases/v0.2.0 - **added** — Add `/goal` command and `long_task` tool to mark threads as sustained objectives with goal pinned in Runtime Context across compactions and tool chains - **added** — Add image-generation tool with WebUI image mode to render generated images inline with rounded previews - **added** — Ship WebUI inside the wheel with `pip install nanobot-ai`, including redesigned settings and BYOK flow - **added** — Localize slash palette in WebUI - **added** — Gate LAN access to WebUI with token via `tokenIssueSecret` - **added** — Stream reasoning live to chat in WebUI - **added** — Add AWS Bedrock Converse as a native first-class provider - **added** — Add NVIDIA NIM provider - **added** — Add LongCat provider via OpenAI-compatible routing - **added** — Add Atomic Chat provider as local OpenAI-compatible target - **added** — Add MiMo provider with proper thinking-control wiring - **added** — Add `fallback_models` configuration to specify secondary models that take over when primary fails - **added** — Add `ModelPresetConfig` to name and swap model and provider bundles via `/model` command - **added** — Add `complete_goal` command to end a sustained objective - **changed** — Automatically widen wall-clock timeout while a goal is active - **changed** — Switch streaming requests to idle timeout instead of hard wall clock so models are not cut off mid-thought - **changed** — Redesign WebUI settings and BYOK flow - **changed** — Move archived conversation summary into system prompt for KV cache stability - **changed** — Rewrite `_process_message` as a functional state machine - **changed** — Convert tools to self-describing plugin architecture - **changed** — Back-fill DeepSeek reasoning history instead of dropping it - **removed** — Remove `ask_user` in favor of structured `message`-tool choices - **removed** — Retire `GlobTool` in favor of `read_file` glob support - **security** — Fix SSRF vulnerability - **security** — Confine media path access - **security** — Soften workspace boundaries 🐈 **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, archived summary moved into the system prompt for KV cache stability, tools converted to a self-describing plugin architecture, `ask_user` and `GlobTool` retired in favor of cleaner replacements. Five new providers (**AWS Bedrock Converse**, **NVIDIA NIM**, **LongCat**, **Atomic Chat**, **MiMo**) join the lineup with `fallback_models` as a safety net so a single flaky endpoint can't take a turn down. Plus four `[security]` fixes — SSRF, media path confinement, softer workspace boundaries — and chat-native pairing so DM approvals finally happen in the chat instead of in a config file. ##### Highlights - **`/goal` and long-running tasks — agent with a memory of *why*** — The new `long_task` tool, paired with `/goal` and `complete_goal`, marks a thread as a sustained objective. The active goal is mirrored in Runtime Context every turn so the agent stays anchored even after compaction, the WebUI surfaces the goal in the chat header, and the LLM wall timeout is automatically widened while a goal is active so longer reasoning passes don't get killed mid-thought. Core agents and subagents both honor the longer budget; streaming requests fall back to an idle timeout instead of a hard wall clock so a model that's still emitting tokens won't be prematurely cut off. (#3788, #3855) - **Image generation, end to end** — A new image-generation tool plus a WebUI image mode let you go from prompt to picture without leaving the chat. Generated images render inline with rounded previews; replay-window and dedup paths were tightened so images don't double-deliver across long sessions, and the consolidation pass now respects the replay window when hiding history. (#3695, #3687) - **WebUI shipped in the wheel + a year's worth of polish** — `pip install nanobot-ai` now bundles the WebUI: enable the WebSocket channel, run `nanobot gateway`, open the browser. No `cd webui && bun run build` required. After several releases under a "preview" label, the WebUI is now a packaged surface. Inside it: redesigned settings and BYOK flow (including BYOK web search), localized slash palette, model preset badge that stays in sync across slash commands and config reloads, streamed reasoning rendered live, image previews, LAN access gated by `tokenIssueSecret`, default-to-new-chat on load, scroll preservation on settings return, a `crypto.randomUUID` shim for non-secure-context LAN use, and dropped eager markdown preload to cut first-paint cost. (#3653, #3661, #3703, #3709, #3656, #3658, #3733, #3759, #3782) - **Five new providers and a fallback safety net** — **Native AWS Bedrock Converse** lands as a first-class provider (#3574), with a follow-up that preserves Bedrock tool config across history (#3758). **NVIDIA NIM** (#3707), **LongCat** via OpenAI-compatible routing _[Truncated at 4000 characters — full notes: https://github.com/HKUDS/nanobot/releases/tag/v0.2.0]_ ### v0.1.5.post3 - Date: 2026-04-29 - Version: v0.1.5.post3 - Original notes: https://github.com/HKUDS/nanobot/releases/tag/v0.1.5.post3 - Permalink: https://whatsnew.fyi/product/nanobot/releases/v0.1.5.post3 - **added** — Feishu group topics now isolate sessions so messages in one topic do not leak into another - **added** — Discord threads inherit their parent channel's allowChannels and get session isolation - **added** — Slack thread context is preserved on proactive replies - **added** — MSTeams conversation references gained TTL-based pruning and auto-cleanup for Web Chat refs - **added** — Per-channel override for sendProgress and sendToolHints instead of global switches - **added** — New ask_user tool lets the agent pause and ask users to choose mid-task - **added** — Telegram inline keyboards for rendering message tool button choices - **added** — /history command lets you review recent messages without scrolling - **added** — DeepSeek-V4 support with thinking mode and legacy session compatibility - **added** — Hugging Face Inference Providers as a first-class provider - **added** — Olostep joined web search - **added** — OpenAI-compatible endpoints gained extraBody for vLLM guided decoding - **added** — NANOBOT_LLM_TIMEOUT_S and NANOBOT_OPENAI_COMPAT_TIMEOUT_S environment variables to prevent hung requests - **added** — consolidationRatio parameter to tune how aggressively token-triggered consolidation compresses context - **added** — maxMessages parameter with default 120 to cap the replay window - **added** — macOS LaunchAgent deployment documentation and support - **fixed** — Shell injection vector via path_append on non-Windows platforms - **fixed** — Workspace directory violations now stop the agent loop instead of logging a warning - **fixed** — resolve_config_env_vars no longer strips excluded fields - **fixed** — Anthropic image_url blocks inside tool_result content are converted correctly - **changed** — History.jsonl now uses atomic writes with fsync and directory sync - **changed** — GitHub Copilot routes GPT-5 and o-series models correctly - **changed** — Gemini routing picks up reasoning_effort none and Gemma 🐈 **nanobot `v0.1.5.post3`** is here 🎉 — 57 PRs merged, 12 new contributors. The agent learned to talk in threads. If `v0.1.5.post2` was about reach and polish, `v0.1.5.post3` is about conversations becoming first-class citizens of their platform. Feishu group topics get isolated sessions. Discord threads inherit parent allowlists and keep their own context. Telegram can render inline keyboard choices. MSTeams prunes stale conversation references so outbound messages stop failing silently. And across all channels, `sendProgress` and `sendToolHints` can now be overridden per channel — quiet the noisy ones, keep the verbose ones. Underneath, **DeepSeek-V4** is supported end to end: thinking mode and legacy session compatibility ship together, with follow-up fixes for incomplete reasoning history and non-string message content so long threads stay stable. A new `ask_user` tool lets the agent pause and ask you to choose mid-task. Olostep and Hugging Face joined the provider lineup, and a pair of timeout env vars (`NANOBOT_LLM_TIMEOUT_S` and `NANOBOT_OPENAI_COMPAT_TIMEOUT_S`) keep hung requests from holding your session hostage. The WebUI continued to evolve — image uploads, video rendering, ask-user choices, model settings — but remains source-preview only, not bundled into the wheel. ##### Highlights - **Threads everywhere — Feishu, Discord, Slack, MSTeams** — Each channel grew up this release. Feishu group topics now isolate sessions so messages in one topic don't leak into another; streaming cards and tool hints follow the original topic. Discord threads inherit their parent channel's `allowChannels` and get session isolation, which also means slash commands respect the allowlist. Slack stopped losing thread context on proactive replies. MSTeams conversation references gained TTL-based pruning (`refTtlDays`), auto-cleanup for Web Chat refs, and a touch interval to keep active refs alive. The theme is consistent: conversations belong to their thread, not to the channel at large. (#3449, #3397, #3440, #3462, #3475, #3447, #3487) - **Per-channel progress and interaction controls** — `sendProgress` and `sendToolHints` used to be global on-or-off switches. Now you can place them inside any individual channel config to override the global default — keep Telegram quiet while WebSocket stays verbose. The agent also learned to ask users structured questions mid-task via the new `ask_user` tool: in WebUI these render as buttons, in other channels they fall back to text. Telegram got inline keyboards (`inline_keyboards: true`) for rendering `message` tool button choices. The `/history [n]` command lets you review recent messages without scrolling. (#3487, #2791, #3398, #3454, #3466) - **DeepSeek-V4 and the wider provider stack** — This release makes **DeepSeek-V4** a first-class target: thinking mode and legacy session compatibility land in one go (#3420), so you can point the agent at V4 without abandoning older conversations. Real-world transcripts exposed two gaps that got dedicated follow-ups — truncated or incomplete reasoning history (#3453) and heterogeneous (non-string) message content (#3458) — so tool-heavy sessions don’t fall over mid-run. On top of that, Hugging Face Inference Providers arrived as a first-class provider (#3496), Olostep joined web search (#3505), OpenAI-compatible endpoints gained `extraBody` for vLLM guided decoding and friends (#3491), and the timeout pair `NANOBOT_LLM_TIMEOUT_S` / `NANOBOT_OPENAI_COMPAT_TIMEOUT_S` split outer turn limits from inner HTTP bounds (#3428, #3478). GitHub Copilot routes GPT-5 and o-series models correctly (#3380); Gemini routing picks up `reasoning_effort="none"` and Gemma (#3515). - **Memory and session hardening** — `consolidationRatio` (0.1–0.95) lets you tune how aggressively token-triggered consolidation compresses context. `maxMessages` (default 120) caps the replay window without touching persistence. History.jsonl gained atomic writes with fsync and di _[Truncated at 4000 characters — full notes: https://github.com/HKUDS/nanobot/releases/tag/v0.1.5.post3]_ ### v0.1.5.post2 - Date: 2026-04-21 - Version: v0.1.5.post2 - Original notes: https://github.com/HKUDS/nanobot/releases/tag/v0.1.5.post2 - Permalink: https://whatsnew.fyi/product/nanobot/releases/v0.1.5.post2 - **added** — Windows and Python 3.14 are now first-class supported platforms with full CI matrix coverage and runtime fixes - **added** — The read_file tool now extracts text from DOCX, XLSX, and PPTX files including tables and grouped shapes - **added** — OpenAI-compatible API /v1/chat/completions endpoint now emits SSE chunks when stream=true - **added** — Microsoft Teams channel support - **added** — MiniMax thinking endpoint with reasoning_effort to reasoning_split mapping - **added** — LM Studio provider support with nullable API keys for local servers - **added** — MyTool for agent introspection of its own runtime configuration with sensitive field hiding - **added** — WebUI with WebSocket chat flow, i18n locale switcher, and dark-mode code-block theming available as source preview in webui/ - **changed** — Session files now use atomic writes with corrupt-file repair to prevent history loss during bad shutdowns - **changed** — Memory cursor recovery now handles non-integer corruption - **changed** — Auto-compact skips sessions with active tasks and unifies summary injection across consolidation paths - **changed** — Telegram channel gained mid-stream splitting for long replies and improved markdown rendering - **changed** — Discord stopped treating bot-to-bot messages as self-loops and added channel-based allow-lists - **changed** — Email channel now deduplicates SPF/DKIM-rejected messages and ignores self-sent mailbox messages - **changed** — WebSocket channel now multiplexes multiple chat_ids over a single connection - **fixed** — Providers now gain a circuit breaker for Responses API fallback - **fixed** — ZhiPu rate limit 1302 recognition - **fixed** — Cron tool schema now works with OpenAI Codex and Responses - **fixed** — Retry heartbeats no longer spill into user channels - **fixed** — Subagent follow-ups now persist in session history 🐈 **nanobot `v0.1.5.post2`** is here 🎉 — 67 PRs merged, 12 new contributors. The agent's world got bigger and steadier. If `v0.1.5.post1` was about the agent learning to manage itself, `v0.1.5.post2` is about reach and polish. Windows and Python 3.14 joined the supported matrix. The `read_file` tool learned to understand DOCX, XLSX, and PPTX. Microsoft Teams arrived as a channel. The OpenAI-compatible API started streaming via SSE. And beneath all of that, ~50 smaller fixes across cron, memory, retry, session files, and provider quirks kept turning "it works" into "it's solid." A dedicated browser UI also started taking shape in the repo — source preview for now. ##### Highlights - **Windows + Python 3.14 — first-class support** — A full CI matrix covering Windows runners and Python 3.14 landed, along with install markers and runtime fixes for the quirks those platforms expose. If you've been running nanobot on WSL because "Windows didn't quite work," you can stop. (#3194) - **Office documents, natively readable** — The `read_file` tool now extracts text from DOCX, XLSX, and PPTX — tables and grouped shapes included, workbook handles closed safely. Combined with the earlier PDF support, the agent can open whatever format your colleague just emailed you without bouncing through a converter. (#3336, #3269, #3353) - **OpenAI-compatible API — SSE streaming** — `/v1/chat/completions` now emits SSE chunks when `stream=true`, wiring up the existing `on_stream` / `on_stream_end` callbacks. Any client built for the OpenAI API — LangChain, LlamaIndex, your own frontend — gets live deltas from nanobot instead of waiting for the whole response. The endpoint also stopped terminating streams with a success marker after a backend failure, so errors surface honestly. (#3222, #3262) - **Microsoft Teams, MiniMax thinking, LM Studio, MyTool** — Microsoft Teams joined the channel roster. MiniMax got a dedicated Anthropic-style thinking endpoint plus a `reasoning_effort` → `reasoning_split` mapping fix. LM Studio is now supported via nullable API keys for local servers that don't expect one. The new MyTool lets the agent introspect its own runtime configuration — and hides sensitive nested config fields in `check` output so self-inspection doesn't leak secrets. (#3197, #3160, #3363, #3186, #3177, #3261) - **Reliability — the unglamorous half of a release** — Session files now use atomic writes with corrupt-file repair, so a bad shutdown no longer eats your history. Memory cursor recovery handles non-integer corruption. Auto-compact skips sessions with active tasks and unifies summary injection across consolidation paths. Providers gain a circuit breaker for Responses API fallback and recognize ZhiPu 1302 rate limits. Cron stops leaking intermediate progress, its tool schema works with OpenAI Codex/Responses, and retry heartbeats no longer spill into user channels. Subagent follow-ups persist in session history. Half of these you'll never notice — which is exactly the point. (#3312, #3340, #3081, #3304, #3302, #3356, #3320, #3295, #3229, #3242) - **Channels — quieter and sharper** — Telegram gained mid-stream splitting for long replies and better markdown rendering for modern LLM output. Discord stopped treating bot-to-bot messages as self-loops and added channel-based allow-lists. Email deduplicates SPF/DKIM-rejected messages to stop log spam and ignores self-sent mailbox messages. WeCom parses mixed inbound messages correctly. Each individually small; together they mean fewer "why did my bot do that" moments. (#3329, #3355, #3280, #3171, #3325, #3228, #3161) - **WebUI — early preview, source only** — A dedicated `webui/` has landed in the repo with a WebSocket chat flow, i18n locale switcher, Apple-inspired typography with CJK support, and live dark-mode code-block theming. The underlying WebSocket channel also learned to multiplex multiple `chat_id`s over a single connection. **Heads up: this is source-preview only — _[Truncated at 4000 characters — full notes: https://github.com/HKUDS/nanobot/releases/tag/v0.1.5.post2]_ ### v0.1.5.post1 - Date: 2026-04-14 - Version: v0.1.5.post1 - Original notes: https://github.com/HKUDS/nanobot/releases/tag/v0.1.5.post1 - Permalink: https://whatsnew.fyi/product/nanobot/releases/v0.1.5.post1 - **changed** — Follow-up messages sent while the agent is working are now injected into the active turn instead of queuing, and on streaming channels the reply continues in the same live response - **added** — Dream's consolidation flow can now recognize repeated workflows and promote them into standalone workspace skills - **added** — Auto compact feature that proactively summarizes older context during idle periods while preserving recent messages - **added** — WebSocket channel that runs a WebSocket server with streaming events, token-based auth, per-connection sessions, and TLS support - **changed** — Telegram channel now supports location sharing - **changed** — Discord channel gained streaming replies and proxy support - **changed** — Feishu channel added done-emoji lifecycle, inline tool hints, and Lark global domain config - **changed** — QQ and WeCom channels received full media support - **changed** — Slack's message tool now resolves #channel_name and @user to real IDs - **changed** — API endpoint now accepts file uploads via JSON base64 and multipart with automatic document extraction for PDF, DOCX, XLSX, and PPTX - **fixed** — Retry amplification where a failed send would trigger cascading retries across all channels - **added** — Anthropic's adaptive reasoning mode allowing Claude to decide when and how much to think - **changed** — Kimi thinking-capable models now receive automatic extra_body.thinking injection via reasoningEffort - **fixed** — StepFun Plan API reasoning fields now fall back correctly - **changed** — Non-Claude providers now get proper role alternation enforcement - **fixed** — Tool-call arguments are now normalized for strict providers that reject malformed JSON - **added** — MCP resources and prompts are now exposed as read-only tools that the agent can query directly - **changed** — Multiple MCP servers now connect in isolated tasks instead of racing each other - **added** — Notebook editing tool added - **added** — Kagi joined the web search provider lineup - **changed** — Exec tool now supports Windows, includes allowed_env_keys to selectively forward env vars, protects internal state files from writes, and rejects working_dir outside the workspace - **fixed** — Cron jobs no longer drop due to reentrant store reloads during execution, fixed-interval task duplication from concurrent store replacement, job config not reloading, and manual run state not being preserved 🐈 **nanobot `v0.1.5.post1`** is here 🎉 — 80 PRs merged, 25 new contributors. The agent learned to manage itself. If `v0.1.5` was about making the building livable, `v0.1.5.post1` is about the building learning to take care of itself. The agent now compresses its own context before it gets too long, injects follow-up messages mid-turn instead of making you wait, discovers reusable skills from its own workflows, and opens a WebSocket so anything can talk to it. Meanwhile, 40+ bug fixes across cron, memory, retry, and channels turned "it works most of the time" into "it works." ##### Highlights - **Mid-turn injection — follow-ups don't wait in line** — If you send another message while the agent is still working, it no longer queues behind a lock. The follow-up gets injected into the active turn, and on streaming channels the reply continues in the same live response. This makes long tool-call chains feel interactive instead of one-way. Edge-case draining on error paths was hardened in a follow-up pass. (#3042, #3110) - **Dream learns skills, not just facts** — Dream's consolidation flow can now recognize repeated workflows and promote them into standalone workspace skills under `skills/`. Combined with `disabledSkills` config for excluding skills you don't want, the agent's skill surface is now something that grows organically and stays manageable. (#3048, #2959) - **Auto compact — the agent manages its own context** — Sessions no longer grow until they hit the wall. Auto compact watches for idle periods, then proactively summarizes older context while preserving recent live messages — so when you come back, the agent remembers what matters without dragging along everything that doesn't. This isn't the old "nuke the session" approach; it's surgical compression that keeps the conversation feeling continuous. Pair it with `idleCompactAfterMinutes` in config for fine-grained control. (#3007, #3081, #3093) - **WebSocket channel — connect anything** — A new `websocket` channel runs a WebSocket server with streaming (`delta` + `stream_end` events), token-based auth (static or issued), per-connection sessions, and TLS support. Web apps, CLIs, Chrome extensions, scripts — anything that can open a socket can now talk to the agent in real time. (#2964) - **Channels got deeper** — Telegram gained location sharing. Discord got streaming replies and proxy support. Feishu added done-emoji lifecycle, inline tool hints, and Lark global domain config. QQ and WeCom received full media support. Slack's `message` tool now resolves `#channel_name` and `@user` to real IDs. The API endpoint accepts file uploads via JSON base64 and multipart, with automatic document extraction (PDF, DOCX, XLSX, PPTX) across all channels. And retry amplification — where a failed send would trigger cascading retries — was fixed across every channel. (#2910, #2939, #2960, #2993, #3046, #3044, #3138, #2938, #3053) - **Providers — adaptive thinking and Kimi** — Anthropic's `adaptive` reasoning mode landed, letting Claude decide when and how much to think. Kimi thinking-capable models (`kimi-k2.5`, `k2.6-code-preview`) now get automatic `extra_body.thinking` injection via `reasoningEffort`. StepFun Plan API reasoning fields fall back correctly. Non-Claude providers get proper role alternation enforcement. And tool-call arguments are normalized for strict providers that reject malformed JSON. (#2882, #3124, #2903, #2637, #3154) - **MCP, tools, and search** — MCP resources and prompts are now exposed as read-only tools — the agent can query them directly. Multiple MCP servers connect in isolated tasks instead of racing each other. The notebook editing tool arrived. Kagi joined the web search provider lineup. And the exec tool got tighter: Windows support landed, `allowed_env_keys` lets you selectively forward env vars, internal state files are write-protected, and `working_dir` outside the workspace is rejected. (#2907, #3019, #3017, #2945, #2893, _[Truncated at 4000 characters — full notes: https://github.com/HKUDS/nanobot/releases/tag/v0.1.5.post1]_ ### v0.1.5 - Date: 2026-04-06 - Version: v0.1.5 - Original notes: https://github.com/HKUDS/nanobot/releases/tag/v0.1.5 - Permalink: https://whatsnew.fyi/product/nanobot/releases/v0.1.5 - **added** — Official website at nanobot.wiki with multilingual documentation in English, Chinese, Japanese, Korean, Spanish, and French - **added** — Long-running tasks now handle CancelledError without orphaning subprocesses - **added** — Retry classification uses structured error metadata instead of regex-on-error-text - **added** — Dream two-stage memory system separating live conversation history from consolidated long-term knowledge - **added** — Git-versioned memory storage for recovery of every memory state - **added** — Jinja2 templating for controlling agent response and memory summary shaping - **added** — Sandboxing of exec calls via bwrap - **added** — Config secrets support ${VAR} interpolation - **added** — nanobot-api Docker service providing isolated OpenAI-compatible endpoint - **added** — GPT-5 model family support with proper temperature handling - **added** — Xiaomi MiMo provider for on-device inference - **added** — Baidu Qianfan provider for Chinese ecosystem - **added** — Email channel now extracts attachments with MIME filtering and filename sanitization - **added** — WhatsApp voice transcription via Groq/OpenAI Whisper - **added** — Feishu video downloads support - **added** — Telegram tool hints rendered as collapsible blockquotes and supports DM threads - **added** — reasoning_content chain-of-thought visibility through full message pipeline - **added** — Built-in grep and glob tools for agent code search - **added** — Langfuse integration for production observability - **changed** — Containers run as non-root by default - **changed** — API port binds to localhost by default - **changed** — SDK-level auto-retries disabled to prevent request amplification - **changed** — Azure retries no longer double-dip - **changed** — Legacy HISTORY.md files migrate automatically to new memory system - **changed** — Tool class refactored with proper JSON Schema for parameters - **changed** — Web search unified under WebToolsConfig with toggle controls - **changed** — /status command now shows web search provider usage alongside cache hit rates - **changed** — Test suite expanded to 1,142 tests - **fixed** — Exec tool no longer leaks host environment variables to the LLM - **fixed** — Dashscope and ModelArk proper thinking parameter control - **fixed** — WhatsApp bridge gained automatic local auth - **fixed** — Feishu auto-removes reactions after processing - **fixed** — Telegram splits oversized streamed replies - **fixed** — WeChat multimodal alignment continued - **added** — CLI gained --config flag for multi-instance setups 🐈 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](https://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 `CancelledError` without 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.md` files 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** — `exec` calls are now sandboxed via `bwrap` and 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 new `nanobot-api` Docker 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 `/status` now shows web search provider usage alongside cache hit rates. (#2815, #2530, #2812, #2810, #2793, #2520, #265 _[Truncated at 4000 characters — full notes: https://github.com/HKUDS/nanobot/releases/tag/v0.1.5]_ ### v0.1.4.post6 - Date: 2026-03-27 - Version: v0.1.4.post6 - Original notes: https://github.com/HKUDS/nanobot/releases/tag/v0.1.4.post6 - Permalink: https://whatsnew.fyi/product/nanobot/releases/v0.1.4.post6 - **changed** — Agent runtime was decomposed into composable pieces with a shared AgentRunner, unified lifecycle hooks in HookContext, and refactored command routing into a plugin-friendly structure - **changed** — Replaced litellm with native OpenAI and Anthropic SDKs for direct upstream communication - **changed** — Prompt cache optimization for Anthropic and proper max_completion_tokens handling for OpenAI o1 - **changed** — Gemini thought signature is now preserved - **changed** — Streaming output now flows end-to-end from provider to channel to CLI as a first-class path - **changed** — Feishu gained CardKit streaming support and queued stream deltas are coalesced to reduce API calls - **security** — Fixed email injection and spoofing vulnerability by verifying SPF/DKIM through Authentication-Results headers with verify_dkim and verify_spf enabled by default - **added** — Email content is tagged with [EMAIL-CONTEXT] to prevent LLM prompt injection from email bodies - **added** — WeChat (Weixin) joined as a full channel with HTTP long-poll, QR code login, and plugin 1.0.3 compatibility - **added** — Mistral and OVMS providers arrived - **added** — Step Fun provider joined the ecosystem - **changed** — Custom provider error reporting now returns raw API errors instead of opaque JSONDecodeError - **added** — Per-session concurrent dispatch capability - **added** — Native multimodal sensory capabilities added to agent - **changed** — Token estimation now counts all message fields - **changed** — Memory consolidation properly reserves completion headroom - **changed** — Agent loop handles CancelledError gracefully and records subagent results with correct roles - **added** — Onboard wizard became full-featured with timezone configuration - **changed** — CLI improvements include --dir option for multiple instances, /status for runtime info, -h works everywhere, and configurable timezone - **changed** — Feishu now supports streaming cards and code block parsing in post messages - **changed** — Telegram gained HTTP(S) URL media support and separated connection pools to prevent pool exhaustion 🐈 nanobot `v0.1.4.post6` is here — 57 PRs merged, 27 new contributors, and a release that's less about adding surface area than about rethinking what's underneath. Some releases are about what you can do. This one is about how cleanly you can do it. The agent runtime got formally decomposed, a major dependency was removed, streaming went end-to-end, and a security vulnerability was closed. Beneath the feature work, `v0.1.4.post6` is a structural turning point — the kind of release that makes the *next* release possible. ##### Highlights - **The agent runtime was decomposed into composable pieces** — A shared `AgentRunner` was extracted, lifecycle hooks were unified into a formal `HookContext`, and subagent progress is now preserved even on failure. Command routing was refactored into a plugin-friendly structure, and `process_direct` was unified to return `OutboundMessage` consistently. This isn't just cleanup — it's the foundation for pluggable agent behaviors, custom execution strategies, and third-party lifecycle integrations that are coming next. (#2524, #2541, #2388, #2338) - **litellm was replaced with native OpenAI + Anthropic SDKs** — The entire provider layer was rewritten to talk directly to upstream SDKs instead of routing through litellm. Prompt cache optimization for Anthropic, proper `max_completion_tokens` handling for OpenAI o1, and Gemini thought signature preservation all came along for the ride. If you've ever debugged a litellm traceback at 2am, you understand why this matters. (#2448, #1109, #2468, #2550, #2453) - **Streaming went end-to-end** — From provider to channel to CLI, streaming output now flows as a first-class path. Feishu gained CardKit streaming support, queued stream deltas are coalesced to reduce API calls, and the channel manager handles stream boundaries correctly. This is the difference between "the bot is typing..." and actually watching it think. (#2365, #2545, #2497) - **A security vulnerability was patched** — Email injection and spoofing via missing authentication verification has been fixed. Inbound emails now verify SPF/DKIM through `Authentication-Results` headers, with `verify_dkim` and `verify_spf` enabled by default. Email content is tagged with `[EMAIL-CONTEXT]` to prevent LLM prompt injection from email bodies. See the advisory for details. (GHSA-4gmr-2vc8-7qh3) - **WeChat support landed as a full channel** — WeChat (Weixin) joined the channel family with HTTP long-poll, QR code login, and plugin 1.0.3 compatibility. Alongside it, Telegram, QQ, WhatsApp, and Feishu all received cross-channel enhancements including retry mechanisms with exponential backoff. (#2412, #2428, #2386, #2478) - **Provider coverage kept expanding** — Mistral and OVMS providers arrived, Step Fun (阶跃星辰) joined the ecosystem, and custom provider error reporting got much more honest — raw API errors instead of opaque `JSONDecodeError`. nanobot continues to meet users wherever their models live. (#2199, #2472, #2289, #2139) - **The agent got smarter about resources** — Per-session concurrent dispatch landed, native multimodal sensory capabilities were added, token estimation now counts all message fields, and memory consolidation properly reserves completion headroom. The agent loop also handles `CancelledError` gracefully and records subagent results with correct roles. (#2393, #2304, #2344, #2378, #2239, #2104) - **Feishu and Telegram both leveled up** — Feishu gained streaming cards, code block parsing in post messages, and fixes for markdown rendering and media types. Telegram got HTTP(S) URL media support, separated connection pools to prevent pool exhaustion, and quieter network error logging. Small individually, substantial together. (#2545, #2246, #1814, #1755, #1793, #2247, #2272) - **CLI and onboarding became more capable** — A full-featured onboard wizard arrived, `--dir` enables multiple instances, `/status` shows runtime info, `-h` works everywhere, and timezon _[Truncated at 4000 characters — full notes: https://github.com/HKUDS/nanobot/releases/tag/v0.1.4.post6]_ ### v0.1.4.post5 - Date: 2026-03-16 - Version: v0.1.4.post5 - Original notes: https://github.com/HKUDS/nanobot/releases/tag/v0.1.4.post5 - Permalink: https://whatsnew.fyi/product/nanobot/releases/v0.1.4.post5 - **fixed** — Agent loops are less likely to crash - **fixed** — MCP connections now handle cancellation better - **fixed** — Orphaned tool results are preserved correctly - **fixed** — Async CLI and subagent output behaves more cleanly - **added** — Async background consolidation for memory - **changed** — Consolidation inputs are passed through more faithfully - **fixed** — Payloads are validated before persistence - **changed** — save_memory is enforced more consistently - **added** — Channel plugin architecture - **changed** — Channel discovery is now automatic - **changed** — Built-in channel and config boundaries are cleaner - **added** — Ollama support for local models - **added** — VolcEngine and BytePlus joined the provider ecosystem - **added** — Support for openrouter/* models - **changed** — Web search providers are now configurable with fallback behavior - **added** — Langsmith integration for better conversation tracking - **fixed** — Built-in skill packaging - **changed** — Filesystem and shell tooling improvements for pagination, fallback matching, and output behavior - **added** — Feishu reply and quote support 🐈 nanobot `v0.1.4.post5` is here — 57 PRs merged, 29 new contributors, and a release cycle shaped less by spectacle than by something quieter: careful refinement where it matters most. This is the kind of release that makes a project feel more trustworthy in daily use. The edges got smoother, the failure modes got softer, and the platform got broader. Across channels, providers, memory, MCP, CLI, and infrastructure, nanobot is becoming not just more capable, but more dependable — more like a tool you can actually live with. ##### Highlights - **Reliability took center stage** — A lot of this release is about making nanobot fail more gracefully. Agent loops are less likely to crash, MCP connections now handle cancellation better, orphaned tool results are preserved correctly, and async CLI/subagent output behaves more cleanly. (#1999, #1953, #2075, #1930, #2039) - **Memory became more practical** — Async background consolidation landed, consolidation inputs are passed through more faithfully, payloads are validated before persistence, and `save_memory` is enforced more consistently. This is a meaningful step toward memory that feels less magical and more reliable. (#1961, #1962, #1868, #1810, #1909) - **The channel layer keeps maturing** — Channel plugin architecture arrived, channel discovery is now automatic, and built-in channel/config boundaries are cleaner. That kind of structural work matters: it makes growth easier without making the system brittle. (#1982, #1888) - **Provider support keeps expanding outward** — Ollama support landed for local models, VolcEngine and BytePlus joined the ecosystem, `openrouter/*` models are supported, and web search providers are now configurable with fallback behavior. nanobot is increasingly meeting users where they already are. (#1863, #1608, #2026, #398) - **Observability and tooling got stronger** — Langsmith integration brings better conversation tracking, built-in skill packaging got fixed up, and smarter filesystem/shell tooling improves pagination, fallback matching, and output behavior. The system is becoming easier to inspect and easier to trust. (#1920, #1416, #1895) - **Feishu saw major polish** — Reply/quote support landed, tool calls can now render in code blocks, group mention behavior improved, Groq Whisper audio compatibility was fixed, and broader multimedia handling got much better. Feishu support feels substantially more complete after this cycle. (#1963, #1966, #1768, #1741, #2034) - **Telegram got meaningfully better in groups and media workflows** — Group response behavior is now configurable, reply-to-message context works across text and media, and media filename collision bugs were cleaned up. These are small details individually, but together they make conversations feel much more natural. (#1389, #1900, #1796) - **Enterprise and collaboration channels improved too** — WeCom channel support landed, Slack thread behavior was clarified, QQ legacy plain-text replies were restored, and DingTalk gained both voice recognition text retrieval and multimedia improvements. (#1327, #1784, #1941, #1859, #2034) - **CLI and runtime behavior are more predictable** — Gateway port defaults now respect config, restart flows are more portable, Windows compatibility got attention, and shell/workspace guards became stricter around home-expanded and tilde-based paths. This is the kind of work users only notice when it’s missing — which is exactly why it matters. (#1797, #1785, #1958, #1479, #1827, #1845) - **A lot of sharp edges disappeared** — Hidden files are no longer synced by accident, non-vision models won’t receive `image_url`, heartbeat and cron got less noisy, and version IDs now show up in logs. These aren’t flashy changes, but they make nanobot feel more settled, more deliberate, and more production-ready. (#1856, #1901, #1973, #2058) ##### Community A huge welcome to our **29 new contributors** in this release. Open source gro _[Truncated at 4000 characters — full notes: https://github.com/HKUDS/nanobot/releases/tag/v0.1.4.post5]_