github HKUDS/nanobot v0.1.4.post5

6 hours ago

🐈 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 grows in two ways: through bold new ideas, and through the patient work of noticing rough edges and smoothing them out. v0.1.4.post5 has plenty of both. Thank you to everyone who contributed features, fixes, refactors, docs, and infrastructure improvements — nanobot is becoming stronger not all at once, but through many careful hands moving it forward together.

Full Changelog: v0.1.4.post4...v0.1.4.post5

What's Next

Looking ahead, we’ll continue moving nanobot toward a more modular, plugin-oriented ecosystem. As a first step, we plan to experiment and iterate in the channel layer first — using channels as the proving ground for a more extensible architecture before expanding that approach further across the project.

We’ll also keep using the nightly branch for faster testing, earlier feedback, and quicker iteration on new ideas. If you’re interested in helping shape that future, we’d warmly welcome contributions there. You can find the contribution workflow and guidelines in CONTRIBUTING.md.

And one more small note: v0.1.4.post5 will likely be the last release in the 0.1.4 line. It closes out this cycle with a lot of polish and hard-earned stability — and also makes room for what comes next.

The next main version is already taking shape, and we think it will be worth the wait. 😉

What's Changed

  • fix: ensure feishu audio file has .opus extension for Groq Whisper compatibility by @chengyongru in #1741
  • fix(slack): define thread usage in send() by @ailuntz in #1784
  • fix(cli): let gateway use config port by default by @Protocol-zero-0 in #1797
  • fix(cli): respect config.gateway.port in gateway command by @ailuntz in #1785
  • fix(telegram): add group_policy to control bot response behavior in groups by @haosenwang1018 in #1389
  • Add missing scripts to built-in skill skill-creator by @yankeguo in #1416
  • feat: add LLM retry with exponential backoff for transient errors by @kiplangatkorir in #1512
  • refactor: implement token-based context compression mechanism by @VITOHJL in #1704
  • fix: bump litellm version to 1.82.1 for Moonshot provider support by @greyishsong in #1855
  • feat: support retrieving DingTalk voice recognition text by @dingyanyi2019 in #1859
  • fix(subagent): preserve reasoning_content in assistant messages by @lailoo in #1848
  • fix: exclude hidden files when syncing workspace templates by @yapex in #1856
  • Add WeChat Work (WeCom) channel support by @chengyongru in #1327
  • feat: add Ollama as a local LLM provider by @letzdoo-js in #1863
  • fix(memory): pass temperature, max_tokens and reasoning_effort to memory consolidation by @ethanclaw in #1868
  • refactor: auto-discover channels via pkgutil, eliminate hardcoded registry by @Re-bin in #1888
  • feat: allow direct references in hatch metadata for wecom dep by @for13to1 in #1885
  • Fix Gemini thought_signature loss in tool-call replay by @WhalerO in #1874
  • fix(exec): enforce workspace guard for home-expanded paths by @suger-m in #1827
  • enhance: improve filesystem & shell tools with pagination, fallback matching, and smarter output by @Re-bin in #1895
  • fix: detect tilde paths in restrictToWorkspace shell guard by @nikolasdehor in #1845
  • fix: wecom-aibot-sdk-python should use pypi version by @chengyongru in #1897
  • fix: force save_memory in consolidation by @Re-bin in #1909
  • feat(channels): add "restart" command by @groudas in #1751
  • feat(feishu): add global group mention policy by @Zeknes in #1768
  • feat(telegram): support reply-to-message context (text and media) by @Schokobecher in #1900
  • feat: Add VolcEngine and BytePlus (Pay-per-use & Coding Plan) support by @Maaannnn in #1608
  • fix: preserve interactive CLI formatting for async subagent output by @ducheng121 in #1930
  • fix: catch BaseException in MCP connection to handle CancelledError by @chengyongru in #1953
  • fix(qq): restore plain text replies for legacy clients by @tsubasakong in #1941
  • [紧急]修复we_chat在pyproject.toml配置的问题 by @ALIZE126 in #1919
  • fix(restart): use -m nanobot for Windows compatibility by @chengyongru in #1958
  • fix(memory): validate save_memory payload before persisting by @shenchengtsi in #1810
  • feat(ci): add GitHub Actions workflow for test directory by @JiajunBernoulli in #1916
  • docs: correct BaiLian dashscope apiBase endpoint by @tsubasakong in #1949
  • Integrate Langsmith for conversation tracking by @korruz in #1920
  • feat(web): add configurable web search providers with key-missing fallback by @chris-alexander in #398
  • chore: bump wecom-aibot-sdk-python to >=0.1.5 by @chengyongru in #1981
  • feat: channel plugin architecture with decoupled configs by @Re-bin in #1982
  • fix(channels login): add shell=True for npm subprocess calls on Windows by @gongpx20069 in #1479
  • fix(cron, heartbeat): prevent notification spam from cron and heartbeat tasks by @SJK-py in #1973
  • feat:在MCP注册时指定启用工具以便让agent识别更准确并且减少token消耗 by @lvqiushi in #1965
  • fix: add exception handling to prevent agent loop crash by @chengyongru in #1999
  • fix(telegram): avoid media filename collisions by @Protocol-zero-0 in #1796
  • feat(feishu): implement message reply/quote support by @mru4913 in #1963
  • feat(feishu): display tool calls in code block messages + fix empty  by @nne998 in #1966
  • Support openrouter/* models by @rick2047 in #2026
  • fix: filter image_url for non-vision models at provider layer by @coldxiangyu163 in #1901
  • Fix builtin skills inaccessible when restrictToWorkspace is enabled by @benlenarts in #2037
  • Feat/dingtalk multimedia enhance by @chengyongru in #2034
  • fix(heartbeat): inject current datetime into Phase 1 prompt by @who96 in #2038
  • docs: add branching strategy and CONTRIBUTING guide by @chengyongru in #2021
  • fix(loop): restore /new immediate return with safe background consolidation by @chengyongru in #1962
  • feat: implement async memory background consolidation by @nne998 in #1961
  • Fix orphan tool results in truncated session history by @xx2689 in #2075
  • fix(cli): stop spinner before printing tool progress lines by @who96 in #2039
  • qol: add version id to log output by @pve in #2058

New Contributors

Full Changelog: v0.1.4.post4...v0.1.4.post5

Don't miss a new nanobot release

NewReleases is sending notifications on new releases.