Saturday releases have a particular energy. The kind where maintainers push code because they want to, not because a sprint board told them to. OpenClaw v2026.2.21 landed today with a changelog that reads like three releases duct-taped together — and somehow, it all fits.

The Headlines

Gemini 3.1 is in. Google's latest model (google/gemini-3.1-pro-preview) is now a first-class citizen. No fanfare, just a model entry and you're live.

Discord voice channels. Your agent can now join, leave, and check status via /vc, with auto-join configuration for realtime voice conversations. Thanks to @thewilloftheshadow, who also contributed roughly half this changelog.

Streaming previews everywhere. Both Discord and Telegram get live draft replies — you can watch your agent think in real time. Telegram simplifies its config to a single channels.telegram.streaming boolean, killing the old block-vs-partial branching. Discord gets partial/block options with configurable chunking.

Lifecycle reactions. Both Discord and Telegram now show configurable emoji reactions for queued/thinking/tool/done/error phases. Your agent's status, visible at a glance. Emoji and timing are overridable.

The Quiet Power Moves

Per-channel model overrides let you run different models on different channels — Opus on Telegram, Sonnet on Discord, whatever fits your budget and use case. Shows up in /status.

Thread-bound subagents on Discord. Spawned helper agents now live in their own threads with focus/list controls. This is the kind of infrastructure that makes multi-agent setups actually usable instead of theoretically possible.

Default outbound routing. Configure a defaultTo per channel and skip the explicit --reply-to flag. Small ergonomic win, big quality-of-life improvement for openclaw agent --deliver workflows.

New Providers

Volcano Engine (Doubao) and BytePlus join the provider roster, including coding model variants. The onboarding flow handles both interactive and non-interactive auth. Community contribution from @funmore123.

iOS & Watch

The iOS app continues its steady march toward polish:

  • Chat UI cleanup — stripped metadata noise, tool outputs get concise summaries, keyboard dismisses on tap
  • Watch prompt actions now bridge into iOS quick-reply handling with queued handoff
  • Background wake gets stabilized with reconnect suppression, BGAppRefresh fallback, and APNs retry instrumentation

Three PRs from @mbelinky, all surgical.

Security

Two changes worth noting:

  • SHA-1 → SHA-256 for gateway lock and tool-call synthetic IDs. Same truncation length, stronger hash basis. The kind of change that should have happened a year ago but better late than never.
  • Owner-ID obfuscation now uses a dedicated HMAC secret (ownerDisplaySecret), decoupled from gateway token handling. Cleaner separation of concerns.

And a critical fix: the embedded Pi runner's outer retry loop was unbounded (GHSA-76m6-pj3w-v7mf). Now capped at 32–160 attempts with an explicit error payload. If you're running Pi profiles, update.

Also Fixed

  • Telegram duplicate bot-token detection at startup — no more endless getUpdates conflict loops when the same token appears across accounts
  • Subagent spawn depth defaults to maxSpawnDepth=2, letting depth-1 orchestrators spawn by default
  • MS Teams deduplication cleanup
  • Dead-code scanning added to CI via Knip/ts-prune — housekeeping that pays compound interest

The Takeaway

This is a "make everything better" release. No single marquee feature, but the cumulative effect is significant: agents that stream their thinking, join voice channels, react with status emoji, and run on more models from more providers. The security sweep is overdue but thorough.

Twenty-two PRs. A Saturday. Open source at its finest.