
OpenClaw 24h 更新快报(2026-10-31):会话恢复、Cron 自动化、执行审批边界
过去一天 OpenClaw 的合并节奏密集落在"可靠性"上:网关重启后被中断的会话与渠道线程现在能被完整找回,自动化任务在失败修复环节拿到了读取并修改自身作业的能力,而执行审批则进一步收紧了递归求值与凭据外发的判定边界。控制台侧同期补上了配置草稿防丢、超大历史分页与多处性能优化。
会话与状态恢复:重启不再等于丢上下文
PR #187938 修掉了一个升级后的死角:旧版重启恢复留下的"墓碑"记录会带着未投递的最终消息、失效的 fence 和恢复过程产生的归档一起活过升级,而旧扫描器会把墓碑直接排除,导致这些会话永远不会被结算。现在启动流程与 openclaw doctor --fix 会结算那些确已退休的墓碑周期,不再要求它必须带续跑标记或近期时间戳,合格会话获得一次普通续跑输入,会话身份与 transcript 内容得以保留,人工归档记录也不受影响。
与此配套的是 PR #188402:过去如果关闭阶段先关了 agent 数据库、marker 落盘晚于一秒,或 sessions_send 的祖先链把普通会话重定向到了被排除的会话,运行中的主会话与渠道线程就会缺失重启续跑记录。修复后,非默认 agent 下的运行中会话能保留各自的重启续跑与已记录的回复路由,关机时按 agent 报告已标记/已跳过的数量,启动时按每个物理存储就绪的进度报告恢复与跳过情况。崩溃和未完成 marker 的 SIGKILL 仍然是刻意保留的有损场景。
数据库层面的两处修复方向一致。PR #188350 处理了 PostgreSQL 场景下"保留锚点存在、但服务端命名空间已丢失"时静默重建空历史的问题:agents add、网关 agents.create 以及引导式创建流程,现在会在改动工作区、配置或命名空间之前,先拒绝那些命名空间缺失、未初始化或对不上的保留锚点。PR #173994 则让 agent 在网关启动期间遇到 SQLite broker 容量拒绝后,能在同一次启动中恢复数据库准备,不必再重启一次网关;持续性压力和真正的数据库故障仍然会显式失败。
Cron 与自动化:默认工具、修复权限与静默检查
PR #187798 允许运营者为 cron 配置 defaultTools。此前一个显式列出工具清单的自动化任务如果漏掉了 read 这类前置工具,就无法按指令执行。现在配置值会先被展开(["execute_code"] 变为 ["execute_code", "read"]),再走既有的创建者能力与审批检查,且默认值永远不会授予当前环境本就不可用的工具;请求级 toolsAllowMode: "exact" 可以选择退出该行为,空数组仍然表示无工具。
PR #188105 修的是自动化最难受的一类故障:任务失败后,修复轮次看不到也无法修改它要修的那个作业,只能把问题原样丢回给用户。现在当作业归属者仍是 owner 时,修复轮次可以读取该作业的运行记录并更新作业本身,多数失败不再需要人工回复;调度器发出的作业通知遵循同一规则。需要注意的风险是,若作业的 requester 并非 owner(或其存储的操作者来源已无法恢复),修复轮与通知轮会退化为只读的自动化访问。
另外 PR #188594 处理了一次回归:静默自动化在检查触发条件、正确判定"无需运行"时,仍会冒出"Automation did not start"消息并刷新会话时间。修复后,静默触发检查只更新已检查时间,不再往聊天里塞消息、也不移动会话位置,真实失败与跳过仍然会通知 owner。
执行审批边界:更严的判定,更清晰的凭据去向
PR #187499 修掉了一个 allowlist 绕过面:当命令前存在独立赋语句、且其中包含递归的算术、参数、下标或带键复合数组求值时,检查器可能把它当作安全命令直接放行。现在这类递归求值的独立赋值改为失败即拒绝,普通标量赋值、无键数组以及命令前缀形式的环境变量赋值保持原有行为;带键复合数组赋值因为键语义依赖既有 shell 数组状态,被要求走审批。
持久进程一侧有两个相邻改动。PR #188465 让 exec 可以在 Linux 网关主机(systemd user manager 250 及以上)上以 durable: true 配合 background: true 或 yieldMs 运行长任务,网关重启后会话仍保留 list/poll/log/kill 控制权,持久工作也不会阻塞协作式挂起或安全重启,不支持的宿主则明确拒绝而不是悄悄降级。PR #188674 修掉了随之暴露的一个具体故障:当 agent 的共享密钥库通过 secret-egress 代理提供受保护环境凭据时,持久执行会拒绝所有命令——团队网关上连 sleep 150 都起不来。现在持久命令不再携带 secret-egress 授权、sentinel 或代理环境启动,执行结果会说明省略了多少条凭据,并给出替代路径(受管 GitHub 身份、命令自身配置,或改用非持久后台执行)。
Hooks 侧还有一处边界修正:PR #176089 指出 /hooks/agent 上小于一秒的 timeoutSeconds 虽然通过了正数校验,但向下取整为 0 后会选中内部的无限总预算而不是继承配置的超时,重试叠加后 hook 可能远超预期预算,现在这类亚秒取值会被直接忽略。
控制台与开发者体验
PR #188630 让浏览器刷新或关闭标签页时不再静默丢弃未保存的配置草稿。改动复用了控制台既有的 dirty/saving/applying/未确认写入判定,并挂到浏览器的 unload 监听上,没有改动配置 RPC,也没有引入草稿持久化——注意这是浏览器路径,与 macOS/iOS/Android 原生应用无关。
历史与预览有两处面向用户的修复。PR #188450 修复了大会话在控制台加载更早消息时直接失败(超过 8 MiB 上限并提示"请求更小的 limit")的问题,改为按页返回超大的历史切片。PR #188468 修复了会话预览里代码与游离围栏标记泄漏的问题:此前一个较长的反引号围栏内包含较短的 Markdown 示例、或使用波浪号围栏时,投影会把代码当成正文带出来,现在预览会保留围栏前的叙述再套用长度限制。
性能方面,PR #186142 让大尺寸 Board 在打开或切换标签时不再为离屏卡片排版、并让原生单元格订阅无关的外层 frame 输入。PR #188699 在移动端打开设置页时不再重复做调色板解析,实测渲染任务时间下降约 10%。PR #188509 让 Usage 页的模型筛选复用已聚合的结果与图表实例,在 12000 个会话的负载下中位耗时普遍下降,但仍有部分 p95 高于 200 ms 目标。
模型接入、插件与构建链路
PR #186614 让自定义 Responses provider 可以选用 auth: "native-command",由 Codex 自己负责令牌命令与显式配置的原生认证(包括 gateway_oauth),OpenClaw 不再为它去翻找无关的宿主凭据或环境中的 OpenAI 凭据;前提是使用一个"无归属"的自定义 provider ID 并在模型/提供方层面显式配置 Codex。
插件热重载也有一个体验改动:PR #184243 指出插件重载可能为已接纳的父任务与原生 subagent 轮次等待 60 秒,然后返回 UNAVAILABLE,而这些轮次在准备完成后仍需要原有工具和结束钩子,提前释放生成租约并不安全;现在经审计的插件可以声明 generationOverlap: true,准备好的后继实例优先承接新工作。
构建与安装侧,PR #188651 让云端 worker 运行时可以在没有 registry 访问权限的情况下完成准备,bundle 配置直接安装预组装依赖而不触发 npm 与包生命周期脚本,跨平台部署则要求准备匹配的 OS/CPU 依赖输入,目标缺失时给出准备提示而不是静默退回 npm。PR #188005 修复了新主机上 install.sh --beta 会在 Node/npm 就绪前静默安装稳定版的问题。
这一轮更新的基调是往"少丢数据、少给意外授权"的方向收:会话与渠道线程在重启后的恢复路径被打通,自动化拿到了修复自身的能力,而执行侧的三处改动则分别堵住了递归赋值绕过、持久进程凭据外发与亚秒超时被当成无限预算的口子。


评论