openclaw/openclaw · Weekly · Jul 27, 2026 - Aug 02, 2026

OpenClaw Weekly Dev Update: July 27 – August 2, 2026

Commits summarized
3,525
Period
Jul 27 - Aug 02, 2026
Published
Aug 03, 2026

OpenClaw Weekly Dev Update: July 27 – August 2, 2026

Who should read this: Developers, self-hosters, and platform integrators tracking upstream changes to OpenClaw's agent runtime, UI, channel integrations, and CLI tooling.

This is a highlights report drawn from 200 commit summaries out of 3,525 total commits in the period. These are the most impactful changes: bug fixes, performance work, refactors to shared infrastructure, and new features that affect the developer or operator experience.

🐛 Agents & AI

Preserved native runtime controls on Codex routes

Fixes a gap where Codex routes could lose native runtime control values (fast mode aliases, cutoff settings). The change validates and preserves these controls through the route lifecycle.

  • Commit b6dcb8c3 — test coverage for auth migration isolation.
  • Commit 5e841bc2 — preserve Codex runtime controls, cover shipped fast cutoff aliases, and validate native runtime control values.
  • Commit 8e78ee45 — clarify provider request param classifier.

Claude stall recovery preserves cache

Agents recovering from a stalled Claude response now preserve the cache state instead of starting from scratch. This avoids cold forks during recovery. Includes checkpointing of fork retries and cold-reseed handling for downgraded forks.

  • Commit 5ae8a4f4 — preserve Claude cache during stalled CLI recovery, harden recovery, reject partial output, rewind to safe checkpoint.

Tool Search now uses BM25 ranking and proper tokenization

Tool Search was using fragile substring matching that made tools unreachable (e.g., "scheduling" matched nothing against "Schedule a recurring task"). Replaced with Okapi BM25 over a Unicode-aware tokenizer with stopword removal, light English stemming, and camelCase splitting. A query-expansion table maps common intents to tool vocabulary. Literal matches tier above scored expansion hits.

  • Commit d413fbd8 — BM25 ranking, camelCase splitting, expansion discounting, plural normalization, trigger collision fixes.

Responses stream processing unified

Two months of divergent stream processors for the OpenAI Responses API have been unified into a single canonical pipeline. Removes obsolete helpers and trims the surface area.

  • Commit fdfe5125 — unify Responses stream processing, preserve unindexed output boundaries, remove obsolete helpers.

Abort reasons preserved for restart recovery

Abort reasons (cancellation, timeout, etc.) are now preserved as codes so restart recovery logic can read a structured reason instead of guessing. Transport layers only rethrow coded abort reasons.

  • Commit a348a63c — preserve abort reasons, rethrow only coded abort reasons, prove restart abort code reaches the recovery verdict.

Reduced reply delay with model policy configuration

When a model policy is configured, model selection metadata is now reused via a snapshot, avoiding redundant resolution on every reply. Covered with concurrent snapshot reuse tests.

  • Commit 47d37ddd — reuse model selection metadata snapshot, cover concurrent model policy snapshot reuse.

🖥️ UI / Labs

Labs roster completed with remaining experimental gates

Labs now exposes Tool Search mode, lean local-model tools, and message audit metadata in addition to the two original entries. The registry was updated to support non-boolean gates (mode values, audit levels). Tool Search writes mode: "directory"; audit offers direct with a restart hint.

  • Commit a3283af7 — complete Labs roster, mode-based gates, read-enabled overrides, restart hint for audit.

Durable session board face and dashboards index

The session "board face" preference (which view a thread opens on) is now persisted server-side in SessionEntry.boardFace, surviving device switches and session list evictions. A new /dashboards index lists threads whose preferred face is "dashboard".

  • Commit 8b66fc10 — persist boardFace, add dashboards index, update Swift bindings and docs map, reject pre-rename face param.

Quick Chat geometry fixes (Linux/macOS companion)

Two geometry bugs in Quick Chat: mixed coordinate spaces (pixel density mismatch between monitors) and unanchored widget growth that pushed content off-screen. Both fixed with coordinate-space re-expression and conditional re-anchoring.

  • Commit 730b341f — coordinate-space fix for multi-monitor, re-anchor only on actual resize.

🐧 Linux / macOS Companion

macOS tray icon fixed

The macOS tray icon was rendering as a solid white square because the alpha-channel-only template image was opaque. A dedicated template silhouette (tray-template.svg) now renders the mascot correctly on macOS. Other platforms keep the full-color icon.

macOS companion build restored after Quick Chat regression

The Tauri companion stopped compiling for macOS when Quick Chat landed, because WebviewWindowBuilder::transparent needs the macos-private-api feature. Now enabled alongside the matching config flag. A new per-PR macOS cargo check (upgraded to cargo test) prevents future silent breakage. Rust test suite also fixed: an outdated assertion about TLS-pinned capabilities was corrected, and an rpath is emitted for Swift runtime linking.

  • Commit e94796e4 — restore macOS companion build, enable macos-private-api, add per-PR macOS cargo check, fix Swift rpath, correct TLS-pinned capabilities assertion.

