OpenClaw v2026.5.20 发布摘要
OpenClaw v2026.5.20 发布摘要
OpenClaw v2026.5.20 在工作区治理、实时通信和系统稳定性方面带来了重大进展。本次发布的核心是引入了捆绑式的 Policy 插件,允许操作员在整个工作区内强制执行并审计通道一致性。此外,该更新还对 Discord 语音集成进行了实质性改进,并进行了一系列深层核心修复,以防止代理(agent)在上下文压缩(context compaction)和子代理(subagent)移交过程中挂起。
本次发布还侧重于安全加固,包括针对配置文件中明文密钥的新 doctor 警告,以及针对系统执行更稳健的允许列表(allowlist)评估。
Key Changes
Workspace Governance & Policy
- Bundled Policy Plugin: 一种全新的一致性系统,允许操作员在
policy.jsonc中定义所需的姿态(postures)。该系统与openclaw doctor --lint集成,用于报告不符合规范的设置,并可通过doctor --fix可选地进行修复。它通过policy check --json支持可审计的证明(attestations),将策略哈希、证据哈希和发现结果绑定成一个稳定的审计元组。 - Secret Security: 当
openclaw.json包含明文密钥字段(例如 API keys 或 Authorization headers)时,doctor命令现在会向用户发出警告,并引导用户通过openclaw secrets configure进行SecretRef迁移。
Discord & Real-time Voice
- Voice User Following: Discord 语音会话现在可以跟随已配置的用户进入语音通道。这包括对多用户移交、大规模用户集的受限协调(reconciliation)以及 DAVE 恢复保留的支持。
- Real-time Bootstrap Context: Discord 语音会话现在默认在实时语音会话指令中包含受限的配置文件上下文(
IDENTITY.md、USER.md和SOUL.md)。这可以通过使用voice.realtime.bootstrapContextFiles: []来禁用。
Agent & Subagent Orchestration
- Compaction Safety: 为了防止代理(agent)无限期挂起,已为插件拥有的上下文引擎压缩(context engine compaction)实施了安全超时机制。这确保了挂起的
ContextEngine.compact()调用不再会阻塞代理轮次(agent turn)。 - Subagent Delivery Recovery: 修复了一个关键问题:如果请求者运行(run)已过期,子代理完成通知可能会失败。系统现在会在探测到运行已过期时强制执行消息工具移交(message-tool handoff),以确保子工作内容能呈现在请求者面前。
- Wildcard Target Constraints: `subagents.allowAgents: [
Sources
- Releasev2026.5.20 — openclaw 2026.5.20
- PRfeat(ui): tool name style in usage panel
- PRgateway: use identity.name in agent summaries when name is unset
- PRfix(whatsapp): periodic delivery-queue drain so enqueued items don't wait for next reconnect
- PRfix: check billing errors before surfacing rate-limit message
- PRPolicy: add conformance system with channel checks
- PRfix: honour tool error suppression for mutating tools
- PRfix(cron): isolate main-session cron wake lanes
- PRfix: dedupe OpenAI strict schema downgrade diagnostics
- PRfix: yield diagnostic event drains
- PRfix(agents): add trajectory flush timeout diagnostics
- PRfix(agents): skip dormant completion wake probes
- PRFilter heartbeat response-tool transcript artifacts
- PRfix(docker): keep default OpenAI harness plugin in release images
- PR[codex] restore QR bootstrap operator handoff
- PRfix: recover stale subagent completion announces
- PRfix(llm-idle-timeout): honor models.providers.<id>.timeoutSeconds for cloud providers (#77744, #78361)
- PRfix(cron-cli): bound loadCronJobForShow pagination (#83856)
- PRfeat(xai): add device code OAuth login
- PRfix(cli): format acp client errors with formatErrorMessage (#83904)
- PRfix(agents): bound plugin-owned context-engine compaction with a safety timeout
- PRharden update restart script creation [AI]
- PRRecheck rebuilt system.run argv [AI]
- PRfix(mattermost): fail closed on missing channel type [AI]
- PRfix(plugins): add default timeout for before_compaction/after_compaction hooks
- PRExpose messageId in message CLI JSON output
- PR[codex] fix iOS TestFlight release archive
- PRfeat(discord): follow configured users in voice
- PRgateway: use identity.name in agent summaries when name is unset
- PRfix: constrain wildcard subagent targets
- PRfix(agents): provenance-bound Codex reasoning replay
- PRFix Anthropic CLI auth routing for shorthand refs
- PR[Fix] Reject slow node event sends
- PRFix node approval scope requests
- PRfix(codex/command-account): respect explicit auth order over lastGood (#84386)
- PR[AI-assisted] fix(cron): preserve legacy array stores
- PRfeat(discord): add realtime voice bootstrap context
- PRfix(cli): gate exported subcli descriptors
- PRfix(browser): honor image sanitization config for screenshots
- PRfeat(tasks): explain stale-running maintenance decisions
- PRWarn on plaintext secret config in doctor
- PRfix(codex): guard path-only bootstrap files [AI-assisted]