29 March 2026
OpenClaw v2026.3.28
OpenClaw v2026.3.28 dropped overnight — the biggest release since 3.24. Agentbot is already running it. This one adds genuine user-control features: agents can now pause and ask before executing tools, Grok gets native web search, and MiniMax agents can generate images. Plus 80+ bug fixes across every major platform integration. Here's what changed.
Highlights
Tool Approval Gates
Plugins can now attach requireApproval to before_tool_call hooks. When triggered, the agent pauses and surfaces an approval prompt — via the exec overlay, Telegram inline buttons, Discord interactions, or /approve on any channel. The /approve command now handles both exec and plugin approvals with automatic fallback. Agents ask before they act.
Grok Gets Native Web Search
The bundled xAI provider moves to the Responses API and gains first-class x_search— Grok's own web search tool. The xAI plugin auto-enables from existing web-search and tool config, so there's no manual toggle. x_search setup is also offered during openclaw onboard and openclaw configure --section web, with a model picker tied to the shared xAI key.
MiniMax Image Generation
image-01 lands as a MiniMax image generation provider — text-to-image and image-to-image editing with aspect ratio control. The legacy MiniMax model catalog is trimmed to M2.7 only; M2, M2.1, M2.5, and VL-01 are removed.
ACP Channel Binds
Discord, BlueBubbles, and iMessage now support current-conversation ACP binds. /acp spawn codex --bind hereturns the active chat into a Codex-backed workspace without creating a child thread. The release also documents the distinction between chat surface, ACP session, and runtime workspace — useful if you've been confused about where context lives.
CLI Backends on the Plugin Surface
Claude CLI, Codex CLI, and Gemini CLI inference defaults move onto the plugin surface. Gemini CLI gets bundled backend support. The --claude-cli-logs flag is replaced by --cli-backend-logs (old flag kept as an alias). Bundled plugin configs auto-load — no more manual plugins.allow entries for built-in CLI backends.
Full Changelog
Platform
- Podman: simplified rootless container setup, launch helper installs to
~/.local/bin - Slack: explicit
upload-fileaction with filename/title/comment overrides for channels and DMs - Teams + Google Chat: unified
upload-fileaction; BlueBubblessendAttachmentaliased through it - OpenAI + Codex:
apply_patchenabled by default, sandbox policy aligned towrite - Matrix TTS: auto-TTS replies sent as native Matrix voice bubbles, not generic audio attachments
- Memory/plugins: pre-compaction flush plan moved behind the
memory-coreplugin contract - CLI:
openclaw config schemaadded to print the generated JSON schema foropenclaw.json - Config/TTS: legacy speech config auto-migrated on normal reads; old bundled
tts.<provider>shapes removed from runtime - Tavily: outbound requests marked with
X-Client-Source: openclaw - Agents/compaction: post-compaction AGENTS refresh preserved on stale-usage preflight; cancel reasons surfaced; benign
/compactno-ops labelled as skipped - Plugins/runtime:
runHeartbeatOnceexposed in pluginsystemnamespace with delivery target override
Fixes — Agents & Models
- Anthropic stop reasons like
sensitiverecovered as structured errors instead of crashing the run - Gemini 3.1 pro, flash, and flash-lite resolved across all Google provider aliases; flash-lite prefix ordering fixed
- Rate-limit cooldowns scoped per model — one 429 no longer blocks every model on the same auth profile; stepped 30s/1m/5m ladder replaces exponential escalation
- Codex image tools: media understanding registered, image prompts routed through Codex instructions
- Generic image-runtime fallback restored for providers like
openrouterandminimax-portal - OpenAI/WS: reasoning replay metadata and tool-call item ids preserved across WebSocket tool turns
- Agents/model switching:
/modelchanges applied at next safe retry boundary on active embedded runs - Agents/sandbox:
tools.sandbox.tools.alsoAllowhonoured; glob-aware blocked-tool guidance; session keys redacted from explain hints - Agents/failover: Codex
server_errorand HTTP 410 classified as failoverable; HTTP 400 deduplication for OpenAI-compatible tool calls - Agents/compaction: timeout recovery triggered before retrying high-context LLM timeouts;
compactionCountreconciled after late auto-compaction - Anthropic 4.6: correct 1.0m context window shown in
/status - Ollama:
thinkingLevel=offrouted through live extension path; non-2xx errors surface with status code for fallback
Fixes — Channels
- WhatsApp: infinite echo loop in self-chat DM mode fixed; allowFrom policy error message clarified; quoted-message @mentions no longer trigger mention gating
- Telegram: long messages split at verified word boundaries; whitespace-only replies skipped to prevent GrammyError 400;
replyToMessageIdnormalised; forum topic/newand/resetstay in active topic; bot-pinned status cards no longer trigger bogus pairing requests; verbose tool summaries restored in forum sessions - Discord: stale gateway sockets drained on forced reconnects; reconnect-exhausted events suppressed during intentional shutdown;
@buape/carbonupdated forRateLimitErrorconstructor change; leading indentation preserved when stripping inline reply tags - iMessage:
[[reply_to:...]]tags stripped from delivered text, sent as RPC metadata instead - Feishu: WebSocket ghost connections closed on monitor stop; original
create_timeused for inbound timestamps; synthetic agent ids ignored during tool execution - Mattermost: pairing and slash-command replies stay on resolved config path for
exec:SecretRef bot tokens - Teams:
welcomeCard,groupWelcomeCard,promptStarters, and feedback keys accepted in strict config validation; freshest personal conversation reference preferred for proactive DMs - BlueBubbles: null message text guarded at debounce enqueue; CLI agent inbound image refs restored; macOS Contacts names optionally enriched in group participant lists
- Matrix: E2EE image thumbnails encrypted with
thumbnail_file;matrix.todisplay-name mentions recognised; DM routing kept out of 2-person rooms afterm.directseeds; poll question/options included in reply context; plugin bootstrap crash on mixed SDK entrypoints fixed; SecretRefaccessTokenresolved on startup - Mistral: OpenAI-compatible request flags normalised, 422 errors resolved
- GitHub Copilot: large
expires_atvalues clamped to preventsetTimeoutoverflow hot loop
Fixes — Plugins & CLI
- MCP/channels: Gateway-backed channel MCP bridge added with Codex/Claude conversation tools
- ACP/ACPX: built-in agent mirror aligned with latest
openclaw/acpxdefaults; unknown agent ids no longer fall through to raw--agentexec on MCP-proxy path - Security/audit: web search key audit extended to Gemini, Grok/xAI, Kimi, Moonshot, OpenRouter
- Plugins/runtime: compatible plugin registries reused across tools, providers, web search, and channel bootstrap; outbound channel recovery retried on pinned surface changes
- Plugin SDK:
moduleUrlthreaded through alias resolution for user-installed plugins in~/.openclaw/extensions/ - Plugins/diffs: bundled
@pierre/diffsruntime deps staged during packaged updates; Pierre themes loaded without JSON module imports - Plugins/uninstall: owned
channels.<id>config removed on channel plugin uninstall - Claude CLI: switched to
stream-jsonoutput; strict--mcp-configoverlay always passed for background runs - CLI/zsh:
compdefdeferred untilcompinitavailable - CLI/plugins: routed commands use auto-enabled bundled-channel snapshot matching gateway startup
- CLI/message send:
openclaw message senddeliveries written into resolved agent session transcript - Config/Doctor: stale bundled plugin load paths rewritten from legacy
extensions/* - Config/web fetch:
tools.web.fetch.maxResponseBytesaccepted in runtime schema - Control UI/config: sensitive raw config hidden by default; reveal-to-edit state replaces blank blocked editor
- Control UI/Skills: skill detail dialogs opened with browser modal lifecycle, panel stays centred
- Heartbeat/runner: interval timer guaranteed to re-arm after errors
- Daemon/Linux: non-gateway systemd services no longer flagged as duplicate gateways
- Talk/macOS: system-voice failures stop replaying system speech; app-locale fallback used for watchdog timing
Breaking Changes
qwen-portal-auth OAuth integration for portal.qwen.ai is gone. Migrate with: openclaw onboard --auth-choice modelstudio-api-keyopenclaw doctor. Run openclaw doctor to fix any stale config before upgrading.Agentbot is already running v2026.3.28.
Every OpenClaw improvement ships automatically to all agents — no action needed.