OpenClaw 小龙虾 2026.5.20 更新日志
一句话总结
2026.5.20 是一次偏运行边界、安全策略和计划任务稳定性的维护版本。核心方向是:Exec approvals 与 Skill 加载路径收紧、Cron 成功输出和主会话隔离修复、Codex harness 升级、MiniMax 音乐参数语义修正、Doctor 安全诊断增强、消息投递去噪、Subagents 完成回传、Gateway/CLI/Nodes/Control UI/macOS/iOS/Windows/Docker 发布链路修复。
统计概览
| 类别 | 数量/说明 |
|---|---|
| 原始 changelog 字节数 | 17,453 bytes |
| 主要区块 | Changes / Fixes / Release verification |
| 版本性质 | 中大型维护版本,偏安全边界、Cron、Codex、渠道投递和发布链路 |
| 重点模块 | Exec approvals、Cron、Codex、MiniMax、Doctor、Subagents、Messages、Gateway、CLI、Control UI、macOS/iOS/Windows/Docker |
| 需要关注 | Skill 文件必须通过 read 工具加载;Cron final output 修复;MiniMax 不再宣称支持 durationSeconds;image_generate 默认 watchdog 提升到 120 秒 |
核心亮点
1. Exec approvals 与 Skill 加载路径收紧
- 移除旧的
cat SKILL.md && printf ... && <skill-wrapper>allowlist 兼容路径。 - Skill 文件必须通过 read 工具加载。
- 只有真实 skill executable 会被自动允许。
- 影响:以后不能依赖“拼接读取 SKILL.md + wrapper”的旧兼容方式来绕过审批。
2. Codex harness 升级到 @openai/codex 0.132.0
- 内置 Codex harness 升级到
@openai/codex 0.132.0。 - 同步刷新 app-server model-list 文档,适配新模型目录。
3. Policy 插件进入 CLI
- CLI 新增内置 Policy 插件。
- 支持基于策略的 channel conformance checks。
- 支持 doctor lint findings。
- 支持 opt-in workspace repair。
- PR:
#80407
4. MiniMax 音乐参数语义修正
- 停止宣称 MiniMax 支持
durationSeconds精确控制。 - 移除自动注入 prompt 的 duration hints。
music_generate会报告 MiniMax duration 是 unsupported override。- 修复:
#84508
重点模块整理
新功能与增强
Discord 与语音会话
- Discord voice sessions 可以跟随配置的 Discord 用户进入语音频道。
- 增加 allowed-channel checks。
- 支持 multi-user handoff。
- reconciliation 被限制在有界范围内。
- 保留 DAVE recovery。
- PR:
#84264
Discord / realtime voice 上下文
- 实时语音会话默认包含有界的
IDENTITY.md、USER.md、SOUL.mdprofile context。 - 可通过
voice.realtime.bootstrapContextFiles: []禁用。 - PR:
#84499
Agent 配置
- 新增
agents.list[].experimental.localModelLean。 - lean local-model mode 可按 agent 单独开启,不必全局开启。
xAI Provider
- 新增 device-code OAuth 登录。
- 远程与 headless 环境可授权 xAI,无需 localhost browser callback。
- PR:
#84005
OpenRouter Provider
- OpenRouter 请求支持 provider-level
params.providerrouting policy。 - model 与 agent params 会覆盖 provider 默认值。
Cron 与计划任务修复
成功任务输出投递
- 当 successful scheduled runs 的 diagnostics 尾部仍有普通 tool warning 时,Cron 会投递首选 final assistant output。
- 不再因为尾部 warning 把整次 run 标记为失败。
Cron final output
- recovered tool warnings 保留为诊断信息。
- 成功任务的 final cron output 不再被 post-processing warning 替换。
- PR:
#84045
main-session Cron 隔离
- main-session scheduled work 改走 cron-owned wake lane。
- 保留 reply delivery context。
- 后台 cron turns 不再阻塞人类主会话聊天。
- 修复:
#82766 - PR:
#82767
isolated scheduled tasks 审批拒绝
- 使用 structured embedded-run denial metadata。
- blocked exec requests 会使 job 失败。
- 普通 assistant prose 不再被误判为 denial。
- PR:
#84067
旧版 jobs.json 兼容
- 加载或新增 scheduled jobs 时保留 legacy top-level array
jobs.json。 - 旧 cron jobs 升级后不再被当作空 store。
- 修复:
#60799 - PR:
#84433
cron show 防挂起
openclaw cron show的 job lookup pagination 增加边界。- non-advancing 或 unbounded
cron.list响应会失败,而不是挂住命令。 - 修复:
#83856 - PR:
#83989
Tasks、Subagents 与 Agent 运行
tasks maintenance
openclaw tasks maintenance --json增加 stale-running task maintenance decisions。- retained 与 reconcile candidates 会解释:
- backing-session
- cron
- CLI
- wedged-subagent state
- PR:
#84691
Subagent completion 恢复
- stale completion announces 会通过不等待 transcript 的方式重试 unsupported transcript-wait wakes。
- requester run stale 时强制 message-tool handoff。
- 修复:
#83699 - PR:
#83700
dormant requester 处理
- 跳过 dormant completion requesters 的 stale embedded-run wake probes。
- late subagent completions 直接走 requester-agent 或 direct handoff。
- 减少
reason=no_active_run队列噪声。 - PR:
#82964
wildcard subagent allowlists
- wildcard subagent target allowlists 被约束到 configured agents。
- 显式列出的 compatibility targets 继续保留。
- 修复:
#84040 - PR:
#84357
trajectory flush 诊断
- pi-trajectory-flush timeout warnings 包含 bounded trajectory queued-writer diagnostics。
- flush stall 会显示 pending writes、queued bytes 与 append state。
- 修复:
#82961 - PR:
#82962
Codex 与 OpenAI Agent 相关
app-server system prompt report
- bootstrap hooks 只提供 path + content 的 workspace files 时,system-prompt reports 仍可正常工作。
- hook 注入的 SOUL、IDENTITY、TOOLS、USER context 会正确报告 injected characters。
- PR:
#84736
image_generate watchdog
image_generatedynamic-tool calls 默认 watchdog 调整为 120 秒。- 条件:没有 per-call timeout,也没有 configured image timeout。
- 避免图像生成落回 generic 30 秒 bridge timeout。
- PR:
#84254
Codex diagnostics
- large diagnostic backlogs drain 时,避免重复 dynamic tool terminal diagnostics 阻塞 tool responses。
- PR:
#82937
strict tool schema downgrade
- OpenAI provider 对重复 strict tool-schema downgrade diagnostics 按 provider/model/tool signature 只记录一次。
- 保留
strict=falsefallback 行为。 - 修复:
#82930 - PR:
#82933
code mode schema 文案
- 模型可见 schema 中明确 exec 工具约束:
- JavaScript/TypeScript
- 无 Node module
- catalog-bridge 约束
- 减少 agent 试错。
- PR:
#84269
Codex account
/codex account尊重显式 models auth order 与config.auth.order。- 当显式顺序中的 profile 全部不可用时,不再错误标记低优先级 profile 为 active。
- 修复:
#84386 - PR:
#84412
encrypted Responses reasoning replay
- stale mirrored Codex transcripts 会丢弃无效 encrypted content。
- 保留同 session 匹配的 replay。
- 修复:
#83836 - PR:
#84367
消息、渠道与投递
message-tool-only turn 停止条件
- source-channel message 成功发送后,message-tool-only turns 会停止。
- transcript mirrors 仍在 session write lock 下保持一致。
- PR:
#84289
message-tool replies
- normal progress 在 message-tool replies 中更紧凑。
- 防止 final answer 后出现 late text-only tool output。
- PR:
#84303
message JSON
openclaw message --json在 channel sends 返回 message id 时,包含稳定 top-levelmessageId。- PR:
#84191
suppress tool errors
messages.suppressToolErrors对 mutating tool failures 生效。- 已配置的聊天表面不再收到额外 warning payload。
- PR:
#81561
Gateway agent summary
- 当
agents.list[].name未设置时,Gateway agent summaries 使用 agent 的identity.name。 - 客户端中配置的 agent labels 仍可见。
- PR:
#84355
Doctor、安全与配置
MCP tool policy 诊断
- sandbox tool policy 隐藏 configured MCP server tools 时,Doctor 会在 provider requests 前警告。
- PR:
#84699
明文 secret 配置警告
- Doctor 会警告
openclaw.json中的 plaintext secret-bearing config fields。 - 覆盖模型 provider API keys 和 sensitive provider headers。
- PR:
#84718
thinkingFormat 修复
doctor --fix会移除无法识别的models.providers.*.models[*].compat.thinkingFormat值。- stale provider model config 升级后可重新通过验证。
- 修复:
#77803
secret file fail-closed
tryReadSecretFileSync恢复 fail-closed 合约。- credential loaders 设置
rejectSymlink: true时会拒绝 symlinked credential files。 - 涉及 Telegram、LINE、Zalo、IRC、Nextcloud Talk tokens。
fs-safe
@openclaw/fs-safe更新到0.2.7。- 在 default Python-helper-off policy 下,Linux/macOS 保留 best-effort Node write fallbacks。
- 覆盖 private stores、secret writes、run logs、media attachments。
Browser、Control UI、Nodes
Browser screenshots
- browser screenshots 和 labeled snapshots 遵循 configured image sanitization limit。
- browser-captured images 与其他 image results 使用同样 resize policy。
- PR:
#84595
Control UI terminal 状态
- terminal session status 优先于 stale active-run flags。
- completed terminal runs 不再显示 abort/live UI。
- PR:
#84057
Control UI usage panel
- usage panel 中过长的 context skill、tool、file names 会被截断。
- hover 时仍可查看完整名称。
- PR:
#42197
nodes JSON 输出
- JSON-mode
openclaw nodes命令中,lazy plugin-registration logs 输出到 stderr。 - stdout 保持可解析。
- PR:
#84684
nodes approval scopes
openclaw nodes approve前请求 pending node surface approval scopes。- exec-capable node approval 可使用 admin-scoped Gateway credentials。
- 避免
missing scope: operator.admin。 - PR:
#84392
Provider 与模型运行时
Anthropic
- 通过 Claude CLI auth 选择的 Anthropic model refs 会走 Claude CLI runtime。
anthropic/opus-4.7等 shorthand refs 不再回退到 embedded Anthropic billing。- 修复:
#84222 - PR:
#84374
Provider timeout
- 尊重显式高于默认 idle watchdog 的
models.providers.<id>.timeoutSeconds。 - cloud 与 self-hosted providers 的长 first-token waits 不再约 120 秒就 fallback。
- PR:
#83979
fallback billing guidance
- mixed rate-limit + billing fallback exhaustion 时,显示 billing guidance。
- 不再使用 generic failure copy。
- 修复:
#79396 - PR:
#79489
Ollama
- 当
/api/show没有 capabilities 时,未知能力模型默认视为 tool-capable。 - discovered native Ollama models 可以继续使用 tools。
- PR:
#84055
Memory、Heartbeat 与 Compaction
Memory/search
- active-memory searches 超时时关闭 local embedding providers。
- pending local model loads 与 embedding contexts 会被中止并释放。
- PR:
#83858
silent heartbeat artifacts
- 从 embedded context snapshots 过滤 silent heartbeat response-tool transcript artifacts。
- 后续用户回合不再被 heartbeat no-op messages 污染。
- PR:
#83477
plugin hooks timeout
before_compaction与after_compactionhooks 默认 30 秒 timeout。- hung plugin handler 不再阻塞 compaction completion。
- PR:
#84153
CLI transcript compaction
- plugin-owned CLI transcript compaction 被 host safety timeout 约束。
- hung context engine 不再 stall post-turn cleanup。
- PR:
#84083
平台与渠道
- Baileys 更新到
7.0.0-rc12。 - outbound pending deliveries 每 30 秒定期 drain。
- 修复 provider 已连接时,队列消息仍需等待下一次 reconnect 才发送的问题。
- PR:
#79083
WhatsApp group diagnostics
- inbound group diagnostics 更清晰。
- observed but unregistered groups 指向
channels.whatsapp.groups。 - 不改变 routing 或 sender authorization。
- PR:
#83846
Mattermost
- 缺失 channel type 时 fail closed。
- PR:
#84091
Matrix / Google Chat / Mattermost
- 接受
messages.queue.byChannel.matrixqueue overrides。 - queue provider schema/type keys 对齐。
Discord controls
- Discord message controls 渲染时保留 disabled presentation buttons。
- PR:
#84188
Twitch
- 新增 test-only client-manager registry reset helper。
- 非 isolated Twitch tests 可以清除 cached managers。
- 修复:
#83887 - PR:
#84244
CLI、Update 与 Gateway
private QA CLI
- private QA subcommand 不再导出到 command descriptors。
- 仅当
OPENCLAW_ENABLE_PRIVATE_QA_CLI=1时启用。 - root help 与 subcommand markers 匹配 runtime registration。
- PR:
#84519
update restart
- restart health checks 支持一版本 CLI/Gateway protocol skew。
- 后续命令使用 managed Gateway service Node。
- 避免多 Node 安装时,
openclaw update静默把 gateway 切到另一个 Node binary。
gateway status JSON
- gateway status JSON 输出 running Gateway version。
- 保留 existing server metadata。
- read probes 可 fallback 到 status RPC data。
- 修复:
#56222
config snapshot retry
- transient failure 后重试 config snapshot reads。
- 一个 rejected read 不再污染同进程后续命令。
- PR:
#83931
ACP client errors
openclaw acp client失败走 shared error formatter。- object-shaped errors 不再输出
[object Object]。 - 修复:
#83904 - PR:
#84080
inline root options
- CLI 保留 inline root option values 中嵌入的等号。
- 不再在第二个 separator 后截断。
- PR:
#83995
TUI autocomplete
- TUI autocomplete 包含 Gateway plugin slash commands。
- connected sessions 可建议 running Gateway 暴露的 plugin-owned commands。
- PR:
#83640
channels logs
openclaw channels logsrolling tail window 正好从行边界开始时,保留第一行。- 与
src/logging/log-tail.ts中已修复的 readLogSlice 行为一致。
移动端、桌面端、Docker 与构建
macOS app
- About settings copyright year 更新为 2026。
- 本地 packaging 使用稳定 app identity,便于权限测试。
- 修复当前 Vite / Highlight.js exports 下 Control UI production builds。
Peekaboo bridge
- 嵌入的 Peekaboo bridge 更新到
3.2.1。 - OpenClaw-hosted UI automation 适配当前 Peekaboo CLI capture flows。
iOS
- 修复 TestFlight build 的 Release archive compilation。
- PR:
#84255
Gateway/mobile
- 恢复 iOS/Android onboarding 中 QR setup-code 的 bounded operator tokens handoff。
- admin 与 pairing scopes 不放进 bootstrap。
- PR:
#83684
Windows installer
install.ps1onboarding 作为 attached child process 启动。- 新 Windows 原生安装不再明显卡在
Starting setup...。 - 避免 wizard terminal rendering 被破坏。
Docker
- 官方 release image keep lists 保留 bundled Codex plugin。
- Docker pruning 后默认 OpenAI agent harness 仍可用。
- 修复:
#83613 - PR:
#83626
Build 输出
- 抑制
rolldown-plugin-dts:fake-js对内联zod/v4/locales/*.d.cts的 CommonJS dts warnings。 pnpm build输出在 0.25.1 plugin bump 后保持可读。
其他修复
- Status 显示 configured default、session-selected model、reason、clear hint、docs link,用于解释 session pinned model 与
agents.defaults.model.primary不一致的情况。 - WebChat 在 session change events 标记 active chat run complete 时,清理 stale typing indicators。
- CLI/channels 保留 rolling tail 首行。
- Media 对 URL path basename 进行 decode,
My%20Report.pdf会显示为My Report.pdf。 - 修复 rebuilt
system.runargv 检查。 - Gateway 拒绝慢 node event sends,避免 outbound buffers 无界增长,并记录被拒 payload diagnostic。
- harden update restart script creation。
- iOS Release archive compilation 修复。
Release Proof
https://www.fireself.cn/post/ER8i0RMt