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
getUpdatesconflict 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.