- Dream's consolidation flow can now recognize repeated workflows and promote them into standalone workspace skills
- Auto compact feature that proactively summarizes older context during idle periods while preserving recent messages
- WebSocket channel that runs a WebSocket server with streaming events, token-based auth, per-connection sessions, and TLS support
- Anthropic's adaptive reasoning mode allowing Claude to decide when and how much to think
- MCP resources and prompts are now exposed as read-only tools that the agent can query directly
- Notebook editing tool added
- Kagi joined the web search provider lineup
- 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
- Telegram channel now supports location sharing
- Discord channel gained streaming replies and proxy support
- Feishu channel added done-emoji lifecycle, inline tool hints, and Lark global domain config
- QQ and WeCom channels received full media support
- Slack's message tool now resolves #channel_name and @user to real IDs
- API endpoint now accepts file uploads via JSON base64 and multipart with automatic document extraction for PDF, DOCX, XLSX, and PPTX
- Kimi thinking-capable models now receive automatic extra_body.thinking injection via reasoningEffort
- Non-Claude providers now get proper role alternation enforcement
- Multiple MCP servers now connect in isolated tasks instead of racing each other
- 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
- Retry amplification where a failed send would trigger cascading retries across all channels
- StepFun Plan API reasoning fields now fall back correctly
- Tool-call arguments are now normalized for strict providers that reject malformed JSON
- 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 withdisabledSkillsconfig 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
idleCompactAfterMinutesin config for fine-grained control. (#3007, #3081, #3093) -
WebSocket channel — connect anything — A new
websocketchannel runs a WebSocket server with streaming (delta+stream_endevents), 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
messagetool now resolves#channel_nameand@userto 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
adaptivereasoning mode landed, letting Claude decide when and how much to think. Kimi thinking-capable models (kimi-k2.5,k2.6-code-preview) now get automaticextra_body.thinkinginjection viareasoningEffort. 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_keyslets you selectively forward env vars, internal state files are write-protected, andworking_diroutside the workspace is rejected. (#2907, #3019, #3017, #2945, #2893, #2962, #3061) -
Cron stopped dropping jobs — Four separate cron fixes addressed reentrant store reloads during job execution, fixed-interval tasks duplicating due to concurrent store replacement, job config not reloading, and manual run state not being preserved. If you rely on scheduled tasks, this release is the one where they become boring. (#3038, #3034, #2895, #2930)
Community
Welcome to our 25 new contributors who made their first contribution in this release: @Bahtya, @LeoFYH, @xwind, @Xerxes-cn, @BalorLC3, @invictus-z, @zijiefang, @kronk307, @stutiredboy, @SHLE1, @RohitDayanand, @justforyoudear, @XJPeng12, @linziyanleo, @chenyahui, @JonasGao, @weitongtong, @danielphang, @mterhar, @ramonpaolo, @nikube, @yeyitech, @ravs-cyberrock, @samyzhh, and @razzh7.
v0.1.5.post1 reflects something we keep seeing in the commit log: the best contributions aren't always the flashiest ones. A cron race condition caught by @weitongtong. A retry amplification loop spotted by @Bahtya. A channel error path that silently swallowed messages, fixed by @yanghan-cyber. These are the changes that make an agent trustworthy — not because it can do more, but because it stops doing things wrong. 80 PRs later, nanobot is quieter, steadier, and a little more grown-up. That's worth celebrating.
Full Changelog: https://github.com/HKUDS/nanobot/compare/v0.1.5...v0.1.5.post1
What's Changed
- fix(matrix): correct e2eeEnabled camelCase alias mapping by @Bahtya in https://github.com/HKUDS/nanobot/pull/2877
- fix(filesystem): correct write success message from bytes to characters by @LeoFYH in https://github.com/HKUDS/nanobot/pull/2865
- fix: Matrix e2eeEnabled config alias and cron job name parameter (#2851, #2680) by @04cb in https://github.com/HKUDS/nanobot/pull/2855
- ci: add ruff lint check for unused imports and variables by @JiajunBernoulli in https://github.com/HKUDS/nanobot/pull/2847
- fix(docker): Windows CRLF breaks entrypoint.sh by @flobo3 in https://github.com/HKUDS/nanobot/pull/2883
- fix(cli): sanitize surrogate characters in prompt history by @Bahtya in https://github.com/HKUDS/nanobot/pull/2869
- fix(feishu): resolve mentions data and ensure access token initializationDev by @xwind in https://github.com/HKUDS/nanobot/pull/2885
- fix(runner): silent retry on empty response before finalization by @Re-bin in https://github.com/HKUDS/nanobot/pull/2889
- feat(agent): tool hint enhancement by @chengyongru in https://github.com/HKUDS/nanobot/pull/2884
- feat(memory):dream enhancement (#2887) by @chengyongru in https://github.com/HKUDS/nanobot/pull/2891
- fix(cron): fix not reload job config by @Xerxes-cn in https://github.com/HKUDS/nanobot/pull/2895
- feat(anthropic): add adaptive thinking mode by @BalorLC3 in https://github.com/HKUDS/nanobot/pull/2882
- docs: fix channel plugin guide — require Pydantic config model by @invictus-z in https://github.com/HKUDS/nanobot/pull/2850
- fix(memory): prevent potential loss of compressed session history by @LingaoM in https://github.com/HKUDS/nanobot/pull/2890
- fix(memory): add timestamp and cap to recent history injection by @Re-bin in https://github.com/HKUDS/nanobot/pull/2906
- feat(mcp): expose MCP resources and prompts as read-only tools by @Re-bin in https://github.com/HKUDS/nanobot/pull/2907
- chore: update .gitignore to include additional project-specific, build, test, and environment files by @JackLuguibin in https://github.com/HKUDS/nanobot/pull/2862
- fix(provider): fallback to reasoning field for StepFun Plan API by @zijiefang in https://github.com/HKUDS/nanobot/pull/2903
- fix(exec): add Windows support for shell command execution by @Re-bin in https://github.com/HKUDS/nanobot/pull/2893
- feat(agent): prompt behavior directives, tool descriptions, and loop robustness by @Re-bin in https://github.com/HKUDS/nanobot/pull/2912
- feat(telegram): add location/geo support by @kronk307 in https://github.com/HKUDS/nanobot/pull/2910
- feat: telegram support stream edit interval by @stutiredboy in https://github.com/HKUDS/nanobot/pull/2919
- fix(tool-hint): fold paths in exec commands and deduplicate by formatted string by @chengyongru in https://github.com/HKUDS/nanobot/pull/2926
- fix(cron): Concurrency issues by @Xerxes-cn in https://github.com/HKUDS/nanobot/pull/2930
- refactor(hook): add reraise flag to AgentHook and remove _LoopHookChain by @LingaoM in https://github.com/HKUDS/nanobot/pull/2918
- Fix version mismatch: use importlib.metadata as single source of truth by @Bahtya in https://github.com/HKUDS/nanobot/pull/2860
- fix(discord): enable streaming replies to avoid empty final response by @SHLE1 in https://github.com/HKUDS/nanobot/pull/2939
- fix(status): use consistent divisor for token count display by @LeoFYH in https://github.com/HKUDS/nanobot/pull/2951
- fix(dingtalk): #2696 by @RohitDayanand in https://github.com/HKUDS/nanobot/pull/2948
- fix(exec): forward complete Windows env to subprocesses by @justforyoudear in https://github.com/HKUDS/nanobot/pull/2941
- feat: unified session across channels via config toggle (closes #2798) by @wanghesong2019 in https://github.com/HKUDS/nanobot/pull/2900
- fix(helpers): ensure assistant message content is never None by @pixan-ai in https://github.com/HKUDS/nanobot/pull/2748
- fix(cli): remove default green style from Enabled column in tables by @XJPeng12 in https://github.com/HKUDS/nanobot/pull/2936
- fix(providers): enforce role alternation for non-Claude providers by @linziyanleo in https://github.com/HKUDS/nanobot/pull/2637
- feat(channels): add WebSocket server channel by @chengyongru in https://github.com/HKUDS/nanobot/pull/2964
- fix(agent): deliver LLM errors to streaming channels and avoid polluting session context by @yanghan-cyber in https://github.com/HKUDS/nanobot/pull/2963
- feat(exec): support allowed_env_keys to pass specified env vars to su… by @chenyahui in https://github.com/HKUDS/nanobot/pull/2962
- feat(channel): add proxy support for Discord channel by @JonasGao in https://github.com/HKUDS/nanobot/pull/2960
- fix: strip blocks from Gemma 4 and similar models by @chengyongru in https://github.com/HKUDS/nanobot/pull/2991
- feat(feishu): streaming resuming, inline tool hints, and done emoji by @chengyongru in https://github.com/HKUDS/nanobot/pull/2993
- fix(memory): harden consolidation with try/except on token estimation and chunk size cap by @franciscomaestre in https://github.com/HKUDS/nanobot/pull/2978
- fix(agent): Avoid truncate_text name shadowing by @yorkhellen in https://github.com/HKUDS/nanobot/pull/2997
- feat(cron): 添加 CronService.update_job 方法 by @weitongtong in https://github.com/HKUDS/nanobot/pull/3005
- fix(utils): anchor unclosed think-tag regex to string start (#3004) by @04cb in https://github.com/HKUDS/nanobot/pull/3020
- feat(agent): auto compact — proactive session compression by @chengyongru in https://github.com/HKUDS/nanobot/pull/3007
- fix(cron): 修复固定间隔任务因 store 并发替换导致的重复执行 by @weitongtong in https://github.com/HKUDS/nanobot/pull/3034
- fix(cron): guard _load_store against reentrant reload during job execution by @danielphang in https://github.com/HKUDS/nanobot/pull/3038
- feat: Add Kagi search by @mterhar in https://github.com/HKUDS/nanobot/pull/2945
- fix(mcp): support multiple MCP servers by connecting each in isolated… by @Qinnnnnn in https://github.com/HKUDS/nanobot/pull/3019
- feat(tool): improve file editing and add notebook tool by @Re-bin in https://github.com/HKUDS/nanobot/pull/3017
- fix(feishu): improve voice message download with detailed logging by @chengyongru in https://github.com/HKUDS/nanobot/pull/3041
- feat(agent): mid-turn message injection for responsive follow-ups by @chengyongru in https://github.com/HKUDS/nanobot/pull/3042
- feat(channels): Add full media support for QQ and WeCom channels by @chengyongru in https://github.com/HKUDS/nanobot/pull/3044
- fix(agent): preserve tool results on fatal error to prevent orphan tool_calls (#2943) by @04cb in https://github.com/HKUDS/nanobot/pull/3045
- feat(channels/feishu): add domain config for Lark global support by @chengyongru in https://github.com/HKUDS/nanobot/pull/3046
- feat(skills): add disabled_skills config to exclude skills from loading by @chenyahui in https://github.com/HKUDS/nanobot/pull/2959
- fix(shell): tighten exec safety guards (#2989, #2826) by @04cb in https://github.com/HKUDS/nanobot/pull/3061
- feat(agent): integrate skill discovery into Dream by @chengyongru in https://github.com/HKUDS/nanobot/pull/3048
- fix(retry): strip images in-place to prevent repeated error-retry cycles by @yanghan-cyber in https://github.com/HKUDS/nanobot/pull/3060
- fix(channels): prevent retry amplification and silent message loss across channels by @Bahtya in https://github.com/HKUDS/nanobot/pull/3053
- fix(provider): clarify local 502 recovery hints by @haosenwang1018 in https://github.com/HKUDS/nanobot/pull/3075
- fix(mcp): hint on stdio protocol pollution by @haosenwang1018 in https://github.com/HKUDS/nanobot/pull/3079
- fix: improve tool call parameter validation and error messages by @ramonpaolo in https://github.com/HKUDS/nanobot/pull/2859
- fix(agent): persist user message before running turn loop by @nikube in https://github.com/HKUDS/nanobot/pull/3076
- fix(agent): skip auto-compact for sessions with active agent tasks by @chengyongru in https://github.com/HKUDS/nanobot/pull/3081
- fix(provider): recover trailing assistant as user to prevent Zhipu 1214 by @chengyongru in https://github.com/HKUDS/nanobot/pull/3082
- docs(provider): clarify responses api routing by @haosenwang1018 in https://github.com/HKUDS/nanobot/pull/3089
- fix(log): remove noisy no-op logs from auto-compact by @chengyongru in https://github.com/HKUDS/nanobot/pull/3093
- fix(agent): drain injection queue on error/edge-case exit paths by @chengyongru in https://github.com/HKUDS/nanobot/pull/3110
- fix(web): serialize duckduckgo search calls by @yeyitech in https://github.com/HKUDS/nanobot/pull/3128
- test(loop): cover /stop checkpoint recovery by @yeyitech in https://github.com/HKUDS/nanobot/pull/3130
- feat: add HTTP health endpoint on gateway port by @ravs-cyberrock in https://github.com/HKUDS/nanobot/pull/2625
- fix(feishu): remove resuming and add streaming card fallback by @chengyongru in https://github.com/HKUDS/nanobot/pull/3133
- feat(slack): resolve named message targets by @yeyitech in https://github.com/HKUDS/nanobot/pull/3138
- feat(api): support file uploads via JSON base64 and multipart/form-data by @dividduang in https://github.com/HKUDS/nanobot/pull/2938
- fix: handle dict config in is_allowed() and _validate_allow_from() by @samyzhh in https://github.com/HKUDS/nanobot/pull/3153
- fix: normalize tool-call arguments for strict providers by @Michael-lhh in https://github.com/HKUDS/nanobot/pull/3154
- feat: show active task count in /status output by @aiguozhi123456 in https://github.com/HKUDS/nanobot/pull/3149
- fix: add retry termination notification to interaction channel by @aiguozhi123456 in https://github.com/HKUDS/nanobot/pull/3150
- feat(provider): enable Kimi thinking via extra_body for k2.5 and k2.6 by @razzh7 in https://github.com/HKUDS/nanobot/pull/3124
New Contributors
- @Bahtya made their first contribution in https://github.com/HKUDS/nanobot/pull/2877
- @LeoFYH made their first contribution in https://github.com/HKUDS/nanobot/pull/2865
- @xwind made their first contribution in https://github.com/HKUDS/nanobot/pull/2885
- @Xerxes-cn made their first contribution in https://github.com/HKUDS/nanobot/pull/2895
- @BalorLC3 made their first contribution in https://github.com/HKUDS/nanobot/pull/2882
- @invictus-z made their first contribution in https://github.com/HKUDS/nanobot/pull/2850
- @zijiefang made their first contribution in https://github.com/HKUDS/nanobot/pull/2903
- @kronk307 made their first contribution in https://github.com/HKUDS/nanobot/pull/2910
- @stutiredboy made their first contribution in https://github.com/HKUDS/nanobot/pull/2919
- @SHLE1 made their first contribution in https://github.com/HKUDS/nanobot/pull/2939
- @RohitDayanand made their first contribution in https://github.com/HKUDS/nanobot/pull/2948
- @justforyoudear made their first contribution in https://github.com/HKUDS/nanobot/pull/2941
- @XJPeng12 made their first contribution in https://github.com/HKUDS/nanobot/pull/2936
- @linziyanleo made their first contribution in https://github.com/HKUDS/nanobot/pull/2637
- @chenyahui made their first contribution in https://github.com/HKUDS/nanobot/pull/2962
- @JonasGao made their first contribution in https://github.com/HKUDS/nanobot/pull/2960
- @weitongtong made their first contribution in https://github.com/HKUDS/nanobot/pull/3005
- @danielphang made their first contribution in https://github.com/HKUDS/nanobot/pull/3038
- @mterhar made their first contribution in https://github.com/HKUDS/nanobot/pull/2945
- @ramonpaolo made their first contribution in https://github.com/HKUDS/nanobot/pull/2859
- @nikube made their first contribution in https://github.com/HKUDS/nanobot/pull/3076
- @yeyitech made their first contribution in https://github.com/HKUDS/nanobot/pull/3128
- @ravs-cyberrock made their first contribution in https://github.com/HKUDS/nanobot/pull/2625
- @samyzhh made their first contribution in https://github.com/HKUDS/nanobot/pull/3153
- @razzh7 made their first contribution in https://github.com/HKUDS/nanobot/pull/3124
Full Changelog: https://github.com/HKUDS/nanobot/compare/v0.1.5...v0.1.5.post1