v2026.8.21
Breaking Changes
Fixed
- Interactive submissions now render a local pending user echo immediately, reconcile it with the canonical
message_start, and remove it for rejected or extension-handled input without writing render-only state to session history. - The
claude-sdk-oauthlane now surfaces Claude policy refusals (for example cybersecurity refusals) as an immediate, user-visible error naming the refusal category and explanation, instead of hanging until the ~90s stream watchdog timeout. Refusals are classified as non-retryable, so they no longer enter the timeout-retry ladder or account failover (#1052). - Contended settings-lock retries now sleep via
Atomics.waitinstead of busy-waiting, retry-fallback canonicalization is memoized per error burst, andcursor-cli-oauth/claude-sdk-oauthsettings loads are cached by mtime+size. Together these eliminate the settings-lock CPU-spin that froze the TUI at ~100% CPU under provider-error storms (#1056).
Added
Changed
-
Settings reads no longer acquire the settings lock: writes publish atomically via a same-directory temp file plus rename, so read-only settings loads skip lock acquisition entirely and can never observe a torn write. Concurrent writers still serialize on the lock and re-merge against the winner's content.
-
Refreshed dependency pins, including
@anthropic-ai/claude-agent-sdk0.3.238,jsdom30,undici8.10.0,marked18.0.10,highlight.js11.12.0,grok-mermaid0.2.3,minimatch10.2.6,ws8.21.3, andtypebox1.3.16, and removed the unused@mistralai/mistralaiand@types/msentries. -
The
monitortool's description, schema text, prompt guidance, and terminal docs now state the verified contract (PTY output with stderr merged, event-only filtering, dedup and pause semantics) and include worked recipes plus an anti-pattern reference.