OpenClaw 4.20 and 4.21: Kimi K2.6, Image 2 and the usual bug dance that breaks setups
OpenClaw dropped 4.20 and, a mere six hours later, 4.21. Textbook release cadence for @steipete’s project: push, discover the damage, patch. Let’s break it down.
What’s new in 4.20
4.20 is a substantial release, mostly cleanup and consolidation, with a few notable features:
- Kimi K2.6 as default - Moonshot/Kimi now defaults to
kimi-k2.6, withkimi-k2.5still available for compatibility. Also supportsthinking.keep = "all"on K2.6, stripped for other Moonshot models whentool_choiceis pinned. - Tiered model pricing - Support for tiered pricing from cached catalogs, with bundled Kimi K2.6/K2.5 cost estimates in token-usage reports.
- BlueBubbles: per-group system prompts - Group behavioral instructions (tapback, threaded-reply conventions) are now injected every turn via
GroupSystemPrompt. Supports*wildcard fallback. Closes #60665. - Hardened GPT-5 prompt - System overlay for GPT-5/Codex now has stronger completion bias, weak-result recovery, and verify-before-final guidance.
- Cron: separate runtime state -
jobs-state.jsonsplits fromjobs.json, so git-tracked job definitions stay stable while execution state mutates. - Aggressive session maintenance - Entry cap and age prune are enforced by default, and oversized stores are pruned at load time to prevent gateway OOM.
- Compaction notices - Opt-in start and completion notices during context compaction.
- Mattermost: draft streaming - Thinking, tool activity, and partial replies stream into a single draft post that finalizes in-place.
- Improved onboarding - Single warning banner, headings, checklists, spinner during model catalog load, “API key” placeholder in prompts.
Plus: sanitizeForLog() optimization (single regex vs iterative loop), plugin loader reuse for leaner tests, Docker E2E for channel dependencies, and QA suite that fails by default on failed scenarios.