release teams developer-experience control-ui channels docker

OpenClaw 3.24: Rehabilitation — Microsoft Teams Rewrite, 18 Breaking Changes, and a Developer Experience Leap

OpenClaws.io Team

OpenClaws.io Team

@openclaws

March 24, 2026

12 min read

OpenClaw 3.24: Rehabilitation — Microsoft Teams Rewrite, 18 Breaking Changes, and a Developer Experience Leap

3.22 tore out the old architecture and rebuilt the foundations. 3.23 made sure the sutures held. The lobster survived the surgery — barely. Forty-plus fixes, eight auth patches, two browser regressions resolved. The patient was stable.

Now the patient is standing up.

3.24 ships one day after 3.23. 343 commits. 18 breaking changes. 15 fixes. But the breaking changes this time aren't more surgery — they're rehabilitation exercises. Controlled, purposeful movements that train the rebuilt body to do things the old body never could.

A word of caution, as always: upgrade your production lobsters carefully.

Breaking Changes

Eighteen breaking changes. But unlike 3.22's bone-breaking restructuring, these are rehab exercises — each one teaching the lobster a new trick with its rebuilt skeleton.

Microsoft Teams: Platform-Level Rewrite

Teams isn't getting patched. It's getting rewritten.

The entire Microsoft Teams integration migrates to the official Teams SDK with AI-agent UX best practices baked in. (#51808) Streaming 1:1 replies. Welcome cards with prompt starters. Feedback and reflection flows. Informative status updates. Typing indicators. Native AI labeling. This isn't bolting AI features onto a chat adapter — it's building a first-class AI agent experience from the SDK up. Thanks @vincentkoc.

On top of that, message edit and delete support lands for sent messages, including in-thread fallbacks when no explicit target is provided. (#49925) You can now correct or retract what the bot said — something that should have existed from day one.

Teams was the largest single investment in this release. The old integration worked. The new one works right.

Developer Tooling & Skill Ecosystem

Seven changes focused on one theme: let developers and operators know what tools they have, what's missing, and how to install it.

Tool visibility: /tools now shows the tools the current agent can actually use right now, not a theoretical catalog. A compact default view with an optional detailed mode. The Control UI gets a live "Available Right Now" section so you can see what will work before you ask.

Skill install UX: Bundled skills — coding-agent, gh-issues, openai-whisper-api, session-logs, tmux, trello, weather — now include one-click install recipes. (#53411) The CLI and Control UI can offer dependency installation when requirements are missing. The skill management UI gets status-filter tabs (All / Ready / Needs Setup / Disabled) with counts, and a click-to-detail dialog showing requirements, toggle switch, install action, API key entry, source metadata, and homepage link. The CLI softens the missing-requirements label from "missing" to "needs setup" and surfaces API key setup guidance. The macOS app adds a "Get your key" homepage link and storage-path hint to the API key editor. Thanks @BunsDev for the entire skill UX overhaul.

Node version floor: The supported Node 22 floor drops to 22.14+ while continuing to recommend Node 24, so npm installs and self-updates don't strand Node 22.14 users. The CLI now preflights the target npm package engines.node before running openclaw update, so outdated Node runtimes fail with a clear upgrade message instead of attempting an unsupported release.

Control UI Evolution

Four changes that push the Control UI from "functional dashboard" to "something you actually want to use."

Agent workspace file rows convert to expandable <details> with lazy-loaded inline markdown preview, plus comprehensive .sidebar-markdown styles for headings, lists, code blocks, tables, blockquotes, and details/summary elements. (#53411)

The file preview dialog gets a frosted backdrop, sized panel, and styled header, with @create-markdown/preview v2 for rich markdown rendering — headings, tables, code blocks, callouts, blockquotes — that auto-adapts to the app's light/dark design tokens. (#53411)

The macOS app replaces horizontal pill-based subsection navigation with a collapsible tree sidebar using disclosure chevrons and indented subsection rows. And the default agent model selector dropdown gets a "Not set" placeholder so the empty state is explicit instead of confusing. (#53411) All thanks to @BunsDev.

Channel Capabilities

Three changes that make individual channels smarter.

Slack restores rich reply parity for direct deliveries, auto-renders simple trailing Options: lines as buttons and selects, improves Slack interactive setup defaults, and isolates reply controls from plugin interactive handlers. (#53389) Thanks @vincentkoc.

Discord adds 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 get before_dispatch with canonical inbound metadata, routing handled replies through the normal final-delivery path and preserving TTS and routed delivery semantics. (#50444) Thanks @gfzhx.

Infrastructure & Compatibility

Two changes that let OpenClaw run in more places and talk to more things.

Gateway/OpenAI compatibility: /v1/models and /v1/embeddings endpoints are added, and explicit model overrides are forwarded through /v1/chat/completions and /v1/responses for broader client and RAG compatibility. Thanks @vincentkoc.

CLI containers: --container and OPENCLAW_CONTAINER let you run openclaw commands inside a running Docker or Podman OpenClaw container. (#52651) No more exec-ing into containers and hoping the CLI is installed. Thanks @sallyom.

Security

Two fixes close gaps in the media sandbox.

The mediaUrl/fileUrl alias bypass is closed so outbound tool and message actions cannot escape media-root restrictions. (#54034) This was a real escape — structured payloads could alias their way past the sandbox boundary. Fixed.

Outbound media access is aligned with the configured fs policy so host-local files and inbound-media paths keep sending when workspaceOnly is off, while strict workspace-only agents remain sandboxed. The policy was inconsistent before — some paths respected the sandbox, some didn't. Now it's uniform.

Fixes

Gateway

Restart sentinel (#53940): The interrupted agent session is now woken via heartbeat after restart instead of only sending a best-effort restart note. Outbound delivery retries once on transient failure. Explicit thread/topic routing is preserved through the wake path so replies land in the correct Telegram topic or Slack thread. Thanks @VACInc.

Channel startup isolation (#54215): Channel startup stays sequential but per-channel boot failures are isolated, so one broken channel no longer blocks later channels from starting. Thanks @JonathanJing.

Docker

Setup loop (#53385): Fresh Docker installs stop failing before the gateway comes up. The pre-start openclaw-cli shared-network namespace loop is avoided by routing setup-time onboard/config writes through openclaw-gateway. Thanks @amsminn.

WhatsApp

Group echoes (#53624): Recent gateway-sent message IDs are tracked and only matching group echoes are suppressed, preserving owner /status, /new, and /activation commands from linked-account fromMe traffic. Thanks @w-sss.

Reply-to-bot detection: Implicit group reply detection is restored by unwrapping botInvokeMessage payloads and reading selfLid from creds.json, so reply-based mentions reach the bot again in linked-account group chats.

Telegram

Forum topics (#53699): #General topic 1 routing is recovered when Telegram omits forum metadata, including native commands, interactive callbacks, inbound message context, and fallback error replies. Thanks @huntharo.

Outbound errors (#53635): Actionable 403 membership/block/kick details are preserved. Bot-not-a-member is treated as a permanent delivery failure so Telegram sends stop retrying doomed chats. Thanks @w-sss.

Photos (#52545): Telegram photo dimension and aspect-ratio rules are preflighted, with a document-send fallback when image metadata is invalid or unavailable. Photo uploads stop failing with PHOTO_INVALID_DIMENSIONS. Thanks @hnshah.

Discord

Gateway supervision: Gateway error handling is centralized 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.

Timeouts (#53823): A visible timeout reply is sent when the inbound Discord worker times out before a final reply starts, including created auto-thread targets and queued-run ordering. Thanks @Kimbo7870.

Slack

Runtime defaults (#53957): Slack DM reply overhead is trimmed, Codex auto transport is restored, and Slack/web-search runtime defaults are tightened around DM preview threading, cache scoping, warning dedupe, and explicit web-search opt-in. Thanks @vincentkoc.

Other

Embedded runs/secrets: Unresolved SecretRef config no longer crashes embedded agent runs — the system falls back to the resolved runtime snapshot when needed. Fixes #45838.

ACP/direct chats (#53692): A terminal ACP result is always delivered when final TTS does not yield audio, even if block text already streamed earlier. Redundant empty-text final synthesis is skipped. Thanks @w-sss.

Contributors

Eighteen contributors landed changes in 3.24. Special recognition to @BunsDev with approximately ten items spanning the entire skill install UX, Control UI workspace, markdown preview, macOS navigation, and model selector — the kind of focused, design-aware contribution that turns "it works" into "it's pleasant to use."

@vincentkoc delivered the Microsoft Teams SDK rewrite, Slack interactive reply restoration, Gateway OpenAI compatibility, and Slack runtime defaults — four major areas in one release.

@w-sss landed three channel fixes across WhatsApp group echoes, Telegram outbound error handling, and ACP direct chat delivery.

Thanks to @sallyom (CLI containers), @davidguttman (Discord auto-threads), @gfzhx (plugin hooks), @VACInc (gateway restart sentinel), @amsminn (Docker setup), @JonathanJing (gateway channel isolation), @huntharo (Telegram forum topics), @Kimbo7870 (Discord timeouts), @hnshah (Telegram photos).

Upgrade Notes

  • Teams users: This is a full SDK migration. Review your Teams channel configuration — the integration surface has changed significantly.
  • Docker users: The new --container flag lets you run CLI commands inside running containers. Fresh installs should no longer fail during setup.
  • Node version: The floor drops to Node 22.14+, but Node 24 remains recommended. Run openclaw update — the CLI will now tell you if your Node is too old before attempting the install.
  • Plugin/hook authors: before_dispatch is a new hook point with canonical inbound metadata. If you maintain plugins that intercept inbound messages, review the new dispatch flow.
  • Production lobsters: As always, upgrade with care. Test in staging first.

---

3.22 opened the chest and replaced the engine. 3.23 stitched it shut and watched the monitors. 3.24: the lobster stands up — and doesn't just walk. It runs.

Eighteen breaking changes that aren't breaking things — they're building new capabilities on top of the rebuilt architecture. A full Teams platform rewrite. A skill ecosystem that finally tells you what it needs. A Control UI that's starting to feel like a product, not an admin panel. And fifteen fixes that keep tightening the bolts across every channel.

Rehab was never about getting back to baseline. It was about becoming stronger than before the surgery.

The lobster is running. And it's faster than it's ever been.

Stay in the Loop

Get updates on new features, integrations, and lobster wisdom. No spam, unsubscribe anytime.