Tray gateway operations serialized

Tray gateway operations (connect, disconnect, menu actions) are now serialized to prevent races when the user interacts rapidly.

🔌 Channels & Integrations

LINE message size limits enforced

Replies now respect LINE's hard limits on postback data length and action button URIs. Oversized actions surface fallbacks, and all action types (flex, imagemap, carousel) are normalized at builder boundaries. Limits are counted by code point, not byte.

  • Commit 0c35fd57 — cap flex postback data and action URIs, surface unavailable oversized actions, normalize at builder boundaries, count by code point.

Telegram forum topics no longer answered twice

A bug caused Telegram forum topics to create duplicate conversations per topic, resulting in double replies. Fixed with doctor repair for existing duplicates. The General topic identity is also repaired.

  • Commit 71eb9a3e — fix duplicate conversation per topic, repair General topic identity.

Telegram dispatch dedupe scoped by bot identity

Dispatch deduplication was global, causing cross-bot interference. Now scoped by bot identity, with a documented key cutover.

  • Commit 0ac926b8 — scope dispatch dedupe by bot identity, require bot identity for dedupe, document cutover.

Discord interaction deferrals cleared on cancel

Cancelled Discord interaction defers are now properly cleared, preventing stale defers from blocking subsequent interactions.

Thread addressing declared as a channel trait

Thread addressing is now a declared channel capability rather than being implicitly assumed. Tasks use this to gate direct parent-review delivery.

  • Commit 37182b90 — declare thread addressing as channel trait, require declared capability for direct delivery, document no-target-parsing tradeoff.

Explicit-reply-tag opt-out honored

Channels can now declare they opt out of explicit reply tags. The default is stated truthfully in docs, and the reply delivery logic honors the declaration.

  • Commit a2eceb9b — honor channel-declared explicit-reply-tag opt-out, update docs.

🔐 Auth & Accounts

Profile migration boot loop fixed

When a non-main agent store deliberately deduplicated an OAuth credential already owned by the main store, the migration verification treated it as data loss and aborted. This caused a boot loop: the runtime refuses to start while legacy credentials exist, and doctor --fix had just failed. Now treats deduplicated profiles as verified.

Assistant agent identity no longer fabricated as "main"

The assistant agent identity was hardcoded to "main" before roster resolution, causing "unknown agent id 'main'" flashes on every page reload for installs with retired main agents. Now carries no agent id until roster resolution.

  • Commit bb55d448 — drop fabricated "main" agent identity, carry no agent id until roster resolves.

OpenAI onboarding models account-aware

Onboarding model lists are now filtered by the connected OpenAI account, showing only models the account has access to.

⚡ Performance

ACP meta reads no longer scan entire session store

Every per-session ACP meta read was listing and JSON-parsing the entire session store to find one row, making sessions.list O(rows²). A profile showed 12.7s of a 78.5s window in this path. Now uses exact single-row probes, with a case-variant fallback that scans keys (not parsed entries).

  • Commit 570eab59 — exact read-only probes, split store binding out of session-meta, case-variant fallback scans keys only.

Admin usage aggregation shared across providers

Admin usage aggregation logic was duplicated across provider implementations. Now shared via a common utility.

🛠️ CLI & Tooling

Bun runtime support

OpenClaw can now run under Bun runtimes that provide node:sqlite. Includes a workaround for Bun's rejection of non-spawn options in execa. Docs updated with caveats about Bun install workspace behavior.

  • Commit a05cfd47 — allow Bun runtimes with node:sqlite, drop execa buffer encoding under Bun, cite upstream issue.

Better CI fallback when remote never ran the checks

When Blacksmith (the CI remote) is unreachable due to lease/DNS/network failures, the tooling now falls back to local execution instead of surfacing exit 1 (which looked like a failure). Uses a positive pre-dispatch signature to distinguish "never ran" from "ran and failed".

  • Commit c5d6dcfc — fall back to local execution when remote never ran, require positive pre-dispatch evidence.

Control UI mock server gets cron fixtures and opt-in approval

The mock Control UI server now serves cron fixtures and requires --fixture=approval for exec approval, making development testing more realistic.

Escaped newline shell words rejected

The shell word parser now rejects escaped newlines in shell words, preventing a class of injection vectors.

🔄 Changelog

Noted fixes

A changelog entry was committed covering the most notable fixes in this period:

  • Codex runtime controls
  • WAL verification
  • Model-policy latency improvements
  • Claude stall-recovery fixes

Commit af9d583e

Highlights from 200 of 3,525 commits in the period. For the full log, see the commit history.

Repository updates

Follow future updates

Get generated openclaw/openclaw development summaries by email, or follow the weekly and monthly RSS feeds.

Sign in to subscribe by email. RSS feeds are public.

Sign in to subscribe