Skip to content

Releases: nullclaw/nullclaw

v2026.4.17

17 Apr 23:16

Choose a tag to compare

What's Changed

  • v2026.4.9 by @DonPrus in #795
  • Migrate project to Zig 0.16 by @DonPrus in #823
  • fix(security): initialize docker sandbox mount args via factory | 修复(安全): 通过工厂初始化 Docker 沙箱挂载参数 by @manelsen in #801
  • fix(agent): persist cli turns into sqlite session history | 修复(agent): 将 CLI 对话持久化到 SQLite 会话历史 by @manelsen in #802
  • fix(providers): Responses API tool schema and null error handling by @fakhriaunur in #790
  • fix(agent): keep unbound sessions on the main agent | 修复(agent): 让未绑定会话始终落到主代理 main by @manelsen in #804
  • fix(config): allow local container hostnames for otel http | 修复(config): 允许 OTEL 使用本地容器主机名作为 HTTP endpoint by @manelsen in #803
  • fix(provider): fall back to responses on chat endpoint 404 | 修复(provider): chat 端点返回 404 时回退到 responses by @manelsen in #806
  • hardening(web): expire pairing tokens and tighten provider/browser boundaries | 加固(web): 为配对令牌添加过期并收紧 provider/browser 边界 by @manelsen in #807
  • service: add SysVinit fallback for nullclaw service install by @mark-os in #810
  • fix(compaction): fix UTF-8 truncation in history compaction by @wanderingmeow in #824
  • fix(security): require runnable linux sandboxes in auto-detect | 修复(安全): Linux 自动检测仅接受可实际运行的沙箱后端 by @manelsen in #805
  • fix(web_search): add setup guidance for missing providers | 修复(web_search): 为缺失搜索提供方补充设置指引 by @manelsen in #815
  • fix(doctor): clarify CLI-only channel status diagnostics | 修复(doctor): 澄清仅 CLI 场景下的 channel 状态诊断 by @manelsen in #828
  • fix(onboard): raise models refresh output budget | 修复(onboard): 提高模型目录刷新输出预算 by @manelsen in #813
  • fix(agent): stabilize named-agent provider lifetimes | 修复(agent): 稳定命名子代理提供方生命周期 by @manelsen in #814
  • feat(test): utility additions by @fakhriaunur in #787
  • feat: support http_proxy/https_proxy env vars in std.http.Client by @juvenn in #755
  • Add admin-oriented config and models CLI by @DonPrus in #829
  • Add Weixin QR auth flow and channel support by @DDGRCF in #818
  • ci: pin CI workflow actions and set permissions by @grtninja in #798
  • feat(telegram): add interactive skill menus and harden topic/codex handling by @vedmalex in #782
  • feat: dispatch agent on heartbeat when HEARTBEAT.md has tasks by @quinlanjager in #757
  • refactor(providers): consolidate error text predicates (EN | ZH) by @manelsen in #754
  • feat(test): Add tests for version, verbose, and web search providers by @fakhriaunur in #786

New Contributors

Full Changelog: v2026.4.9...v2026.4.17

v2026.4.9

10 Apr 01:10

Choose a tag to compare

