Claude Code 2.1.88: Flicker-Free Rendering, Cache Fixes

2.1.88 brings flicker-free rendering, fixes critical cache bugs causing 50% workflow failures, and resolves memory leaks and crashes in long sessions.

Claude Code 2.1.88: Flicker-Free Rendering, Cache Fixes

TL;DR

  • Flicker-free alt-screen rendering now available via environment variable
  • Fixed critical prompt cache misses and nested CLAUDE.md re-injection in long sessions
  • Resolved StructuredOutput schema cache bug causing ~50% workflow failures
  • Fixed memory leaks, crashes on large files, and voice mode issues across platforms

New

  • Flicker-free rendering — Set CLAUDE_CODE_NO_FLICKER=1 to enable virtualized scrollback with alt-screen rendering, eliminating visual flicker in long sessions.
  • PermissionDenied hook — New hook fires after auto mode classifier denials; return {retry: true} to let the model retry denied commands.
  • Named subagents in typeahead — Subagents now appear in @ mention suggestions for easier discovery.

Fixed

  • Prompt cache misses in long sessions — Tool schema bytes no longer change mid-session, preventing cache invalidation.
  • Nested CLAUDE.md re-injection — Files are no longer re-injected dozens of times when reading many files in extended sessions.
  • StructuredOutput schema cache bug — Fixed ~50% failure rate in workflows using multiple schemas.
  • CRLF doubling on Windows — Edit/Write tools no longer double CRLF or strip Markdown hard line breaks (two trailing spaces).
  • Memory leak in long sessions — Large JSON inputs no longer retained as LRU cache keys.
  • Out-of-memory crash on large files — Edit tool now handles files over 1 GiB without crashing.
  • Crash on large session files — Message removal from files over 50MB now works reliably.
  • --resume crash — Fixed crash when transcript contains tool results from older CLI versions or interrupted writes.
  • Misleading rate limit errors — API entitlement errors now show actual error with actionable hints instead of generic "Rate limit reached" message.
  • LSP server zombie state — Server now restarts on next request after crash instead of failing until session restart.
  • Hook condition filteringif conditions now match compound commands (ls && git push) and env-var prefixes (FOO=bar git push).
  • CJK/emoji in prompt history — Entries with CJK or emoji no longer silently dropped at 4KB boundaries in ~/.claude/history.jsonl.
  • /stats data loss — Historical data beyond 30 days now preserved when cache format changes.
  • /stats token undercounting — Now includes subagent and fork usage in token counts.
  • Scrollback disappearing — Scrolling up in long sessions no longer loses content.
  • Collapsed badge duplication — Search/read group badges no longer duplicate during heavy parallel tool use.
  • Notification invalidationinvalidates now clears currently-displayed notifications immediately.
  • Prompt flashing after submit — Prompt no longer briefly disappears when background messages arrive during processing.
  • Long /btw responses clipped — Responses now render in scrollable viewport instead of being cut off.
  • Devanagari text truncation — Combining-mark text no longer truncated in assistant output.
  • Terminal rendering artifacts — Layout shifts no longer cause visual artifacts on main-screen terminals.
  • Voice mode microphone permission on macOS — Apple Silicon now correctly requests microphone permission.
  • Voice push-to-talk activation — Some modifier-combo bindings now work correctly.
  • Voice mode WebSocket error on Windows — Fixed "WebSocket upgrade rejected with HTTP 101" error.
  • Shift+Enter on Windows Terminal Preview — Now inserts newline instead of submitting on version 1.25+.
  • UI jitter in iTerm2 + tmux — Periodic jitter during streaming now eliminated.
  • PowerShell stderr reporting — Commands like git push writing to stderr no longer incorrectly reported as failures on Windows PowerShell 5.1.
  • SDK error result messageserror_during_execution and error_max_turns now correctly set is_error: true with descriptive messages.
  • Task notifications lost on Ctrl+B — Backgrounding a session no longer loses notifications.
  • Hook file_path not absolute — PreToolUse/PostToolUse hooks now provide absolute paths for Write/Edit/Read tools.

Improved

  • PowerShell tool prompt — Now includes version-appropriate syntax guidance for 5.1 vs 7+.
  • Thinking summaries disabled by default — No longer generated in interactive sessions; set showThinkingSummaries: true in settings to restore.
  • Auto mode denials visibility — Denied commands now show notification and appear in /permissions → Recent tab.
  • /env scope expanded — Now applies to PowerShell tool commands (previously Bash only).
  • /usage plan display — Hides redundant "Current week (Sonnet only)" bar for Pro and Enterprise plans.
  • Collapsed tool summary — Now shows "Listed N directories" for ls/tree/du instead of "Read N files".
  • Image paste behavior — No longer inserts trailing space.
  • Bash mode entry — Pasting !command into empty prompt now enters bash mode, matching typed ! behavior.

Update Claude Code: brew upgrade claude-code or download from code.claude.com.

Source: Claude Code