π nanobot v0.1.4.post3 just dropped β 33 PRs merged, 16 new contributors! You guys are unstoppable π₯
This release is all about making the agent smarter by seeing less junk: cleaner context, hardened session history, and fewer ghost messages. Less noise in β less hallucination out. Plus a shiny new Matrix channel and experimental thinking mode.
Highlights
- Agent Loop Hardening β Empty assistant messages (no content, no tool calls) are now filtered instead of poisoning context; LLM error responses are no longer saved to history, preventing permanent 400-error loops; message tool suppression scoped to same-channel only (#1314, #1198, #1206)
- Context Noise Reduction β Runtime metadata (time, channel, chat ID) separated into an untrusted layer and excluded from session history, so the agent sees only what matters β fewer tokens, less confusion, less hallucination (#1126, #1222)
- Session Safety β Base64 images stripped from history to prevent context overflow; null responses no longer corrupt future turns (#1191, #1314)
- Matrix Channel β Full Matrix (Element) chat channel support with E2EE, media uploads, and typing indicators (#420, #1239)
- Provider Compatibility β Short alphanumeric
tool_call_idfor Mistral; list-type tool arguments handled gracefully; explicit provider selection in config (#1293, #1294, #1214, #1316) - Thinking Mode (experimental) β New
reasoning_effortconfig enables LLM reasoning for supported models; session history preservesreasoning_contentandthinking_blocksacross turns (#1351, #1330, #1074) - Subagent Improvements β
/stopcancels spawned subagents; streamlined prompt eliminates dead code and reuses ContextBuilder (#1180, #1347) - Feishu β Interactive card text extraction fix, configurable reaction emoji, corrected bot permissions (#1323, #1257, #1317, #1348)
- DingTalk β Images and media sent as proper message types instead of plain-text links (#1337)
- Telegram β Media groups aggregated into a single inbound message (#1258)
- QQ β Fixed C2C reply permissions, disabled file log on read-only filesystems (#1307, #1346)
- WhatsApp β Message deduplication prevents redundant agent processing (#1325)
- Shell & Security β Full Windows path parsing in workspace guard; configurable
path_appendfor subprocess PATH (#1286, #1083) - Memory & Concurrency β WeakValueDictionary for consolidation locks eliminates race conditions and manual cleanup (#1326)
- Workspace β Automatic template synchronization restores critical files on startup (#1253)
What's Changed
- fix: preserve reasoning_content in messages for thinking-enabled models by @haosenwang1018 in #1074
- feat/fix(exec): add path_append config to extend PATH for subprocess by @aiguozhi123456 in #1083
- feat: add stable system layer + untrusted runtime context layer by @pikaxinge in #1126
- feat: /stop cancels spawned subagents via session tracking by @coldxiangyu163 in #1180
- feat: support explicit provider selection in config by @Re-bin in #1214
- Fix assistant messages without tool calls not being saved to session history by @VITOHJL in #1198
- Fix: The base64 images are stored in the session history, causing context overflow. by @dxtime in #1191
- feat: add Matrix (Element) chat channel support by @tanishra in #420
- fix(agent): only suppress final reply when message tool sends to same⦠by @chengyongru in #1206
- fix(web): use self.api_key instead of undefined api_key by @yongPhone in #1228
- fix(telegram): aggregate media groups into a single inbound message by @KimGLee in #1258
- feat(feishu): make reaction emoji configurable by @kimkitsuragi26 in #1257
- feat: automatic workspace template synchronization by @honjiaxuan in #1253
- Fix Matrix channel initialization and configuration by @tanishra in #1239
- fix(agent): avoid persisting runtime context metadata into history by @KimGLee in #1222
- fix: update heartbeat tests to match two-phase tool-call architecture by @intelliot in #1200
- Fix(prompt): guide llm grep using timestamp by @aiguozhi123456 in #1278
- fix: generate short alphanumeric tool_call_id for Mistral compatibility by @Re-bin in #1293
- fix: remove overly broad "codex" keyword from openai_codex provider by @nikolasdehor in #1316
- fix: prevent session poisoning from null/error LLM responses by @nikolasdehor in #1314
- fix the feishu interactive message text cannot be extracted by @azhengzz in #1323
- Modify Feishu bot permissions in README by @yankeguo in #1317
- fix: pass msg_id in QQ C2C reply to avoid proactive message permissio⦠by @GabrielWithTina in #1307
- fix: handle list-type tool arguments in _tool_hint by @Michael-lhh in #1294
- fix(shell): parse full Windows absolute paths in workspace guard by @fengxiaohu in #1286
- refactor: use WeakValueDictionary for consolidation locks by @Re-bin in #1326
- fix: add message deduplication to WhatsApp channel by @spartan077 in #1325
- feat(dingtalk): send images as image messages, keep files as attachments by @asdf17128 in #1337
- refactor: streamline subagent prompt by reusing ContextBuilder and SkillsLoader by @Re-bin in #1347
- fix(qq): disable botpy file log to fix read-only filesystem error by @zerone0x in #1346
- feat: add reasoning_effort config to enable LLM thinking mode by @Re-bin in #1351
- fix(lark): Remove non-existent stop() call on Lark ws.Client when enable lark channel by @yorkhellen in #1348
- fix(providers): allow reasoning_content in message history by @fengxiaohu in #1330
New Contributors
- @aiguozhi123456 made their first contribution in #1083
- @VITOHJL made their first contribution in #1198
- @tanishra made their first contribution in #420
- @yongPhone made their first contribution in #1228
- @kimkitsuragi26 made their first contribution in #1257
- @honjiaxuan made their first contribution in #1253
- @intelliot made their first contribution in #1200
- @azhengzz made their first contribution in #1323
- @yankeguo made their first contribution in #1317
- @GabrielWithTina made their first contribution in #1307
- @Michael-lhh made their first contribution in #1294
- @fengxiaohu made their first contribution in #1286
- @spartan077 made their first contribution in #1325
- @asdf17128 made their first contribution in #1337
- @zerone0x made their first contribution in #1346
- @yorkhellen made their first contribution in #1348
Full Changelog: v0.1.4.post2...v0.1.4.post3