Breaking
Changes
- Gateway/OpenAI compatibility: add
/v1/modelsand/v1/embeddings, and forward explicit model overrides through/v1/chat/completionsand/v1/responsesfor broader client and RAG compatibility. Thanks @vincentkoc. - Agents/tools: make
/toolsshow the tools the current agent can actually use right now, add a compact default view with an optional detailed mode, and add a live "Available Right Now" section in the Control UI so it is easier to see what will work before you ask. - Microsoft Teams: migrate to the official Teams SDK and add AI-agent UX best practices including streaming 1:1 replies, welcome cards with prompt starters, feedback/reflection, informative status updates, typing indicators, and native AI labeling. (#51808)
- Microsoft Teams: add message edit and delete support for sent messages, including in-thread fallbacks when no explicit target is provided. (#49925)
- Skills/install metadata: add one-click install recipes to bundled skills (coding-agent, gh-issues, openai-whisper-api, session-logs, tmux, trello, weather) so the CLI and Control UI can offer dependency installation when requirements are missing. (#53411) Thanks @BunsDev.
- Control UI/skills: add status-filter tabs (All / Ready / Needs Setup / Disabled) with counts, replace inline skill cards with a click-to-detail dialog showing requirements, toggle switch, install action, API key entry, source metadata, and homepage link. (#53411) Thanks @BunsDev.
- Slack/interactive replies: restore rich reply parity for direct deliveries, auto-render simple trailing
Options:lines as buttons/selects, improve Slack interactive setup defaults, and isolate reply controls from plugin interactive handlers. (#53389) Thanks @vincentkoc. - CLI/containers: add
--containerandOPENCLAW_CONTAINERto runopenclawcommands inside a running Docker or Podman OpenClaw container. (#52651) Thanks @sallyom. - Discord/auto threads: add optional
autoThreadName: "generated"naming so new auto-created threads can be renamed asynchronously with concise LLM-generated titles while keeping the existing message-based naming as the default. (#43366) Thanks @davidguttman. - Plugins/hooks: add
before_dispatchwith canonical inbound metadata and route handled replies through the normal final-delivery path, preserving TTS and routed delivery semantics. (#50444) Thanks @gfzhx. - Control UI/agents: convert agent workspace file rows to expandable
<details>with lazy-loaded inline markdown preview, and add comprehensive.sidebar-markdownstyles for headings, lists, code blocks, tables, blockquotes, and details/summary elements. (#53411) Thanks @BunsDev. - Control UI/markdown preview: restyle the agent workspace file preview dialog with a frosted backdrop, sized panel, and styled header, and integrate
@create-markdown/previewv2 system theme for rich markdown rendering (headings, tables, code blocks, callouts, blockquotes) that auto-adapts to the app's light/dark design tokens. (#53411) Thanks @BunsDev. - macOS app/config: replace horizontal pill-based subsection navigation with a collapsible tree sidebar using disclosure chevrons and indented subsection rows. (#53411) Thanks @BunsDev.
- CLI/skills: soften missing-requirements label from "missing" to "needs setup" and surface API key setup guidance (where to get a key, CLI save command, storage path) in
openclaw skills infooutput. (#53411) Thanks @BunsDev. - macOS app/skills: add "Get your key" homepage link and storage-path hint to the API key editor dialog, and show the config path in save confirmation messages. (#53411) Thanks @BunsDev.
- Control UI/agents: add a "Not set" placeholder to the default agent model selector dropdown. (#53411) Thanks @BunsDev.
- Runtime/install: lower the supported Node 22 floor to
22.14+while continuing to recommend Node 24, so npm installs and self-updates do not strand Node 22.14 users on older releases. - CLI/update: preflight the target npm package
engines.nodebeforeopenclaw updateruns a global package install, so outdated Node runtimes fail with a clear upgrade message instead of attempting an unsupported latest release.
Fixes
- Outbound media/local files: align outbound media access with the configured fs policy so host-local files and inbound-media paths keep sending when
workspaceOnlyis off, while strict workspace-only agents remain sandboxed. - Security/sandbox media dispatch: close the
mediaUrl/fileUrlalias bypass so outbound tool and message actions cannot escape media-root restrictions. (#54034) - Gateway/restart sentinel: wake the interrupted agent session via heartbeat after restart instead of only sending a best-effort restart note, retry outbound delivery once on transient failure, and preserve explicit thread/topic routing through the wake path so replies land in the correct Telegram topic or Slack thread. (#53940) Thanks @VACInc.
- Docker/setup: avoid the pre-start
openclaw-clishared-network namespace loop by routing setup-time onboard/config writes throughopenclaw-gateway, so fresh Docker installs stop failing before the gateway comes up. (#53385) Thanks @amsminn. - Gateway/channels: keep channel startup sequential while isolating per-channel boot failures, so one broken channel no longer blocks later channels from starting. (#54215) Thanks @JonathanJing.
- Embedded runs/secrets: stop unresolved
SecretRefconfig from crashing embedded agent runs by falling back to the resolved runtime snapshot when needed. Fixes #45838. - WhatsApp/groups: track recent gateway-sent message IDs and suppress only matching group echoes, preserving owner
/status,/new, and/activationcommands from linked-accountfromMetraffic. (#53624) Thanks @w-sss. - WhatsApp/reply-to-bot detection: restore implicit group reply detection by unwrapping
botInvokeMessagepayloads and readingselfLidfromcreds.json, so reply-based mentions reach the bot again in linked-account group chats. - Telegram/forum topics: recover
#Generaltopic1routing when Telegram omits forum metadata, including native commands, interactive callbacks, inbound message context, and fallback error replies. (#53699) thanks @huntharo - Discord/gateway supervision: centralize gateway error handling behind a lifetime-owned supervisor so early, active, and late-teardown Carbon gateway errors stay classified consistently and stop surfacing as process-killing teardown crashes.
- Discord/timeouts: send a visible timeout reply when the inbound Discord worker times out before a final reply starts, including created auto-thread targets and queued-run ordering. (#53823) Thanks @Kimbo7870.
- ACP/direct chats: always deliver a terminal ACP result when final TTS does not yield audio, even if block text already streamed earlier, and skip redundant empty-text final synthesis. (#53692) Thanks @w-sss.
- Telegram/outbound errors: preserve actionable 403 membership/block/kick details and treat
bot not a memberas a permanent delivery failure so Telegram sends stop retrying doomed chats. (#53635) Thanks @w-sss. - Telegram/photos: preflight Telegram photo dimension and aspect-ratio rules, and fall back to document sends when image metadata is invalid or unavailable so photo uploads stop failing with
PHOTO_INVALID_DIMENSIONS. (#52545) Thanks @hnshah. - Slack/runtime defaults: trim Slack DM reply overhead, restore Codex auto transport, and tighten Slack/web-search runtime defaults around DM preview threading, cache scoping, warning dedupe, and explicit web-search opt-in. (#53957) Thanks @vincentkoc.