- Windows and Python 3.14 are now first-class supported platforms with full CI matrix coverage and runtime fixes
- The read_file tool now extracts text from DOCX, XLSX, and PPTX files including tables and grouped shapes
- OpenAI-compatible API /v1/chat/completions endpoint now emits SSE chunks when stream=true
- Microsoft Teams channel support
- MiniMax thinking endpoint with reasoning_effort to reasoning_split mapping
- LM Studio provider support with nullable API keys for local servers
- MyTool for agent introspection of its own runtime configuration with sensitive field hiding
- WebUI with WebSocket chat flow, i18n locale switcher, and dark-mode code-block theming available as source preview in webui/
- Session files now use atomic writes with corrupt-file repair to prevent history loss during bad shutdowns
- Memory cursor recovery now handles non-integer corruption
- Auto-compact skips sessions with active tasks and unifies summary injection across consolidation paths
- Telegram channel gained mid-stream splitting for long replies and improved markdown rendering
- Discord stopped treating bot-to-bot messages as self-loops and added channel-based allow-lists
- Email channel now deduplicates SPF/DKIM-rejected messages and ignores self-sent mailbox messages
- WebSocket channel now multiplexes multiple chat_ids over a single connection
- Providers now gain a circuit breaker for Responses API fallback
- ZhiPu rate limit 1302 recognition
- Cron tool schema now works with OpenAI Codex and Responses
- Retry heartbeats no longer spill into user channels
- 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_filetool 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/completionsnow emits SSE chunks whenstream=true, wiring up the existingon_stream/on_stream_endcallbacks. 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_splitmapping 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 incheckoutput 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 multiplechat_ids over a single connection. Heads up: this is source-preview only — the WebUI is intentionally not bundled into the published wheel yet. If you want to try it, clone the repo and run it fromwebui/. A packaged release will follow once the UX settles. (#3310, #3272, #3314, #3306)
Community
v0.1.5.post2 is what a release looks like when the foundation is done and people start finishing things. A Windows CI matrix from @JiajunBernoulli. Native Office document extraction from @aiguozhi123456. Session atomic writes from the same author, catching a real data-loss edge case. A Telegram mid-stream split that makes long replies actually readable. Twelve new contributors, and a lot of returning ones quietly landing the things that were on everyone's wish list. The agent runs on Windows. It reads your documents. It keeps its history even when the power blinks. And there's a UI taking shape in webui/ for whoever wants to peek. That's a post release doing post-release work — and then some.
What's Changed
- fix(agent): skip auto-compact for sessions with active agent tasks by @chengyongru in https://github.com/HKUDS/nanobot/pull/3085
- fix(provider): recover trailing assistant as user to prevent Zhipu 1214 by @chengyongru in https://github.com/HKUDS/nanobot/pull/3086
- fix(log): remove noisy no-op logs from auto-compact by @chengyongru in https://github.com/HKUDS/nanobot/pull/3094
- fix(log): only log auto-compact when messages are actually archived by @chengyongru in https://github.com/HKUDS/nanobot/pull/3099
- refactor(context): deduplicate system prompt by @chengyongru in https://github.com/HKUDS/nanobot/pull/3162
- fix(channel.wecom): inbound mixed msg parse by @dzydzydzy7 in https://github.com/HKUDS/nanobot/pull/3161
- fix(providers): guard chat_with_retry against explicit None max_tokens (#3102) by @04cb in https://github.com/HKUDS/nanobot/pull/3157
- fix(cron): respect deliver flag when agent produces output by @chengyongru in https://github.com/HKUDS/nanobot/pull/3168
- feat(provider): add MiniMax Anthropic endpoint for thinking mode 添加minimax的思考模式 by @Aisht669 in https://github.com/HKUDS/nanobot/pull/3160
- fix(discord): remove duplicate channel_id assignment in message handler by @LeoFYH in https://github.com/HKUDS/nanobot/pull/3178
- Add support for nullable API keys and LM Studio by @sohamb117 in https://github.com/HKUDS/nanobot/pull/3186
- fix(memory): handle missing cursor key in history entries by @JiajunBernoulli in https://github.com/HKUDS/nanobot/pull/3195
- feat(msteams): add Microsoft Teams channel by @chengyongru in https://github.com/HKUDS/nanobot/pull/3197
- fix(skills): use yaml.safe_load for frontmatter parsing to handle multiline descriptions by @yanghan-cyber in https://github.com/HKUDS/nanobot/pull/3141
- fix(status): correct context percentage and sync consolidator by @chengyongru in https://github.com/HKUDS/nanobot/pull/3209
- fix(api): prevent upload filename collisions and reject unsupported image URLs by @mohamed-elkholy95 in https://github.com/HKUDS/nanobot/pull/3187
- perf(tools): cache ToolRegistry.get_definitions() between mutations by @chengyongru in https://github.com/HKUDS/nanobot/pull/3210
- feat(agent): add MyTool for runtime self-inspection by @chengyongru in https://github.com/HKUDS/nanobot/pull/3177
- feat(api): afeat(api): add SSE streaming for /v1/chat/completions by @wanghesong2019 in https://github.com/HKUDS/nanobot/pull/3222
- feat: add channel-based filtering for Discord by @Lbin91 in https://github.com/HKUDS/nanobot/pull/3171
- feat(dream): git-based section age annotations for memory staleness by @chengyongru in https://github.com/HKUDS/nanobot/pull/3212
- fix: pass apiBase from config to transcription providers (Groq & OpenAI) by @chengyongru in https://github.com/HKUDS/nanobot/pull/3237
- feat(windows): Windows + Python 3.14 support — CI matrix, install markers, runtime fixes by @JiajunBernoulli in https://github.com/HKUDS/nanobot/pull/3194
- fix(agent): preserve user message to prevent GLM error 1214 by @chengyongru in https://github.com/HKUDS/nanobot/pull/3233
- fix(email): ignore self-sent mailbox messages by @yorkhellen in https://github.com/HKUDS/nanobot/pull/3228
- fix(exec): pass allowed_env_keys to exec tool calls in subagents by @mcampo in https://github.com/HKUDS/nanobot/pull/3238
- fix(docs): update channel plugin build backend to hatchling by @JiajunBernoulli in https://github.com/HKUDS/nanobot/pull/3192
- fix(memory): fall back to raw_archive on LLM error response by @chengyongru in https://github.com/HKUDS/nanobot/pull/3248
- fix: guard tool execution against non-compliant API gateway injection #3220 by @subalkum in https://github.com/HKUDS/nanobot/pull/3225
- fix: make cron tool schema require message for add action by @sicnuyudidi in https://github.com/HKUDS/nanobot/pull/3163
- fix(api): avoid success-style SSE termination after backend failure by @shaun0927 in https://github.com/HKUDS/nanobot/pull/3262
- fix(my-tool): hide sensitive nested config fields in check output by @shaun0927 in https://github.com/HKUDS/nanobot/pull/3261
- fix(utils): extract PPTX table cells and grouped shape text (#3250) by @04cb in https://github.com/HKUDS/nanobot/pull/3269
- fix(loop): persist subagent follow-up events in session history by @xzq-xu in https://github.com/HKUDS/nanobot/pull/3242
- fix(agent): stop leaking provider retry heartbeats to user channels by @SamZhu19921116 in https://github.com/HKUDS/nanobot/pull/3229
- feat(websocket): multiplex multiple chat_ids over a single connection by @Re-bin in https://github.com/HKUDS/nanobot/pull/3272
- refactor(templates): separate identity and SOUL responsibilities by @chengyongru in https://github.com/HKUDS/nanobot/pull/3275
- feat(wizard): add Channel Common, API Server menus and constraint validation by @chengyongru in https://github.com/HKUDS/nanobot/pull/3273
- feat: add issue templates by @chengyongru in https://github.com/HKUDS/nanobot/pull/3287
- fix: prevent GitStore from creating nested repos and overwriting .gitignore by @longle325 in https://github.com/HKUDS/nanobot/pull/3289
- fix: harden cron tool contract by @yeyitech in https://github.com/HKUDS/nanobot/pull/3125
- fix(config): return provider default api base in config resolution by @morandot in https://github.com/HKUDS/nanobot/pull/3112
- fix(cli): respect sys.stdout.isatty() in stream renderer (#3265) by @pixan-ai in https://github.com/HKUDS/nanobot/pull/3271
- docs: refactor README into a docs-first landing page by @Re-bin in https://github.com/HKUDS/nanobot/pull/3306
- fix: unify summary injection strategy between token consolidation and auto-compact by @JiajunBernoulli in https://github.com/HKUDS/nanobot/pull/3304
- fix(providers): add circuit breaker for Responses API fallback by @chengyongru in https://github.com/HKUDS/nanobot/pull/3302
- feat(webui): add initial browser UI with websocket chat and i18n by @Re-bin in https://github.com/HKUDS/nanobot/pull/3310
- fix(cron): drop top-level oneOf so OpenAI Codex/Responses accept tool schema by @coldxiangyu163 in https://github.com/HKUDS/nanobot/pull/3295
- fix(discord): allow bot-to-bot messaging, only drop self-loops (#3217) by @pixan-ai in https://github.com/HKUDS/nanobot/pull/3280
- fix(session): prevent data loss with atomic writes and corrupt-file repair by @aiguozhi123456 in https://github.com/HKUDS/nanobot/pull/3312
- style(webui): improve typography and code block rendering by @chengyongru in https://github.com/HKUDS/nanobot/pull/3314
- fix: suppress intermediate progress output in cron jobs by @chengyongru in https://github.com/HKUDS/nanobot/pull/3320
- fix(agent): align subagent result session key with main agent for mid-turn injection by @chengyongru in https://github.com/HKUDS/nanobot/pull/3321
- fix(email): deduplicate SPF/DKIM-rejected emails to stop log spam by @chengyongru in https://github.com/HKUDS/nanobot/pull/3325
- feat(telegram): mid-stream split in send_delta by @chengyongru in https://github.com/HKUDS/nanobot/pull/3329
- fix(utils): strip malformed think tags and harmony channel markers by @hlgone in https://github.com/HKUDS/nanobot/pull/3327
- fix(loop): preserve partial context when /stop cancels a task by @hussein1362 in https://github.com/HKUDS/nanobot/pull/3299
- fix(anthropic): strip trailing assistant messages to prevent prefill error by @hussein1362 in https://github.com/HKUDS/nanobot/pull/3297
- fix(mcp): retry once on transient connection errors by @hussein1362 in https://github.com/HKUDS/nanobot/pull/3338
- agent: use ContextVar for tool routing context by @chengyongru in https://github.com/HKUDS/nanobot/pull/3345
- fix(memory): harden cursor recovery against non-integer corruption by @MuataSr in https://github.com/HKUDS/nanobot/pull/3340
- fix(retry): recognize ZhiPu 1302 rate-limit error for retry by @chengyongru in https://github.com/HKUDS/nanobot/pull/3356
- fix(telegram): improve markdown rendering for modern LLM output by @hussein1362 in https://github.com/HKUDS/nanobot/pull/3355
- fix(commands): intercept non-priority commands during active turn by @chengyongru in https://github.com/HKUDS/nanobot/pull/3359
- fix(utils/document): use try/finally in _extract_xlsx to ensure workbook is always closed by @XJPeng12 in https://github.com/HKUDS/nanobot/pull/3353
- feat(read_file): add DOCX, XLSX, PPTX office document support by @aiguozhi123456 in https://github.com/HKUDS/nanobot/pull/3336
- Fix/minimax reasoning split by @lahuman in https://github.com/HKUDS/nanobot/pull/3363
New Contributors
- @dzydzydzy7 made their first contribution in https://github.com/HKUDS/nanobot/pull/3161
- @Aisht669 made their first contribution in https://github.com/HKUDS/nanobot/pull/3160
- @sohamb117 made their first contribution in https://github.com/HKUDS/nanobot/pull/3186
- @Lbin91 made their first contribution in https://github.com/HKUDS/nanobot/pull/3171
- @mcampo made their first contribution in https://github.com/HKUDS/nanobot/pull/3238
- @sicnuyudidi made their first contribution in https://github.com/HKUDS/nanobot/pull/3163
- @SamZhu19921116 made their first contribution in https://github.com/HKUDS/nanobot/pull/3229
- @longle325 made their first contribution in https://github.com/HKUDS/nanobot/pull/3289
- @hlgone made their first contribution in https://github.com/HKUDS/nanobot/pull/3327
- @hussein1362 made their first contribution in https://github.com/HKUDS/nanobot/pull/3299
- @MuataSr made their first contribution in https://github.com/HKUDS/nanobot/pull/3340
- @lahuman made their first contribution in https://github.com/HKUDS/nanobot/pull/3363
Full Changelog: https://github.com/HKUDS/nanobot/compare/v0.1.5.post1...v0.1.5.post2