OpenClaw v2026.5.10-beta.4 Release Summary
OpenClaw v2026.5.10-beta.4 Release Summary
Key Changes
Plugin SDK & Workflow Enhancements
OpenClaw has significantly expanded its Plugin SDK to support complex agent workflows. The new host-hook foundation 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, plugins can now request bounded agent-finalize retries, enabling a "repair" phase before a reply is finalized.
Memory & Context Management
To prevent unbounded growth of MEMORY.md files during dreaming promotions, a new bounded compaction step has been introduced. The system now drops the oldest auto-promoted sections by date to keep the file size under a default 10,000-character budget, while unconditionally preserving user-authored notes.
Other context improvements include:
- Context Treemaps: A new
/context mapcommand provides a visual treemap image of current session context contributors. - Execution Persistence: Background
execprocess references now survive embedded compaction, ensuring subagents can continue polling or logging long-running tasks after a context reset.
Provider & Model Updates
- Codex Integration: The Codex app-server now emits diagnostic events for native tool completions (e.g.,
bash,web), preventing the watchdog from aborting long-running native tools as stale embedded runs. - OpenRouter & Model Aliases: Support for nested provider labels in Telegram (e.g.,
openrouter/openai/gpt-5.4-mini) ensures labels match configured refs. Additionally,moonshotai/is now accepted as a direct-API alias for themoonshotprovider. - Llama.cpp Support: Self-hosted OpenAI-compatible providers now opportunistically discover the actual runtime context window (
n_ctx) via the/propsendpoint, ensuring session budgeting reflects the loaded context rather than just the training ceiling.
Channel & Integration Fixes
- Slack: Improvements include support for
reply_broadcastin thread replies, a newallowBots: "mentions"mode for parity with Discord, and the ability to fetch fresh download URLs viafiles.infofor DM attachments that omit them in the event payload. - Telegram: The bot now honors the
--force-documentflag for video media, routing them throughsendDocumentto avoid compression. Legacy message cache recovery has also been fixed to handle mixed JSON-array and line-delimited entries. - Matrix: Allowlist resolution is now hardened; name-based matching now requires an explicit opt-in via
channels.matrix.dangerouslyAllowNameMatchingto prevent mutable display-name spoofing.
Impact
Performance & Reliability
- Gateway Efficiency: Streaming event envelopes are now shared across WebSocket and node subscribers, reducing redundant JSON serialization on the hot path.
- Memory Safety: The Gateway now rejects malformed encoded session-kill HTTP paths with a
400 invalid_request_error, preventing them from falling through to later handlers. - OOM Prevention: Scoped session resolution now loads only the requested agent's store rather than all agent stores simultaneously, significantly reducing heap pressure in multi-agent deployments.
Security & Diagnostics
- Secret Redaction: A new shared structured payload redaction boundary has been applied to config audits, trajectory events, and session transcripts to prevent plaintext credentials from reaching persistent sinks.
- Doctor Improvements:
openclaw doctornow detects GitHub CLI authentication mismatches when the agentHOMEdiffers from the operator'sghconfig directory, providing a clearGH_CONFIG_DIRfix hint.
Upgrade Guide
Breaking Changes & Migration
- Matrix Allowlists: If your Matrix configuration relies on display names in
allowFromorgroupAllowFrom, these will be ignored by default. You must either replace them with full Matrix user IDs (e.g.,@user:server) or setchannels.matrix.dangerouslyAllowNameMatching: truein your config. - Build Tooling: The workspace has been upgraded to pnpm 11. Users installing from source should ensure they are using pnpm 11. Project settings have moved to
pnpm-workspace.yaml.
Sources
- Releasev2026.5.10-beta.4 — openclaw 2026.5.10-beta.4
- PRfix(slack): forward agent identity to draft stream initial message
- PRfeat(slack): add allowBots "mentions" mode (parity with Discord)
- PRfix(skills): normalize backslashes in compacted skill paths on Windows
- PRfeat(session): raise maxPingPongTurns ceiling from 5 to 20 (#52382)
- PRfix(microsoft-foundry): replace unsafe non-null assertion in subscription lookup
- PRfeat(slack): add replyBroadcast parameter for thread reply channel broadcast
- 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)
- PR[Feat] Add upload archive install RPC
- PRfix(doctor): don't flag the live compatibility agent dir as orphan
- PRfix(bonjour): avoid probing watchdog repair loops
- PRfix(ui): prevent webchat sends into isolated heartbeat sessions
- PR[plugin sdk] Add session action gateway protocol
- PRfix(memory): skip cron warnings without gateway context
- PRfix(tasks): route group acp completions through parent
- 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
- 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]
- PREnable realtime Talk instructions config
- PRfix(agents): preserve active exec references across compaction
- PRbuild(pnpm): upgrade workspace to pnpm 11
- PR[Fix] Scope session resolve store loads
- PRfix(yuanbao) support sourceReplyDeliveryMode: "automatic" for group chat
- PRAdd /context map treemap
- PR[codex] Fix Codex app-server OAuth harness auth
- PRfix(runtime): detect Fly Machines as containers
- 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
- PRchore(pnpm): align pnpm 11 follow-up surfaces
- PRfix(slack): retain channel history when requireMention is false
- PRfix(doctor): case-insensitive safe-bin trusted dir matching on macOS/Windows
- 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
- PRSupport Kimi Anthropic thinking streams