## 2026.1.23
### 主要更新
- **TTS**:将 Telegram TTS 移入核心功能,并默认启用基于模型的 TTS 标签,以实现富有表现力的音频回复。(#1559) 感谢 @Glucksberg。https://docs.clawd.bot/tts
- **网关**:新增 `/tools/invoke` HTTP 端点,用于直接调用工具(强制执行身份验证和工具策略)。(#1575) 感谢 @vignesh07。https://docs.clawd.bot/gateway/tools-invoke-http-api
- **心跳**:新增按频道的可见性控制(正常/告警/指示器)。(#1452) 感谢 @dlauer。https://docs.clawd.bot/gateway/heartbeat
- **部署**:新增 Fly.io 部署支持及指南。(#1570) https://docs.clawd.bot/platforms/fly
- **频道**:新增 Tlon/Urbit 频道插件(支持私信、群组提及和主题回复)。(#1544) 感谢 @wca4a。https://docs.clawd.bot/channels/tlon
### 变更
- **频道**:允许跨内置及插件频道设置按群组的工具允许/拒绝策略。(#1546) 感谢 @adam91holt。https://docs.clawd.bot/multi-agent-sandbox-tools
- **智能体**:新增 Bedrock 自动发现默认值及配置覆盖功能。(#1553) 感谢 @fal3。https://docs.clawd.bot/bedrock
- **CLI**:新增 `clawdbot system` 命令用于系统事件和心跳控制;移除独立的 `wake` 命令。(提交 71203829d) https://docs.clawd.bot/cli/system
- **CLI**:在 `clawdbot models status` 中新增实时身份验证探测,用于按配置文件进行验证。(提交 40181afde) https://docs.clawd.bot/cli/models
- **CLI**:默认在 `clawdbot update` 后重启网关;新增 `--no-restart` 选项以跳过重启。(提交 2c85b1b40)
- **浏览器**:为远程网关新增节点主机代理自动路由功能(可按网关/节点配置)。(提交 c3cb26f7c)
- **插件**:为工作流新增可选的 `llm-task` 纯 JSON 工具。(#1498) 感谢 @vignesh07。https://docs.clawd.bot/tools/llm-task
- **Markdown**:新增按频道进行表格转换功能(Signal/WhatsApp 使用项目符号,其他平台使用代码块)。(#1495) 感谢 @odysseus0。
- **智能体**:系统提示仅保留时区信息,并将当前时间移至 `session_status` 以提高缓存命中率。(提交 66eec295b)
- **智能体**:从工具注册/显示中移除冗余的 bash 工具别名。(#1571) 感谢 @Takhoffman。
- **文档**:新增 cron 与心跳决策指南(附 Lobster 工作流说明)。(#1533) 感谢 @JustYannicc。https://docs.clawd.bot/automation/cron-vs-heartbeat
- **文档**:澄清 HEARTBEAT.md 空文件会跳过心跳,而文件缺失则仍会运行。(#1535) 感谢 @JustYannicc。https://docs.clawd.bot/gateway/heartbeat
### 修复
- **会话**:在保持智能体作用域的同时,接受非 UUID 的 sessionId 用于历史记录/发送/状态查询。(#1518)
- **消息/会话**:将外发消息镜像到目标会话键(主题 + dmScope),在发送时创建会话条目,并规范化会话键的大小写。(#1520, 提交 4b6cdd1d3)
- **会话**:拒绝基于数组的会话存储,以防止静默数据擦除。(#1469)
- **网关**:比较 Linux 进程启动时间以避免 PID 回收导致的锁循环;除非过期,否则保持锁。(#1572) 感谢 @steipete。
- **网关**:在执行批准请求中接受可选的空字段。(#1511) 感谢 @pvoo。
- **执行批准**:持久化允许列表条目 ID 以保持 macOS 允许列表行的稳定性。(#1521) 感谢 @ngutman。
- **执行**:为提升的批准请求遵循 tools.exec ask/security 默认值(避免不必要的提示)。(提交 5662a9cdf)
- **守护进程**:在构建最小服务路径时使用平台 PATH 分隔符。(提交 a4e57d3ac)
- **Linux**:在 systemd PATH 中包含环境配置的用户 bin 根目录,并统一 PATH 审计。(#1512) 感谢 @robbyczgw-cla。
- **Tailscale**:仅针对权限错误重试 serve/funnel 并使用 sudo,并保留原始失败详情。(#1551) 感谢 @sweepies。
- **Docker**:更新 docker-compose 和 Hetzner 指南中的网关命令。(#1514)
- **智能体**:当最后一次助手轮次仅调用了工具时,显示工具错误回退(防止静默停止)。(提交 8ea8801d0)
- **智能体**:解析身份时忽略 IDENTITY.md 模板占位符。(#1556)
- **智能体**:在切换模型时丢弃孤立的 OpenAI Responses 推理块。(#1562) 感谢 @roshanasingh4。
- **智能体**:在"智能体在回复前失败"消息中添加 CLI 日志提示。(#1550) 感谢 @sweepies。
- **智能体**:警告并忽略仅引用未知或未加载插件工具的工具允许列表。(#1566)
- **智能体**:将仅包含插件的工具允许列表视为选择性加入;保持核心工具启用。(#1467)
- **智能体**:遵循嵌入式运行的入队覆盖设置,以避免测试中的队列死锁。(提交 084002998)
- **Slack**:在消息和斜杠命令门控中,对未列出频道遵循开放的 groupPolicy。(#1563) 感谢 @itsjaydesu。
- **Discord**:将自动主题提及绕过限制在机器人拥有的主题内;保持确认反应受提及门控。(#1511) 感谢 @pvoo。
- **Discord**:重试受速率限制的允许列表解析和命令部署,以避免网关崩溃。(提交 f70ac0c7c)
- **提及**:在群组聊天(Slack/Discord/Telegram/WhatsApp)中,当存在另一个显式提及时,忽略 mentionPattern 匹配。(提交 d905ca0e0)
- **Telegram**:在媒体标题中渲染 Markdown。(#1478)
- **MS Teams**:从 Graph 作用域和 Bot Framework 探测作用域中移除 `.default` 后缀。(#1507, #1574) 感谢 @Evizero。
- **浏览器**:当扩展程序在切换标签页后重用会话 ID 时,保持扩展中继标签页可控。(#1160)
- **语音唤醒**:在 iOS/Android 上,在失去焦点/提交时自动保存唤醒词,并与 macOS 的限制保持一致。(提交 69f645c66)
- **UI**:在滚动长页面时保持控制台 UI 侧边栏可见。(#1515) 感谢 @pookNast。
- **UI**:缓存控制台 UI 的 Markdown 渲染结果,并记忆聊天文本提取以减少 Safari 输入卡顿。(提交 d57cb2e1a)
- **TUI**:转发未知的斜杠命令,在自动补全中包含网关命令,并将斜杠回复渲染为系统输出。(提交 1af227b61, 提交 8195497ce, 提交 6fba598ea)
- **CLI**:优化身份验证探测输出(表格输出、内联错误、减少噪音,并在 `clawdbot models status` 中修复换行问题)。(提交 da3f2b489, 提交 00ae21bed, 提交 31e59cd58, 提交 f7dc27f2d, 提交 438e782f8, 提交 886752217, 提交 aabe0bed3, 提交 81535d512, 提交 c63144ab1)
- **媒体**:仅当 `MEDIA:` 标签位于行首时才进行解析,以避免剥离文本提及。(#1206)
- **媒体**:尽可能保留 PNG 透明度;当仍超过大小限制时回退到 JPEG。(#1491) 感谢 @robbyczgw-cla。
- **技能**:将 bird Homebrew 安装限制在 macOS。(#1569) 感谢 @bradleypriest。
## 2026.1.23
### Highlights
- TTS: move Telegram TTS into core + enable model-driven TTS tags by default for expressive audio replies. (#1559) Thanks @Glucksberg. https://docs.clawd.bot/tts
- Gateway: add `/tools/invoke` HTTP endpoint for direct tool calls (auth + tool policy enforced). (#1575) Thanks @vignesh07. https://docs.clawd.bot/gateway/tools-invoke-http-api
- Heartbeat: per-channel visibility controls (OK/alerts/indicator). (#1452) Thanks @dlauer. https://docs.clawd.bot/gateway/heartbeat
- Deploy: add Fly.io deployment support + guide. (#1570) https://docs.clawd.bot/platforms/fly
- Channels: add Tlon/Urbit channel plugin (DMs, group mentions, thread replies). (#1544) Thanks @wca4a. https://docs.clawd.bot/channels/tlon
### Changes
- Channels: allow per-group tool allow/deny policies across built-in + plugin channels. (#1546) Thanks @adam91holt. https://docs.clawd.bot/multi-agent-sandbox-tools
- Agents: add Bedrock auto-discovery defaults + config overrides. (#1553) Thanks @fal3. https://docs.clawd.bot/bedrock
- CLI: add `clawdbot system` for system events + heartbeat controls; remove standalone `wake`. (commit 71203829d) https://docs.clawd.bot/cli/system
- CLI: add live auth probes to `clawdbot models status` for per-profile verification. (commit 40181afde) https://docs.clawd.bot/cli/models
- CLI: restart the gateway by default after `clawdbot update`; add `--no-restart` to skip it. (commit 2c85b1b40)
- Browser: add node-host proxy auto-routing for remote gateways (configurable per gateway/node). (commit c3cb26f7c)
- Plugins: add optional `llm-task` JSON-only tool for workflows. (#1498) Thanks @vignesh07. https://docs.clawd.bot/tools/llm-task
- Markdown: add per-channel table conversion (bullets for Signal/WhatsApp, code blocks elsewhere). (#1495) Thanks @odysseus0.
- Agents: keep system prompt time zone-only and move current time to `session_status` for better cache hits. (commit 66eec295b)
- Agents: remove redundant bash tool alias from tool registration/display. (#1571) Thanks @Takhoffman.
- Docs: add cron vs heartbeat decision guide (with Lobster workflow notes). (#1533) Thanks @JustYannicc. https://docs.clawd.bot/automation/cron-vs-heartbeat
- Docs: clarify HEARTBEAT.md empty file skips heartbeats, missing file still runs. (#1535) Thanks @JustYannicc. https://docs.clawd.bot/gateway/heartbeat
### Fixes
- Sessions: accept non-UUID sessionIds for history/send/status while preserving agent scoping. (#1518)
- Messaging/Sessions: mirror outbound sends into target session keys (threads + dmScope), create session entries on send, and normalize session key casing. (#1520, commit 4b6cdd1d3)
- Sessions: reject array-backed session stores to prevent silent wipes. (#1469)
- Gateway: compare Linux process start time to avoid PID recycling lock loops; keep locks unless stale. (#1572) Thanks @steipete.
- Gateway: accept null optional fields in exec approval requests. (#1511) Thanks @pvoo.
- Exec approvals: persist allowlist entry ids to keep macOS allowlist rows stable. (#1521) Thanks @ngutman.
- Exec: honor tools.exec ask/security defaults for elevated approvals (avoid unwanted prompts). (commit 5662a9cdf)
- Daemon: use platform PATH delimiters when building minimal service paths. (commit a4e57d3ac)
- Linux: include env-configured user bin roots in systemd PATH and align PATH audits. (#1512) Thanks @robbyczgw-cla.
- Tailscale: retry serve/funnel with sudo only for permission errors and keep original failure details. (#1551) Thanks @sweepies.
- Docker: update gateway command in docker-compose and Hetzner guide. (#1514)
- Agents: show tool error fallback when the last assistant turn only invoked tools (prevents silent stops). (commit 8ea8801d0)
- Agents: ignore IDENTITY.md template placeholders when parsing identity. (#1556)
- Agents: drop orphaned OpenAI Responses reasoning blocks on model switches. (#1562) Thanks @roshanasingh4.
- Agents: add CLI log hint to "agent failed before reply" messages. (#1550) Thanks @sweepies.
- Agents: warn and ignore tool allowlists that only reference unknown or unloaded plugin tools. (#1566)
- Agents: treat plugin-only tool allowlists as opt-ins; keep core tools enabled. (#1467)
- Agents: honor enqueue overrides for embedded runs to avoid queue deadlocks in tests. (commit 084002998)
- Slack: honor open groupPolicy for unlisted channels in message + slash gating. (#1563) Thanks @itsjaydesu.
- Discord: limit autoThread mention bypass to bot-owned threads; keep ack reactions mention-gated. (#1511) Thanks @pvoo.
- Discord: retry rate-limited allowlist resolution + command deploy to avoid gateway crashes. (commit f70ac0c7c)
- Mentions: ignore mentionPattern matches when another explicit mention is present in group chats (Slack/Discord/Telegram/WhatsApp). (commit d905ca0e0)
- Telegram: render markdown in media captions. (#1478)
- MS Teams: remove `.default` suffix from Graph scopes and Bot Framework probe scopes. (#1507, #1574) Thanks @Evizero.
- Browser: keep extension relay tabs controllable when the extension reuses a session id after switching tabs. (#1160)
- Voice wake: auto-save wake words on blur/submit across iOS/Android and align limits with macOS. (commit 69f645c66)
- UI: keep the Control UI sidebar visible while scrolling long pages. (#1515) Thanks @pookNast.
- UI: cache Control UI markdown rendering + memoize chat text extraction to reduce Safari typing jank. (commit d57cb2e1a)
- TUI: forward unknown slash commands, include Gateway commands in autocomplete, and render slash replies as system output. (commit 1af227b61, commit 8195497ce, commit 6fba598ea)
- CLI: auth probe output polish (table output, inline errors, reduced noise, and wrap fixes in `clawdbot models status`). (commit da3f2b489, commit 00ae21bed, commit 31e59cd58, commit f7dc27f2d, commit 438e782f8, commit 886752217, commit aabe0bed3, commit 81535d512, commit c63144ab1)
- Media: only parse `MEDIA:` tags when they start the line to avoid stripping prose mentions. (#1206)
- Media: preserve PNG alpha when possible; fall back to JPEG when still over size cap. (#1491) Thanks @robbyczgw-cla.
- Skills: gate bird Homebrew install to macOS. (#1569) Thanks @bradleypriest.