
OpenClaw 24h 更新快报(2026-11-04):MCP 工具调用、会话分叉、Cron 调度
过去 24 小时是 OpenClaw 相当密集的一天。网关侧最关键的一步是打通了"看得见却调不动"的断点:PR #187699 让 tools.invoke 与 HTTP /tools/invoke 真正可以执行已配置的 MCP 工具,而不只是把工具名显示在 tools.effective 里。与此同时,Discord 与 Slack 先后落地了线程分叉能力,Cron 调度侧也修掉了"主机重启恢复把定时任务饿死"这一长期影响可用性的调度问题。
另一条主线是 ClawRouter 的能力扩张:网页搜索、语音合成与记忆嵌入三个方向都在同一批合并中接入路由目录机制。此外,Windows 桌面端升级到了 ZIP 9.2.2 以脱离已知 CVE 影响区间,沙箱安装失败开始返回经过脱敏的可读诊断,控制台则在 MCP 设置页与响应式布局上做了较大重做。
网关与 MCP:让 MCP 工具从"可见"变成"可调"
PR #187699 修掉的是一个长期存在的语义不一致。配置好的 MCP 服务器会出现在 tools.effective 里(标记 source: "mcp"),但任何形式的调用都会拿到 not_found,插件或运维客户端能看到工具却无法使用它。这次改动让 tools.invoke 为每次调用申请一个私有的 MCP 运行时:唯一 session id、不绑定 session key,只连接被指定的那一个服务器,其余服务器按命名空间全部拒绝,调用结束后立刻回收该运行时。
权限边界没有被放宽。调用仍然要穿过完整的网关工具策略(tools.allow/deny、profile、agent/group/sender 级策略、gateway.tools 黑名单)以及 before-tool-call 钩子;会话自身的 MCP override(toolOverrides.mcpServers、toolOverrides.mcpToolsDeny)会在执行前重新校验,调用方权限也会在真正发起 tools/call 前再查一次。设计者明确记录了代价:每次调用都要付一次连接与列工具的成本,且不做缓存,因为复用会话运行时会把插件调用和 agent 运行生命周期绑在一起。需要注意的是,按请求者授权的服务器(oauth.identity: "per-requester")因为无法验证发送者身份,仍然保持 fail-closed。
与之配套的两项改动补上了交互和授权回收的缺口。PR #191589 让节点侧托管的 MCP 工具可以通过网关向用户提问:在节点与网关上开启 mcp.apps.enabled 后,工具调用期间服务器若需要用户输入,节点可以把表单或 URL 问题呈现在网关的问题界面上,用户作答后结果沿原调用链返回。调用被绑定到原始会话与配对节点,取消、配对变更或权限撤回都会让授权失效。PR #191980 则处理了 CLI 侧的授权生命周期:warm CLI turn 在令牌已经转移到复用进程持有者之后,旧 turn 的清理动作可能留下 grant;改动后清理沿着真实的 owner 逐跳跟随并走既有撤销通道,延迟清理不会误伤同一持有者上的新 turn。
另有一项独立提交 57405d6 让 Cron 失败修复在选择告警目的地时优先遵循显式配置,而不是默认路径。
会话分叉:从聊天到渠道的"另起一摊"
分叉能力在这一轮被完整地推到了各个入口。PR #190787 让 Control UI 聊天框里的 /fork [标题] 直接触发既有的 Fork 会话动作,而不是当作普通消息发出或撞上"仅渠道可用"的拒绝提示;标题可选,忙碌来源会复制最近一段已完成的前缀,草稿、暂存附件与跳转状态都保持不变。
渠道侧,PR #190785 为 Discord 的公开文本线程、私有文本线程与论坛帖创建同父的兄弟会话,私有分叉只加入请求者与机器人、禁用成员邀请并明示源成员不会被复制;媒体帖、公告帖、私信与顶层频道被拒绝。PR #190786 把同样的模型带到 Slack:在频道线程里发送 @OpenClaw /fork [标题] 会在同一频道创建一个新的顶层根帖作为分叉线程,原生自定义斜杠命令、私信、顶层或合成线程以及 Enterprise Grid 组织安装均被拒绝。两者都强调授权仍然走既有的 mention 与访问规则,路由本身不授予任何权限。PR #191902 则把会话版本历史搬进了会话菜单。
ClawRouter:搜索、语音与嵌入统一走目录
这一批合并把 ClawRouter 从"能配"推进到"能用"。PR #191792 让 web_search 能够选中 ClawRouter:当路由方声明了原生搜索端点时,OpenClaw 会用配置的路由凭据注册该能力,支持 Tavily、Brave 网页搜索、Exa、Parallel REST 与 SearXNG JSON 搜索。每次执行都会刷新凭据作用域内的目录、匹配声明的请求与响应格式,再派发到被声明的路由;查询条数限制在 1–10,Parallel 拒绝超过 200 字符的查询,未知格式一律 fail-closed,路由器只使用路由器自己的凭据。
PR #191863 把同一套机制用于语音:TTS 与 Talk 合成会刷新所选密钥的 offer 并要求已知的 OpenAI 语音请求/二进制响应格式,原生与 manifest 路由使用上游模型 ID,统一路由保留路由器模型 ID,缺少授权、未知格式与异源目标会在合成之前失败。PR #191809 则为记忆嵌入补上了适配器:请求前刷新目录,执行符合条件的 OpenAI 格式原生、manifest 或统一嵌入 offer,并复用记忆传输层的向量校验、顺序、用量统计与目标作用域凭据;自定义维度、多模态输入会明确失败,且不存在上游 OpenAI 密钥的兜底路径。
调度与稳定性:Cron 通道的公平性
PR #192197 修的是一个会被放大的调度偏斜。主机重启后恢复的仪表盘对话此前被归类为 cron 工作,占满了宽度为 8 的 cron 嵌套通道,新的定时任务只能排队;同时 cron 任务在显式的容量等待阶段也会消耗自己的运行时预算。改动后主机重启事件走既有且有界的重启恢复通道(由 agents.defaults.maxConcurrent 控制),新 cron 运行可以与恢复过程并行推进,定时任务保留自己的通道与每会话顺序。代价被明确记录:cron 队列 p99 从 8.47 秒降到 1 毫秒,而恢复队列 p99 从 8.93 秒升到 10.11 秒,峰值 RSS 中位数从 2.98GiB 升到 3.22GiB——这是有意识的取舍,由负责人显式接受。
PR #192211 修掉了一个对用户可见的假错误:当调度器的失败修复轮遵循自身指令并回答 NO_REPLY(例如一次性任务的工作已不再需要,或只是瞬时失败),拥有者会话里仍会弹出"Your request couldn't be completed."。修复后这类"判定无需处理"的自动化修复重新安静结束,不再往创建该任务的会话里投递错误提示。
另外几项围绕阻塞与延迟的修复也在同一窗口落地。PR #192275 给具名 worktree 的注册等待加上期限:排队超过 1 秒即记录等待,超过 30 秒则以可重试的仓库等待错误失败,超时请求不会再事后创建分支或检出。PR #192221 处理了首个受管 worktree turn 之后延迟出现的 MaxListenersExceededWarning,把 worktree、本地 provider 与文件日志的清理统一登记到既有 owner 顺序表中,回调顺序与清理行为得以保留。PR #192075 针对控制台首访延迟做了资源整理,在 100ms 模拟 RTT 下 Sessions 就绪时间从 948.35ms 降到 878.10ms,Cron 从 1040.05ms 降到 954.65ms。
安全与供应链
PR #192248 把 Windows 桌面端的更新解压依赖从 ZIP 4.6.1 提升到 ZIP 9.2.2,因为前者落在已公开的 CVE-2026-115909 与 CVE-2026-115905 影响区间内;Linux 与 macOS 仍走 tar 路径,桌面应用在安装器启动失败时保持打开的行为也没有改变。
PR #192051 让沙箱依赖安装失败不再只返回一个退出码:安装器会保留并脱敏两个输出流中的最后 2048 个字符作为诊断信息,同时把任务本地 XDG 数据目录下的 pnpm store 从采集、传输与分级结果恢复中排除,避免缓存字节把暂存结果撑破上限。PR #192004 收紧了对 GitHub secret scanning 告警的处置:只接受官方 PATCH 契约里的四种处置理由,要求显式操作者选择,并且在没有证据表明凭据已被撤销时,仅内容脱敏不再足以把告警标记为已撤销。
访问控制侧,PR #192231 补上了 visitor-access 插件的一个盲区:当 Cloudflare 账户席位已满时,邀请不再静默失效,而是给出明确提示。PR #191978 保证了访客无法看到人员的活动时间线。另有独立提交 dc843b6 把代理头像的提供范围收敛到会话作用域内的读者。
插件运行时与开发者体验
插件体系继续在向"一等公民"靠拢。PR #191599 让 agent_end 钩子拿到刚结束的完整回合,钩子上下文新增 ctx.completedTurn: { sessionId, entryId },用于 Skill Workshop 这类需要在后台复核某一具体回合并据此分叉的插件;旧的 harness 参数 skillExperienceReviewSource 保留为兼容别名至 2026-12-31。PR #191661 为插件开放了 api.runtime.skills.readUsage 与 api.runtime.skills.recordUsed,让原本只能由内置 Skill Workshop 使用的技能使用计数成为通用运行时能力。PR #192274 则在控制台里把插件的 UI 贡献以 extensions 的形式呈现出来。
安装体验方面,PR #191454 让 Quick Start 在验证推理能力后询问是否把网关放到后台运行(默认开启),从持久化安装启动的用户关闭终端后代理仍然存活并在登录时自启;而 npx、临时目录安装、Nix 模式、无 systemd 的 Linux 等场景仍然保持前台运行,因为指向临时副本的服务会在副本被清理后失效。
控制台体验
UI 侧这一轮是重构而非修补。PR #191459 重做了 MCP 设置页,把配置项按服务器重新组织;同时有一批响应式改动统一了 640px 断点下浮顶栏、行与控件的行为,并给 Settings 收敛了统一的留白与标题层级。这些改动多数带截图证明,方向一致:让控制台的信息密度和移动端可用性同步提升。
整体基调可以概括为一句话:这一轮 OpenClaw 重心不在堆功能,而在把"看得见"和"调得动"、"跑得动"之间的落差一条条补齐,同时为调度公平性和供应链安全让出确定的成本。


评论