OpenClaw v2026.5.12-beta.2 Release Summary
OpenClaw v2026.5.12-beta.2 Release Summary
Key Changes
This release focuses on expanding the extensibility of the Plugin SDK, improving the observability of agent sessions, and hardening the core runtime against memory leaks and streaming stalls.
Plugin SDK & Workflow Enhancements
One of the most significant additions is the introduction of workflow seams in the Plugin SDK. Plugins can now register typed session actions, send session-bound attachments through host-owned delivery, and schedule future session turns via the existing cron-compatible scheduler. This allows for the creation of complex plugin archetypes, such as deploy approvers, budget guards, and SLA watchers, without requiring deep access to the runner internals.
Session & Gateway Observability
- ACP Lineage Metadata: The Agent Client Protocol (ACP) now exposes Gateway session lineage (parent/child relationships) under
_meta. This enables ACP clients to render subagent graphs without requiring private Gateway side channels. - Session Management: The Control UI now nests subagent sessions under their parent sessions using a visual
└–prefix, making the hierarchy clear in the session picker. - Context Mapping: A new
/context mapcommand provides a WinDirStat-style treemap image of current session context contributors, offering a visual representation of what is occupying the model's context window.
Provider & Model Improvements
- Llama.cpp Integration: Self-hosted OpenAI-compatible providers now opportunistically discover the actual loaded runtime context window via the
/propsendpoint, ensuring that session budgeting reflects the server's current configuration rather than just the training ceiling. - Streaming Stability: A critical fix was implemented to drain split provider response chunks in the sanitizer. This prevents sessions from stalling when the OpenAI SDK receives partial SSE events or JSON bodies.
- Model Fallbacks: The auto-reply runner now surfaces visible operational errors when a configured model backend fails and the fallback produces no visible reply, eliminating "silent" failures.
Memory & Core Stability
- Memory Budgeting: To prevent unbounded growth of
MEMORY.mdduring dreaming promotions, a bounded compaction step has been introduced. Older auto-promoted sections are now dropped by date to keep the file under a default 10,000-character budget, while user-authored content remains untouched. - System Event Deduplication: The
enqueueSystemEventlogic now dedupes keyed events across the entire queue based on text and context keys. This prevents the "approval cascade" where repeated failovers trigger duplicate exec approval prompts.
Impact
Fixed Issues
- Memory Leaks: Fixed a memory leak in the Gateway where unregistered node IDs leaked permanent throttle entries in the
nodeWakeByIdmap (#68847). - OOM Prevention: Resolved a high-severity issue where
loadCombinedSessionStoreForGatewayeagerly loaded all agent session stores, causing OOM crashes in environments with many agents (#51264). - TUI Responsiveness: Fixed a bug where the TUI became unresponsive to Ctrl+C/SIGINT after a gateway WebSocket disconnect (#75379).
- Tooling Reliability: Fixed a crash in the
readtool when offsets exceeded the end of the file (#62466). - Slack Integration: Resolved an issue where file attachments in Slack DMs were silently dropped due to missing download URLs (#50129).
Security Hardening
- Log Redaction: The Gateway now installs console capture before command parsing to prevent sensitive WhatsApp/libsignal session material from leaking into raw terminal logs.
- Administrative Scoping: The
wiki.ingestmethod now requiresoperator.adminscope to prevent unauthorized local file imports. - Safe-Bin Matching: Trust checks for safe-bin directories are now case-insensitive on macOS and Windows, preventing false-positive warnings on those platforms.
Upgrade Guide
Breaking Changes & Migration
- pnpm 11 Upgrade: The workspace has been upgraded to pnpm 11. Users performing source installs or using custom Docker workflows should ensure they are using pnpm 11. Project settings have moved to
pnpm-workspace.yaml. - Memory Compaction: Users with
dreaming.enabled: truemay notice a one-time compaction of theirMEMORY.mdfile upon the first run after upgrading, as the system brings the file under the 10KB budget. User-authored notes are preserved. - GitHub CLI Auth: If you are running the Gateway as a service (e.g., via systemd) and the
ghCLI is authenticated under a different user's HOME, you may need to set theGH_CONFIG_DIRenvironment variable in your service configuration to point to the authenticated config directory.
Sources
- Releasev2026.5.12-beta.2 — openclaw 2026.5.12-beta.2
- PRfeat(imessage): add tapback reaction support as inbound agent events
- 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
- PRfix(gateway): resolve inflight deduplication race for send and poll
- PRfix(auto-reply): guard FOLLOWUP_QUEUES delete against late drain finally
- PRfix(gateway): clear nodeWakeById on no-registration early-return
- PR[plugin sdk] Consolidate workflow seams and fixtures
- PR[Feat] expose session lineage metadata
- PRfix(memory-core): cap MEMORY.md size during dreaming promotions to pr…
- PRfix(bonjour): cap advertiser restarts in a sliding window (#74209)
- PR[Feat] Add upload archive install RPC
- PRfix(bonjour): avoid probing watchdog repair loops
- PR[Feat] Add single-job cron get path
- PRfix(ui): prevent webchat sends into isolated heartbeat sessions
- PRFix TUI exit after gateway disconnect
- PRdocs(subagents): document announce timeout
- PRfix(agents): use run workspace for post-compaction context
- PRfix(agents): recover read offsets beyond EOF
- PR[plugin sdk] Add session action gateway protocol
- PRfix(doctor): repair managed plugin openclaw peer links
- 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
- PRControl UI/sessions: nest subagent sessions under parent with visual prefix
- PREnable realtime Talk instructions config
- PRfix(agents): preserve active exec references across compaction
- PRMake exec command highlighting optional
- PRbuild(pnpm): upgrade workspace to pnpm 11
- PR[Fix] Scope session resolve store loads
- PRMirror Codex native subagents into task registry
- PRAdd /context map treemap
- PR[codex] Fix Codex app-server OAuth harness auth
- PRfix(runtime): detect Fly Machines as containers
- PR[Fix] Share streaming event envelopes
- PR[Fix] Cache selected channel registry lookups
- PRFix Telegram thinking status defaults
- PRfix(telegram): honor force document for videos
- PRchore(pnpm): align pnpm 11 follow-up surfaces
- PRfix: stabilize code-mode follow-up tool display and replay
- PRfix: honor configured media generation timeouts
- PRDocs: announce BlueBubbles to iMessage migration
- PRfix(matrix): default markdown tables to bullets across Matrix clients
- PRfix(memory-wiki): require admin scope for ingest [AI]
- PRmemory-wiki: require write scope for Obsidian search [AI]
- PRfix: surface silent model fallback failures
- PRfix: skip metadata for build-excluded bundled plugins
- PRfix(azure):Drain split provider stream frames
- PRfix(slack): forward agent identity to draft stream initial message
- 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)
- PRfix(slack): fetch fresh download URL via files.info for DM file attachments
- PRfix(slack): add mrkdwn formatting hints to messageToolHints
- PRfix(skills): normalize backslashes in compacted skill paths on Windows
- 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(microsoft-foundry): replace unsafe non-null assertion in subscription lookup
- PRfix(infra): keep retryAsync delays above server-supplied Retry-After
- PRfix(feishu): accept nested schema 2 card identity
- PRfix(memory): preserve session corpus labels
- PRfix(agents): restore compaction gateway logs
- PRfix(gateway): reject malformed session kill paths
- PRfix(memory-search): label session hits with sessions corpus
- 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
- PR[AI-assisted] fix(providers): use llama.cpp runtime context cap
- PRfix(slack): make download-file fileId requirement self-evident to LLMs
- PRfix(doctor): don't flag the live compatibility agent dir as orphan
- PRfix(slack): harden thread continuation gating
- PRfix(gateway): redact fast-path console logs
- PRfix(exec-approvals): lazy-load command explainer
- PRfix(memory): skip cron warnings without gateway context
- PRfix(tasks): route group acp completions through parent
- PRfix: preserve gateway install env sources
- 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(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]
- PRfix(yuanbao) support sourceReplyDeliveryMode: "automatic" for group chat
- PRfix: handle Telegram select callbacks safely
- PRfix(onboard): custom provider context window vs compaction floor (#79428)
- PRfix(agents): surface exec failures after claimed success
- 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): mark native tools active for diagnostics
- PRfix(browser): add pageReady to Chrome MCP existing-session status
- PR[Fix] Block memory extra path symlink traversal
- PRExpose native tool completions to plugin hooks
- PR[codex] fix update v-prefixed version verify
- PRSupport Kimi Anthropic thinking streams
- PRFix Telegram legacy message cache recovery
- PRCron: honor server_error retries
- PRfix(acpx): add windowsHide to MCP proxy spawn on Windows
- PRfix(gateway): restore runtime-postbuild sync in watch mode
- PRfix(telegram): show full provider/model label for nested OpenRouter ids
- PRfix(moonshot): accept moonshotai/<model> as direct-API alias
- PRfix(whatsapp): downgrade recovered watchdog disconnects
- PRfix(feishu): keep group_topic message-tool replies inside the topic
- 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(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
- PR[codex] Map ACP thinking to advertised effort key
- PRfix(imessage): WARN-log when private API bridge is unavailable
- PRfix(telegram): preserve debounce for partial draft fragments
- PRFix Copilot token integration identity
- 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
- PRDisable non-POSIX command approval highlights
- PRfix: abort generic no-progress tool loops