What's Changed

  • docs: add beginner's guide for non-technical users (EN | ZH) | docs: 新手入门指南(英文 + 中文) by @manelsen in #750
  • release: package Windows binaries as zip archives | 发布(release): 将 Windows 二进制打包为 zip 归档 by @manelsen in #738
  • v2026.4.7 by @DonPrus in #785
  • fix(web): avoid immediate WebSocket disconnects on Windows | 修复(web): 避免 Windows 上 WebSocket 立即断开 by @manelsen in #742
  • fix(onboarding): pretty json config alignment on interactive onboarding by @kunalk16 in #794
  • fix: update build.zig.zon2json-lock for wasm3 and websocket by @jonathanhfmills in #792
  • telegram: improve interactive reply UX | 改进(telegram): 优化交互回复体验 by @manelsen in #726
  • providers(openrouter): preserve reasoning traces in stream | 修复(providers/openrouter): 保留流式 reasoning 轨迹 by @manelsen in #724
  • onboard(cli): improve model setup and catalog selection | 改进(onboard/cli): 优化模型配置与目录选择 by @manelsen in #725
  • fix(qq): retry delayed replies without msg_id | 修复(qq): 延迟回复在 msg_id 失效后改为普通发送重试 by @manelsen in #732
  • feat(channels): retry transient final outbound sends | 功能(channels): 为最终出站消息增加瞬时失败重试 by @manelsen in #731
  • feat(skills): support web-discovered skill installs | 功能(skills): 支持通过 Web 发现安装技能 by @manelsen in #735
  • fix(ollama): normalize scheduler tool aliases | 修复(ollama): 规范 scheduler 工具别名 by @manelsen in #744
  • refactor(tools): share file and web search helpers | 重构(tools): 共享文件与网页搜索辅助工具 by @manelsen in #745
  • config: fix custom provider primary model parsing | 修复(config): 修正自定义 provider 的主模型解析 by @manelsen in #728
  • feat(model-picker): add interactive multi-provider selection | 功能(model-picker): 增加交互式多 provider 选择 by @manelsen in #727
  • feat(channels): add durable outbound delivery outbox | 功能(channels): 增加持久化出站投递 outbox by @manelsen in #730
  • fix(config): validate agent provider by @fakhriaunur in #788
  • fix(providers): guard tool_calls and choices against null JSON values by @vernonstinebaker in #781
  • fix(cli): filter streamed tool-call markup by @vernonstinebaker in #761
  • onboard: respect container workspace defaults by @valonmulolli in #756
  • fix(observability): default OTLP endpoint to HTTPS | 修复(observability): OTLP 端点默认 HTTPS by @manelsen in #752
  • test(security): add tests for Sandbox interface and NoopSandbox | 测试(sandbox): 添加 Sandbox 接口测试 by @manelsen in #751
  • feat(providers): add session_id (user) and custom body parameters support | 特性(providers): 增加 session_id (user) 和自定义正文参数支持 by @manelsen in #709
  • fix(onboard): keep Docker Compose onboarding on volume-backed defaults | 修复(onboard): 保持 Docker Compose 初始化使用卷挂载默认路径 by @manelsen in #749

New Contributors

Full Changelog: v2026.4.7...v2026.4.9

v2026.4.7

08 Apr 00:22

Choose a tag to compare

What's Changed

  • v2026.4.4 by @DonPrus in #769
  • feat(lark): add reaction emoji support on message receipt by @Aisht669 in #704
  • fix(routing): always use "main" as the default agent fallback | 修复(routing): 始终使用 "main" 作为默认 Agent 回退 by @manelsen in #705
  • docs: clarify that config values do not support environment variable interpolation | 文档: 澄清配置值不支持环境变量插值 by @manelsen in #706
  • feat(tools): support reading Pushover credentials from process environment | 特性(tools): 支持从进程环境变量读取 Pushover 凭证 by @manelsen in #707
  • feat(tools): wire file_append tool into the runtime | 特性(tools): 将 file_append 工具接入运行时 by @manelsen in #708
  • feat(heartbeat): add detailed logging for heartbeat ticks | 特性(heartbeat): 增加 Heartbeat Tick 的详细日志 by @manelsen in #710
  • Add calculator tool for mathematical operations by @festoinc in #716
  • docs(config): document built-in WeChat channel setup | 文档(config): 补充内置 WeChat 渠道配置说明 by @manelsen in #718
  • fix(session): correct Discord scheduled DM delivery target | 修复(session): 更正 Discord 定时私聊投递目标 by @manelsen in #719
  • docs(external): document async login for plugins | 文档(external): 补充插件异步登录说明 by @manelsen in #736
  • fix(lark): add processing feedback placeholder before final reply | 修复(lark): 在最终回复前提供处理中占位反馈 by @manelsen in #720

New Contributors

Full Changelog: v2026.4.4...v2026.4.7

v2026.4.4

05 Apr 00:43

Choose a tag to compare

