OpenClaw v2026.5.12-beta.8 发布摘要
OpenClaw v2026.5.12-beta.8 发布摘要
关键变更
安全加固与沙箱改进
OpenClaw 实施了若干关键的安全更新,以保护宿主环境并限制未经授权的访问:
- Windows 沙箱保护:沙箱现在明确禁止
USERPROFILE根目录,以防止即使在HOME环境变量被重定向时,携带凭据的绑定(如.ssh或.codex)仍能被访问。 - 设备配对与身份验证:
- Setup-code bootstrap 现在需要在授予持久化节点令牌之前进行显式的配对批准,以防止静默的权限提升。
- 浏览器源 Control UI 会话现在需要显式的配对批准,而不是静默的本地配对。
- 增强了可信代理(Trusted-proxy)身份验证,以拒绝非回环地址的本地接口地址。
- 工具与命令门控:
- 委托会话现在会从其调用者处继承工具禁用(tool-deny)限制,确保安全策略在子代理(subagent)和 ACP 委托路径中保持一致。
- 网关命令作用域现在由调用者上下文强制执行,确保无论解析出的命令通道如何,特权命令都会被拒绝。
- PowerShell
-ec(encoded command) 别名现在被识别为内联负载(inline payloads),从而强制其通过更严格的内联负载批准路径。
运行时与稳定性增强
- Telegram 弹性:
- 轮询摄入(Polling ingress)已移至隔离的 worker,以防止主事件循环饱和导致
getUpdates调用停滞,这在之前会导致消息丢失。 - Bot 令牌轮换现在通过指纹化的偏移状态进行检测,以防止机器人在令牌撤销后进入“失聪”状态。
- 轮询摄入(Polling ingress)已移至隔离的 worker,以防止主事件循环饱和导致
- Codex Harness & ACP:
- 上下文引擎轮换:如果现有的 sidecar 不兼容,无损管理的 Codex 会话现在会轮换到全新的原生线程,以防止因陈旧的隐藏历史记录而导致的上下文窗口溢出。
- Cron 兼容性:Codex cron 轮次现在直接执行自动化负载,跳过昂贵的 workspace bootstrap 读取,以防止超时。
- ACP 故障转移:增加了
acp.fallbacks以允许 ACP 轮次在主后端不可用时尝试备份运行时后端。
- 通用稳定性:在诊断心跳中增加了一个启动宽限期(默认为 60s),以抑制冷启动期间的虚假存活警告。
新功能与能力
- Cron 检查:增加了
openclaw cron get <id>和相应的 Gateway RPC,允许用户和代理检查单个存储的 cron job,而无需获取整个列表。 - 会话谱系:ACP 会话列表和快照现在会暴露 Gateway 谱系元数据(例如,
parentSessionId、spawnDepth),从而在 ACP 客户端中渲染父子会话图谱。 - 上下文映射:引入了
/context map命令,该命令会生成当前会话上下文贡献者的 WinDirStat 风格的树状图图像。 - 用户特定工具:增加了
tools.toolsBySender,允许操作员定义基于发送者身份的不同工具能力层级(例如,限制访客的破坏性工具使用)。
修复
- 配置数据丢失:修复了一个关键问题,即在版本升级期间使用
doctor --fix可能会剥离用户编写的配置字段。现在会创建一个预更新的持久化快照,以防止数据丢失。 - 子代理模型优先级:修复了一个 bug,即
agents.defaults.subagents.model被忽略,转而使用了目标代理的主模型,这在之前会导致子代理绕过claude-cli运行时。 - OpenAI Schema 规范化:对于省略了
items的数组型工具 schema,现在会进行规范化处理以包含items: {},以防止被 OpenAI 兼容的提供商拒绝。 - Telegram 格式化:修复了一个问题,即 cron announce delivery 可能会导致 Markdown 链接双重渲染,从而在聊天中显示为字面量的 HTML 锚点。
影响
本次发布显著降低了通过设备配对和 Windows 沙箱逃逸实现的权限提升风险。对于 Codex harness 和 ACP 用户,改进的线程轮换和故障转移机制为长运行会话提供了更可靠的体验。由于隔离的轮询 worker,Telegram 用户将看到系统高负载下的可靠性提升。操作员现在可以使用新的基于发送者的工具能力,实施更细粒度的安全策略。
升级指南
重大变更与迁移
- iMessage 发送者白名单:发送者白名单匹配现在仅接受规范化的发送者句柄(sender handles)。对话范围的 ID(聊天 ID/GUIDs)不再被接受作为发送者身份的证明。用户必须更新其
allowFrom配置以使用发送者句柄。 - Trusted-Proxy 配置:在
gateway.trustedProxies中列出网关宿主自身的非回环接口地址的部署环境,将不再能够通过该地址验证直接请求。这些地址应被移至一个独立的代理同行地址或回环路径。 - Pnpm Upgrade:工作区已升级至 pnpm 11。执行 git source 安装的用户将发现,bootstrap 和 build 白名单现在通过
pnpm-workspace.yaml进行管理。
Sources
- Releasev2026.5.12-beta.8 — openclaw 2026.5.12-beta.8
- PRfix(security): classify dangerous Windows sandbox binds first
- PRfeat(acp): add backend provider failover for UNAVAILABLE errors
- PRfix(security): add session transcript redaction guards at bare appendMessage call sites
- PRfix(config): serialize concurrent config mutations
- PRfix(imessage): keep pasted links, ignore Apple preview blobs
- PRfix(sessions): classify spawn-child sessions correctly; extract shared classifier
- PRfix(sessions): report ACP-runtime metadata for ACP-keyed sessions
- PRfix(security): inline redact into appendSessionTranscriptMessage
- PRfix: prevent config data loss during version upgrade
- PR[AI-assisted] fix(channel): refresh WeCom onboarding install
- PR[security] redact persisted tool result details
- PRfix(agents): escalate LLM idle timeout to model fallback after profile rotation
- PRfix(telegram): detect same-bot token rotation via fingerprinted offset state
- PR[Fix] Add incremental chat delta payloads
- PRGate node surfaces on pairing approval
- PRfix(acp): drop unsupported timeout config option for claude-agent-acp
- PRRestrict chat sender allowlist matching [AI]
- PRfix(anthropic): enable Claude CLI session-expired history reseed
- PRInherit tool restrictions for delegated sessions [AI]
- PRfix: scan plugin runtime entries during install [AI]
- PRLimit hook CLI tool authority [AI]
- PRfix(plugins): scan installed dependency runtime code [AI]
- PRRequire admin scope for node device token management [AI]
- PRbrowser: enforce navigation checks for act interactions [AI]
- PRValidate node exec event provenance [AI]
- PR[AI-assisted] fix(docker): pin setup-time container paths
- PRfix(imessage): avoid visible media placeholder text
- PR[AI-assisted] fix(agents): normalize array tool schemas
- PRfix(codex): rotate incompatible context-engine threads
- PRfix(gateway): forward temperature and top_p through OpenAI-compatible HTTP APIs
- PRRequire Control UI pairing before proxy-scoped access [AI]
- PRRequire explicit browser device pairing [AI]
- PRHarden trusted-proxy source validation [AI]
- PRRequire approval for setup-code device pairing [AI]
- PRFix stale diagnostic lanes for reply runs
- PRfeat(telegram): localized command menu descriptions
- PRgateway: pass Talk session scope to resolver [AI]
- PR[Fix] Carry transcript update sequence
- PRfix: restore Codex cron automation compatibility
- PRfix: route plugin LLM completions through Codex runtime
- PR[AI-assisted] fix(plugins): discover setup provider env vars
- PRRoute Codex message tool replies back to WebChat and TUI
- PRfix(onboard): forward provider auth flags through wizard
- PRfix(gateway): suppress startup liveness warnings
- PRfix(migrate): drop trailing periods from migrate item messages
- PRfix(browser): request admin scope for CLI control
- PRFix Telegram polling ingress under event-loop stalls
- PRFix Telegram cron HTML announce formatting
- PRFix subagent default model precedence
- PRfix(telegram): skip unmentioned group media before download
- PRHandle generic provider internal errors
- PRfeat(session): raise maxPingPongTurns ceiling from 5 to 20 (#52382)
- PRfeat(slack): add replyBroadcast parameter for thread reply channel broadcast
- PRfix(exec): skip heartbeat wake for subagent sessions
- PRfeat(tools): per-sender tool capability tiers via toolsBySender
- PR[Feat] expose session lineage metadata
- PR[Feat] Add upload archive install RPC
- PR[Feat] Add single-job cron get path
- PRfix(ui): prevent webchat sends into isolated heartbeat sessions
- PRdocs(subagents): document announce timeout
- PR[plugin sdk] Add session action gateway protocol
- PRControl UI/sessions: nest subagent sessions under parent with visual prefix
- PREnable realtime Talk instructions config
- PRfix(agents): preserve active exec references across compaction
- PRbuild(pnpm): upgrade workspace to pnpm 11
- PRfix(agents): forward explicit per-run timeout to LLM idle watchdog
- PRAdd /context map treemap
- PRfix(runtime): detect Fly Machines as containers
- PRchore(pnpm): align pnpm 11 follow-up surfaces
- PRDocs: announce BlueBubbles to iMessage migration
- PREnforce gateway command scopes by caller context [AI]
- PRfix(qqbot): authorize approval button callbacks [AI]
- PRRecognize PowerShell -ec inline commands [AI]
- PRfix(node-pairing): replace changed pending requests [AI]
- PRfix(memory-wiki): require admin scope for ingest [AI]
- PREnforce Slack plugin approval button authorization [AI]
- PRValidate Control UI loopback retry endpoints [AI]
- PRHarden exported markdown link rendering [AI]
- PRfix(gateway): honor minimal discovery mode for wide-area DNS-SD [AI]
- PRmemory-wiki: require write scope for Obsidian search [AI]
- PRScrub streamable MCP redirect headers [AI]
- PRslack: enforce reaction notification policy [AI]
- PRfix(onboard): accept Codex auth in model check
- PRfix: surface silent model fallback failures
- PRfix: skip metadata for build-excluded bundled plugins
- PRfix(azure):Drain split provider stream frames
- PRRate limit Google Chat webhook requests [AI]
- PRfix(feishu): normalize webhook rate-limit client keys [AI]
- PRfix(auth): prevent bootstrap pairing scope changes [AI]
- PRfix(telegram): render supported HTML replies
- PREnforce inline shell wrapper payload matching [AI]
- PRPersist Docker auth profile key mount
- PRfix: detect carried exec command forms [AI]
- PRReject truncated exec approval commands [AI]
- PRRequire auth for sandbox browser CDP relay [AI]
- PRfix(telegram): fall back to root groups on empty account allowlist
- PRfix(commitments): write json output to stdout
- PRfix(whatsapp): drain debounced inbound before close
- PRAllow pnpm source updates to build OpenClaw
- PRfix(codex): keep post-tool watchdog armed
- PRfix(slack): forward agent identity to draft stream initial message
- PRfeat(imessage): add tapback reaction support as inbound agent events
- PRfix(skills): normalize backslashes in compacted skill paths on Windows
- PRfix(microsoft-foundry): replace unsafe non-null assertion in subscription lookup
- PRfix(gateway): resolve inflight deduplication race for send and poll
- PRfix(infra): keep retryAsync delays above server-supplied Retry-After
- PRfix(auto-reply): guard FOLLOWUP_QUEUES delete against late drain finally
- PRfix(gateway): clear nodeWakeById on no-registration early-return
- PRfix(feishu): accept nested schema 2 card identity
- PRfix(memory): preserve session corpus labels
- PRfix(agents): restore compaction gateway logs
- PRfix(memory-search): label session hits with sessions corpus
- PR[plugin sdk] Consolidate workflow seams and fixtures
- PR[AI-assisted] fix(providers): use llama.cpp runtime context cap
- PRfix(memory-core): cap MEMORY.md size during dreaming promotions to pr…
- PRfix(bonjour): cap advertiser restarts in a sliding window (#74209)
- PRfix(doctor): don't flag the live compatibility agent dir as orphan
- PRfix(bonjour): avoid probing watchdog repair loops
- PRFix TUI exit after gateway disconnect
- PRfix(agents): use run workspace for post-compaction context
- PRfix(agents): recover read offsets beyond EOF
- PRfix(memory): skip cron warnings without gateway context
- PRfix(tasks): route group acp completions through parent
- PRfix(doctor): repair managed plugin openclaw peer links
- PRfix: preserve gateway install env sources
- PRfix(doctor): surface GH_CONFIG_DIR hint when gh auth lives at a different HOME
- PRfix(cron): mark active-jobs on manual-run path to suppress transient lost marker
- PRbuild: clean up Node.js 26 deprecation warnings
- PRfix(doctor): consolidate Gateway service config panels into a single note (#80287)
- PRRedact persisted secret-shaped payloads [AI]
- PRfix(matrix): gate name-based allowlist resolution [AI]
- PRMake exec command highlighting optional
- PR[Fix] Scope session resolve store loads
- PRMirror Codex native subagents into task registry
- PRfix(yuanbao) support sourceReplyDeliveryMode: "automatic" for group chat
- PR[codex] Fix Codex app-server OAuth harness auth
- PRfix(codex): mark native tools active for diagnostics
- PRfix(browser): add pageReady to Chrome MCP existing-session status
- PR[Fix] Share streaming event envelopes
- PR[Fix] Block memory extra path symlink traversal
- PR[Fix] Cache selected channel registry lookups
- PRFix Telegram thinking status defaults
- PRExpose native tool completions to plugin hooks
- PRfix(telegram): honor force document for videos
- PR[codex] fix update v-prefixed version verify
- PRFix Telegram legacy message cache recovery
- PRfix: stabilize code-mode follow-up tool display and replay
- PRfix: honor configured media generation timeouts
- PRTelegram: keep topic context after reset boundary
- PRfix(matrix): default markdown tables to bullets across Matrix clients
- PRfix(slack): retain channel history when requireMention is false
- PRfix(doctor): case-insensitive safe-bin trusted dir matching on macOS/Windows
- PRfeat(slack): add allowBots "mentions" mode (parity with Discord)
- PRCron: honor server_error retries
- PRfix(slack): fetch fresh download URL via files.info for DM file attachments
- PRfix(slack): add mrkdwn formatting hints to messageToolHints
- PRfix(delivery): track and log silent delivery failures
- PRfix(slack): include API error details in log messages
- PRfix(agents): replace blank tool names with sentinel to prevent dispatch loops
- PRfeat(delivery): surface deliveryStatus in --json output
- PRfix(acpx): add windowsHide to MCP proxy spawn on Windows
- PRfix(gateway): restore runtime-postbuild sync in watch mode
- PRfix(gateway): reject malformed session kill paths
- PRfix(telegram): show full provider/model label for nested OpenRouter ids
- PRfix(infra): dedupe system events by (text, contextKey)
- PRfix(slack): respect dmScope when updating main session route for DMs
- PRfix(slack): honor configured ACP bindings
- PRfix(slack): make download-file fileId requirement self-evident to LLMs
- PRfix(moonshot): accept moonshotai/<model> as direct-API alias
- PRfix(slack): harden thread continuation gating
- PRfix(gateway): redact fast-path console logs
- PRfix(exec-approvals): lazy-load command explainer
- PRfix(whatsapp): downgrade recovered watchdog disconnects
- PRfix(feishu): keep group_topic message-tool replies inside the topic
- PRfix(browser): extend existing-session status probe
- PRfix(telegram): keep no-response DM turns quiet (no silent-reply rewrite)
- PR[Fix] Remove reverted plugin allow entries
- PRFix agent model override gateway scope
- PR[AI-assisted] fix(whatsapp): delta repeated tool preambles
- PRfix(whatsapp): pass routing ctx to transcribeFirstAudio so echoTranscript can deliver (#79778)
- PRfix: handle Telegram select callbacks safely
- PRfix(slack): wake interactive reply sessions
- PRfix(imessage): wire reply attachments through send-rich --file (with feature gate)
- PRtest: sandbox audit-exec-surface under HOME tempdir
- PRfix(onboard): custom provider context window vs compaction floor (#79428)
- PR[codex] Map ACP thinking to advertised effort key
- PRfix(agents): surface exec failures after claimed success
- PRfix(imessage): WARN-log when private API bridge is unavailable
- PRfix(telegram): preserve debounce for partial draft fragments
- PRFix Copilot token integration identity
- PRfix(config): persist explicit default values
- PRfix(cli): return null for unknown non-plugin commands instead of suggesting plugins.allow
- PRfix(doctor): invalidate persisted plugin registry when a diagnostic source path no longer exists
- PRfix(codex): normalize thread id/sessionId cross-fill before schema validation
- PR[Fix] Wait for Pi abort settle before cleanup
- PRTelegram: keep verbose tool results separate from final answers
- PRSupport Kimi Anthropic thinking streams
- PRfix(plugins): retry npm alias override installs
- PRDisable non-POSIX command approval highlights
- PRfix: abort generic no-progress tool loops
- PRfix: enable native require fast path on Windows for plugin-sdk root alias