github HKUDS/nanobot v0.1.4.post3

one day ago

🐈 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_id for Mistral; list-type tool arguments handled gracefully; explicit provider selection in config (#1293, #1294, #1214, #1316)
  • Thinking Mode (experimental) β€” New reasoning_effort config enables LLM reasoning for supported models; session history preserves reasoning_content and thinking_blocks across turns (#1351, #1330, #1074)
  • Subagent Improvements β€” /stop cancels 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_append for 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

Full Changelog: v0.1.4.post2...v0.1.4.post3

Don't miss a new nanobot release

NewReleases is sending notifications on new releases.