What's Changed

  • feat(cron): wire up session_target routing for agent jobs by @sanderdewijs in #666
  • fix(ollama): avoid empty chat responses by default / 修复 Ollama 默认空响应问题 by @manelsen in #668
  • v2026.3.21 by @DonPrus in #670
  • fix(web): clarify public-bind guidance for browser UI / 澄清浏览器 UI 公网绑定使用指引 by @manelsen in #672
  • fix(compatible): enable reasoning for custom vLLM/Qwen endpoints / 为自定义 vLLM/Qwen 兼容接口启用推理 by @manelsen in #669
  • docs: refine navigation and runtime guidance by @telagod in #713
  • docs: add reliability and model fallbacks section / 文档:新增可靠性与模型备选配置说明 by @manelsen in #695
  • fix(shell): stop hanging on interactive commands / 修复交互式命令导致挂起的问题 by @manelsen in #673
  • feat(inbound): debounce rapid-fire text across Telegram, Discord, and CLI / 为 Telegram、Discord 与 CLI 的连续文本消息增加入站防抖 by @manelsen in #676
  • provider: resolve explicit custom-url model refs by @juslintek in #681
  • fix(error_classify): handle msg field and image+not-supported pattern by @vernonstinebaker in #685
  • feat(a2a): multi-modal support — agent card capability, inlineData forwarding, vision probe by @vernonstinebaker in #686
  • fix: respect NULLCLAW_HOME in cron.zig config directory resolution by @realrubberduckdev in #692
  • fix/markdown timestamp temporal decay clean by @shkarlsson in #679
  • refactor(main): route Telegram and Signal startup through shared channel loops / 将 Telegram 与 Signal 的启动流程统一到共享轮询循环 by @manelsen in #677
  • feat(gateway): make HTTP body size limit and request timeout configurable by @vernonstinebaker in #687
  • feat(otel): enrich observability with channel attribution, delegation tracing, and skill load spans / 增强 OTEL 观测能力:新增渠道归属、委托追踪及技能加载耗时 by @manelsen in #693
  • feat: integrate sandbox support for shell tool execution by @shkarlsson in #678
  • fix(gemini-cli): align ACP handshake with Gemini CLI 0.34 / 使 gemini-cli 的 ACP 握手与 Gemini CLI 0.34 对齐 by @manelsen in #675
  • fix: telegram dupes, bifrost compatibility, and tool cache staleness / 修复 Telegram 重复消息、Bifrost 兼容性及工具缓存失效 by @manelsen in #694

New Contributors

Full Changelog: v2026.3.21...v2026.4.4

v2026.3.21

21 Mar 14:42

Choose a tag to compare

