OpenClaw v2026.5.12-beta.4 Release Summary
OpenClaw v2026.5.12-beta.4 Release Summary
Key Changes
Plugin SDK & Workflow Orchestration
This release marks a major leap in the Plugin SDK, consolidating several workflow seams to empower plugin authors. The new infrastructure allows plugins to define typed session actions, send session-bound attachments through host-owned delivery, and schedule future session turns via cron-compatible plumbing. Additionally, a new finalize retry mechanism allows plugins to request bounded retries before a reply is finalized, enabling more sophisticated quality-control loops.
Agent & Session Management
Subagent coordination has been significantly hardened. A critical fix now preserves active background exec process references across session compaction, ensuring that long-running tasks are not orphaned when the context window is refreshed. Furthermore, the maxPingPongTurns ceiling for agent-to-agent communication has been raised from 5 to 20, facilitating more complex multi-agent coordination chains.
Model & Provider Enhancements
Support for self-hosted llama.cpp providers has been improved by implementing opportunistic /props discovery, allowing the system to accurately reflect the actual loaded runtime context window (n_ctx) rather than just the training ceiling. For OpenAI-compatible models, the system now correctly drains split provider stream frames, preventing session stalls during fragmented SSE or JSON responses.
Channel Integration Updates
- Slack: Added
allowBots: "mentions"mode for parity with Discord, preventing infinite loops while allowing explicit bot-to-bot communication. Formatting hints formrkdwnhave also been added to ensure agents use Slack-specific syntax. - Telegram: Fixed a critical issue where topic context from before a session start could be replayed into later turns. The
/statusand/thinkmenus now correctly reflect resolved model thinking defaults. - WhatsApp: Improved shutdown reliability by ensuring debounced inbound messages are fully drained before the socket closes.
- iMessage: Added support for tapback reactions as inbound agent events and provided a clear migration path from BlueBubbles to the native
imsgpath.
Infrastructure & Tooling
- Build System: The workspace has been upgraded to
pnpm 11, and build utility paths now use Node's native--experimental-strip-typesto eliminate deprecation warnings in Node 26. - Gateway: Improved the robustness of session-kill HTTP paths by returning deterministic
400 invalid_request_errorresponses for malformed encoded keys. - Memory Core: Introduced a bounded compaction step for
MEMORY.mdduring dreaming promotions, preventing unbounded file growth that could lead to gateway freezes.
Impact
For Plugin Developers
Developers can now build more interactive and autonomous plugins. The ability to register sessionActions means plugins can trigger specific, validated workflows that the Gateway can dispatch. The new scheduling and attachment APIs remove the need for plugins to manage their own low-level delivery or timing logic.
For Power Users & Operators
- Reliability: Users running long-running subagent tasks will see a significant decrease in orphaned processes. Those using self-hosted models will see more accurate token budgeting in the Sessions table.
- Observability: Gateway logs now explicitly signal when embedded runs are undergoing auto-compaction, making it easier to distinguish between a healthy context refresh and a stalled agent.
- Diagnostics:
openclaw doctornow provides a specific hint forGH_CONFIG_DIRmismatches, simplifying the setup of the GitHub skill in service environments whereHOMEis redirected.
For End Users
Users on Telegram and Slack will experience more consistent formatting and better session isolation. The addition of iMessage tapback support allows agents to react to user feedback more naturally.
Sources
- Releasev2026.5.12-beta.4 — openclaw 2026.5.12-beta.4
- 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
- PRMirror Codex native subagents into task registry
- PRAdd /context map treemap
- PRfix(runtime): detect Fly Machines as containers
- 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
- PRTelegram: keep topic context after reset boundary
- 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(telegram): render supported HTML replies
- PRfix(whatsapp): drain debounced inbound before close
- 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
- 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(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]
- PR[Fix] Scope session resolve store loads
- PRfix(yuanbao) support sourceReplyDeliveryMode: "automatic" for group chat
- PRfix: handle Telegram select callbacks safely
- PR[codex] Fix Codex app-server OAuth harness auth
- PRfix(onboard): custom provider context window vs compaction floor (#79428)
- 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] Share streaming event envelopes
- 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(plugins): retry npm alias override installs
- PRFix Telegram legacy message cache recovery
- PRCron: honor server_error retries
- PRfix(agents): replace blank tool names with sentinel to prevent dispatch loops
- 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(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 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(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(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
- PRfix: enable native require fast path on Windows for plugin-sdk root alias