What's Changed

  • v2026.3.18 by @DonPrus in #639
  • feat(runtime): add wasm3 interpreter by default by @manelsen in #568
  • feat(agent): support configurable prompt timezone / 特性(agent): 支持可配置的提示词时区 by @manelsen in #546
  • fix(security): resolve absolute wasmtime executable path / 修复(security): 解析 wasmtime 可执行文件的绝对路径 by @manelsen in #536
  • [OneBot] auth hardening and operational health signal / [OneBot] 认证加固与运行健康信号 by @manelsen in #554
  • fix(agent): robustify tool-call parsing for malformed LLM outputs / 修复(agent): 增强对格式错误 LLM 输出的工具调用解析 by @manelsen in #551
  • fix(lark): improve websocket reconnect logging and permission diagnostics / 修复(lark): 改进 WebSocket 重连日志与权限诊断 by @manelsen in #552
  • [Lark] operations readiness runbook (EN/中文) / [Lark] 运维就绪手册(英/中) by @manelsen in #556
  • [QQ] websocket health signal hardening / [QQ] websocket 健康信号加固 by @manelsen in #555
  • [DingTalk] operations readiness runbook (EN/中文) / [DingTalk] 运维就绪手册(英/中) by @manelsen in #557
  • fix(providers): enable native_tools for z.ai/glm aliases / 修复(providers): 为 z.ai/glm 别名启用 native_tools by @manelsen in #577
  • feat(wecom+wechat): implement secure callbacks and passive replies / 特性(wecom+wechat): 实现安全回调与被动回复 by @manelsen in #559
  • fix(subagent): inject installed skills into delegated subagents / 修复(subagent): 将已安装的技能注入到委派的子代理中 by @manelsen in #558
  • fix(providers/compatible): return NoResponseContent when all fields are null/empty by @vernonstinebaker in #584
  • fix(fs): avoid statx-dependent makePath for Linux < 4.11 by @juvenn in #589
  • fix(compatible): handle kimi-k2.5 reasoning_content responses / 修复(compatible): 处理 kimi-k2.5 reasoning_content 响应 by @manelsen in #578
  • docs(agents): add §8.1 test coverage mandate by @vernonstinebaker in #590
  • feat(providers): make max_streaming_prompt_bytes configurable per-provider by @vernonstinebaker in #591
  • feat(providers): add Hunyuan (Tencent Cloud) and Baichuan to compat_providers / 特性(providers): 新增混元(腾讯云)与百川提供商 by @manelsen in #595
  • feat(security): Tencent platform crypto primitives (AES-256-CBC, TC3-HMAC-SHA256, WeChat SHA-1) / 特性(security): 腾讯平台加密原语 by @manelsen in #593
  • fix(providers): detect stalled SSE streams with curl speed-limit; cap non-streaming fallback timeout by @vernonstinebaker in #597
  • feat(channels): abstract OutboundPayload port + sendRich for DingTalk and Lark Card 2.0 / 特性(channels): 抽象富消息端口 + DingTalk/Lark Card 2.0 sendRich 实现 by @manelsen in #596
  • feat(providers): support Ollama cloud API key with Bearer auth by @juvenn in #615
  • docs: clarify workspace_path and system_prompt behavior by @vedmalex in #620
  • fix(memory): make durable recall work across sessions | 修复(memory): 让持久记忆在跨会话场景下正常召回 by @manelsen in #650
  • fix(agent): ensure profile-aware hot reload and add /config to telegram menu | 修复(agent): 确保 profile 感知的热重载并将 /config 添加至 Telegram 菜单 by @manelsen in #622
  • Add Gemini CLI as a local provider using ACP mode by @mailiam in #628
  • Use portable_atomic.zig to simplify u64 atomic access by @Centauria in #640
  • fix(cron): allow agent jobs to omit command field in cron.json by @yanggf8 in #643
  • fix(providers): fix GLM/ZhipuAI thinking mode and native tool_calls by @yanggf8 in #641
  • fix(config): allow http:// MCP URLs for localhost, private IPs, and Tailscale CGNAT range by @vernonstinebaker in #642
  • docs(a2a): expand protocol doc and examples + add config details and method reference by @hfreire in #649
  • fix: nix build error in NixOS-25.11 by @cloudsbit in #653
  • fix(cron): add --account flag to cron add-agent CLI by @yanggf8 in #645
  • fix(config): accept flat OTEL diagnostics fields | 修复(config): 兼容平铺式 OTEL diagnostics 配置字段 by @manelsen in #652
  • Surface provider API details in channel-loop errors | 在 channel-loop 错误中展示 provider API 细节 by @manelsen in #656
  • Avoid logged-errors in update curl skip path | 避免更新 curl 跳过路径触发 logged-errors by @manelsen in #655
  • feat(cron): expose live scheduler via HTTP API by @yanggf8 in #648
  • Add Xiaomi MiMo as an OpenAI-compatible provider | 新增 Xiaomi MiMo OpenAI 兼容提供方支持 by @manelsen in #654
  • Add onboarding-generated CONFIG.md guide | 新增 onboarding 生成的 CONFIG.md 配置指南 by @manelsen in #657
  • feat(telegram): add reply detection for bot messages in TelegramChannel by @byjk in #661
  • fix(observability): enrich OTEL spans and flush at turn boundaries | 修复(observability): 丰富 OTEL spans 并在回合边界刷新 by @manelsen in #660
  • fix(mcp): add Accept header and SSE response parsing for HTTP transport by @vernonstinebaker in #658
  • fix: Windows compatibility and DingTalk debugging by @young13shao in #662
  • fix(agent): enable empty-response retry and follow-through guardrail in streaming by @vernonstinebaker in #663
  • fix/responses add explicit responses mode for compatible providers by @DonPrus in #664
  • feat(provider): add OpenAI Responses mode for compatible providersCodex/OpenAI responses design by @ouraihub in #424

New Contributors

Full Changelog: v2026.3.18...v2026.3.21

v2026.3.18

19 Mar 02:57

Choose a tag to compare

What's Changed

  • v2026.3.17 by @DonPrus in #614
  • feat(providers): add Novita AI as OpenAI-compatible provider by @Alex-wuhu in #621
  • fix(docker): update container starter config to current schema | 修复(docker): 将容器初始配置更新为当前配置结构 by @manelsen in #636
  • fix(telegram): suppress draft retries for invalid peers | 修复(telegram): 对无效 peer 停止重试草稿请求 by @manelsen in #635
  • fix(matrix): use joined member count for private room detection | 修复(matrix): 使用已加入成员数判断私聊房间 by @manelsen in #634
  • fix(agent): inject configured AIEOS identity into system prompts | 修复(agent): 将已配置的 AIEOS identity 注入系统提示词 by @manelsen in #633
  • fix(nix): pin flake dev shell to Zig 0.15.2 | 修复(nix): 将 flake 开发环境固定为 Zig 0.15.2 by @manelsen in #637
  • fix(a2a): update to v0.3.0 + add new task states + refine message handling and enhance history support by @hfreire in #630

New Contributors

Full Changelog: v2026.3.17...v2026.3.18

v2026.3.17

18 Mar 02:18

Choose a tag to compare

What's Changed

  • v2026.3.15 by @DonPrus in #582
  • Add runtime observability wiring and OTLP support by @DonPrus in #600
  • feat(channels): add hardened external channel plugins by @DonPrus in #604
  • feat: per-agent workspace isolation by @DNature in #275
  • refactor(interactions): move command and callback rules into shared core / 重构(interactions): 将命令与回调规则移入共享核心 by @manelsen in #294
  • feat(session): claim-gated per-peer auto-provision with isolated runtimes / 特性(session): 带身份验证的按对等端自动配置与隔离运行时 by @manelsen in #297
  • fix(security): harden browser read URL handling / 修复(security): 加固浏览器读取工具的 URL 处理 by @manelsen in #532
  • fix(matrix): handle invites and sync policy by @manelsen in #610
  • feat(email): email channel with IMAP IDLE and community example by @sanderdewijs in #451
  • fix(providers): fall back to non-streaming on CurlWaitError for… by @brunojuliao in #608
  • fix(security): block yolo autonomy on non-loopback gateway / 修复(security): 在非 loopback 网关上阻止 yolo 自主模式 by @manelsen in #534
  • fix(security): implement secret key rotation / 修复(security): 实现机密密钥轮换 by @manelsen in #538
  • fix(config): encrypt persisted api keys in config.json by @manelsen in #609
  • fix(security): stop logging pairing code secrets / 修复(security): 停止记录 pairing code 秘钥 by @manelsen in #535
  • feat(service): add OpenRC support on Linux / feat(service): 支持 Linux OpenRC 服务管理 by @manelsen in #605
  • fix(tools): honor http_timeout_secs in http_request / 修复(tools): 在 http_request 中遵循 http_timeout_secs by @manelsen in #541
  • fix(security): warn on wildcard allowlist usage / 修复(security): 使用通配符白名单时发出警告 by @manelsen in #539
  • feat(channels): extend external plugin message actions by @DonPrus in #611
  • fix(cron): improve diagnostics when cron tasks are not running (fixes #592) by @yassinebkr in #598

Full Changelog: v2026.3.15...v2026.3.17

v2026.3.15

16 Mar 02:11

Choose a tag to compare

What's Changed

  • Bump version to 2026.3.14 by @DonPrus in #513
  • fix(cron): handle InvalidExe on macOS after in-place binary replacement by @vernonstinebaker in #522
  • Use portable Atomic for Slack channel by @Centauria in #523
  • fix(config): normalize legacy #topic: peer IDs in binding config by @vedmalex in #529
  • fix(security): redact oversized sensitive header names by @manelsen in #542
  • feat(http_request): include curl stderr in failure diagnostics by @manelsen in #544
  • fix(onboard): add yolo autonomy option to wizard by @manelsen in #545
  • fix(web): make websocket handshake size configurable by @manelsen in #573
  • docs: fix typos, sync zh/en parity, update stats and command table by @telagod in #563
  • fix(gateway): add port conflict detection before listen() by @lighterEB in #515
  • feat(providers): auto discover qwen-portal oauth token by @juvenn in #524
  • fix(http_request): make redaction buffer ownership explicit / 修复(http_request): 明确脱敏缓冲区的内存所有权 by @manelsen in #543
  • refactor(http_request): remove dead std.http migration helpers / 重构(http_request): 移除过时的 std.http 迁移辅助代码 by @manelsen in #560
  • fix(agent): suppress orphan closing tool-call tag from user-visible reply by @vernonstinebaker in #570
  • fix(mcp): ensure MCP tools are initialized in all tool-building paths by @vernonstinebaker in #567
  • refactor: remove dead code and redundant compilation tests / 重构: 移除过时代码与冗余编译测试 by @manelsen in #562
  • docs: add Discord channel documentation by @msb090219 in #528
  • fix(session): persist runtime slash settings across restores / 修复(session): 在会话恢复时持久化运行时斜杠命令设置 by @manelsen in #530
  • fix(security): use constant-time bearer token comparison / 修复(security): 使用等时比较验证 bearer 令牌 by @manelsen in #531
  • fix(security): enforce secrets encryption / 修复(security): 强制执行机密加密 by @manelsen in #537
  • docs(config): subagent routing and AIEOS identity examples / 文档(config): 子代理路由与 AIEOS 身份配置示例 by @manelsen in #547
  • fix(telegram): preserve attachment context when media processing fails / 修复(telegram): 媒体处理失败时保留附件上下文 by @manelsen in #548
  • fix(errors): actionable provider network error guidance / 修复(errors): 可操作的提供商网络错误指导 by @manelsen in #561
  • fix(http_request): reorder checks, allowlist SSRF bypass, HTTPS-only by @lighterEB in #526
  • fix(agent): prevent redundant tool execution via turn-scoped deduplication / 修复(agent): 通过轮次作用域去重防止冗余工具执行 by @manelsen in #572
  • feat(agent): hot reload for config and skills / 特性(agent): 支持配置与技能的热重载 by @manelsen in #571
  • feat(mcp): support stateful streaming-compatible MCP over HTTP by @sheauhuu in #566
  • fix(web): restore local WebChannel on Windows and vendor dependencies / 修复(web): 恢复 Windows 本地 WebChannel 并同步依赖项 by @manelsen in #550
  • docs: add Discord community links by @DonPrus in #581
  • fix(lark): stabilize card action callback in websocket mode by @Yandre97 in #564

New Contributors

Full Changelog: v2026.3.14...v2026.3.15

v2026.3.14

14 Mar 01:27

Choose a tag to compare

What's Changed

  • Fix/memory by @DonPrus in #486
  • fix(claude-cli): scope resume sessions to nullclaw sessions by @manelsen in #478
  • fix(claude-cli): harden resume session handling by @manelsen in #481
  • feat(onboard): use models.dev for model discovery by @manelsen in #480
  • fix(websocket): stop TLS connections from closing prematurely on empty reads by @kuzeofficial in #487
  • docs(agents): align naming contract with actual codebase conventions by @juvenn in #483
  • Add the binary file to the PATH in installation guide for Windows by @neoliuhua in #489
  • docs: ecosystem integration analysis and roadmap by @vedmalex in #501
  • fix(session): resolve dangling provider pointer in named-agent sessions by @vedmalex in #500
  • fix(agent): move single-message status lines to log.debug by @vernonstinebaker in #491
  • Make skill installation continue on individual skill failures by @EdmondFrank in #494
  • feat: integrate tunnel module into gateway startup by @lighterEB in #502
  • feat(channels): add Microsoft Teams channel by @ethanbrown3 in #438
  • fix(slack): persist interactive callbacks across HTTP requests by @manelsen in #505
  • feat(config): auto-detect file paths in agent system_prompt by @vedmalex in #459
  • fix(cli): honor --help for agent and gateway subcommands by @DonPrus in #511
  • fix(sse): accept no-space SSE data prefix by @BioniCosmos in #509

New Contributors

Full Changelog: v2026.3.13...v2026.3.14

v2026.3.13

13 Mar 04:02

Choose a tag to compare

What's Changed

Full Changelog: v2026.3.12...v2026.3.13