[BUG] Mouse tracking + bracketed paste experiment (tengu_malort_pedway) breaks all keyboard input on macOS

Resolved 💬 3 comments Opened Apr 29, 2026 by NorrenZheng Closed May 5, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

Started ~24 hours ago. Every new Claude Code window I open has broken input. Older windows opened before the change continue to work fine, which means this was server-pushed, not a local issue.

Symptoms (all in fresh windows, no other changes on my system):

  • Keyboard input drops characters and becomes unresponsive after a few seconds
  • Comma key sometimes needs to be pressed twice to register
  • Voice dictation (macOS Dictation) is completely unable to inject text
  • Pasting text from Claude.ai or any rich-text source dumps ^[[<35;...M, ^[[O, ^[[I, and ^[[201~ sequences into the input box
  • Moving the mouse over the Claude Code window also injects ^[[<35;X;YM sequences (mouse tracking SGR 1006 reports leaking into stdin)
  • iTerm2 detects this and pops up "Looks like mouse reporting was left on when an ssh session ended unexpectedly or an app misbehaved. Turn it off?"
  • Terminal sometimes becomes completely unresponsive — Ctrl+C does nothing, even after the claude process has exited the parent shell's TTY state stays corrupted

Same behavior across Terminal.app, iTerm2, and Warp. Same behavior on Node v24 (original) and Node v22.22.2 (after I reinstalled via nvm). Same on Claude Code 2.1.123 and 2.1.104.

Found this in ~/.claude.json which I think is the smoking gun:

"cachedGrowthBookFeatures": {
  "tengu_malort_pedway": {
    "mouseAnimation": true
  }
}

Looks like a GrowthBook A/B experiment turning on mouse tracking for some users. I never opted into experimental features. As a paying Max subscriber I expect to be informed before experimental features get pushed to my account, especially ones that break core input handling.

Tested setting mouseAnimation: false directly in the config — that made things worse (every mouse move leaked, not just edge cases), so the flag is clearly tied to active code paths but doesn't have a clean "off" state. Reverted via backup.

This is a regression. Same machine, same workflow, fully working until ~28 hours ago. ~24 hours of lost work.

What Should Happen?

  1. Keyboard input, paste, and macOS Dictation should work in Claude Code regardless of which experiment group I'm assigned to.
  1. Experimental features that touch core input handling (mouse tracking, bracketed paste, focus reporting) should not be silently rolled out via server-pushed feature flags. There should be an explicit opt-in for paying users, or at minimum an environment variable / settings flag to opt out of cachedGrowthBookFeatures.*.
  1. Disabling tengu_malort_pedway.mouseAnimation in the local config should cleanly disable the feature without leaving mouse tracking partially enabled.
  1. Ideally, accounts on paid tiers (Max/Pro) should not be enrolled in TUI experiments at all without consent.

Error Messages/Logs

Sample of the input field corruption (mouse tracking SGR 1006 reports leaking into the prompt):

^[[<35;120;45M^[[<35;120;44M^[[<35;119;44M^[[<35;118;44M^[[<35;118;43M^[[<35;117;43M
^[[<35;116;43M^[[<35;115;43M^[[<35;115;42M^[[<35;114;42M^[[<35;113;42M^[[<35;112;42M
^[[<35;112;41M^[[<35;111;41M^[[<35;110;41M^[[<35;109;40M^[[<35;108;40M

After paste from Claude.ai (bracketed paste end marker + focus event leaking after content):

[pasted markdown content] ... ^[[201~^[[O

Active GrowthBook flag from ~/.claude.json:

"cachedGrowthBookFeatures": {
  "tengu_malort_pedway": {
    "mouseAnimation": true
  }
}

iTerm2 dialog confirms the application left mouse reporting on:
"Looks like mouse reporting was left on when an ssh session ended unexpectedly or an app misbehaved. Turn it off?"

Steps to Reproduce

  1. Open a fresh terminal window in macOS Terminal.app, iTerm2, or Warp
  2. Run claude to start Claude Code
  3. Move the mouse cursor over the Claude Code window — ^[[<35;X;YM sequences immediately appear in the input box
  4. Try to type — characters drop intermittently
  5. Try macOS Dictation (Fn-Fn) — no text gets injected
  6. Try pasting any markdown/rich-text content from a browser — input field gets corrupted with ^[[201~ and ^[[O artifacts at the end of the paste

The bug only triggers in windows opened after the experiment group was rolled out (~April 28 evening UTC+8 in my case). Pre-existing windows that were running before the rollout continue to work perfectly until they're closed.

Verifying the experiment flag:

cat ~/.claude.json | python3 -c "import json,sys;d=json.load(sys.stdin);print(d.get('cachedGrowthBookFeatures',{}).get('tengu_malort_pedway'))"

If this returns {'mouseAnimation': True} you're in the affected experiment group.

Claude Model

Opus

Is this a regression?

Yes, this worked in a previous version

Last Working Version

2.1.123 was working until ~April 28 evening (UTC+8); the experiment flag rollout broke it mid-session

Claude Code Version

2.1.104 (Claude Code)

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Terminal.app (macOS)

Additional Information

Reproduced in three terminals: Terminal.app (macOS 15.6), iTerm2, and Warp. Same bug behavior across all three.

The smoking gun is in ~/.claude.json:

"cachedGrowthBookFeatures": {
  "tengu_malort_pedway": {
    "mouseAnimation": true
  }
}

tengu_malort_pedway is a GrowthBook A/B experiment flag that's enabling mouse tracking for some accounts. I never opted into experimental features. As a paying Max subscriber, having experimental TUI features silently pushed to my account without consent — and breaking core input handling for 24+ hours — isn't acceptable.

Verifying which users are affected:

cat ~/.claude.json | python3 -c "import json,sys;d=json.load(sys.stdin);print(d.get('cachedGrowthBookFeatures',{}).get('tengu_malort_pedway'))"

Returns {'mouseAnimation': True} for affected accounts.

Manually setting mouseAnimation: false in the local config doesn't cleanly disable it — it actually makes things worse (every mouse move leaks ^[[<35;...M into stdin instead of just edge cases). The flag is wired into active code paths but has no clean off state. Reverted via backup.

Workarounds I've found:

  1. Move mouse cursor outside the Claude Code window before typing
  2. For paste: write content to /tmp/clip.txt and ask Claude to read it instead of pasting
  3. None of these fix voice dictation — that just doesn't work at all

Asks:

  1. Roll back tengu_malort_pedway.mouseAnimation for affected users while the input handler is being fixed
  2. Add a way for paying users to opt out of cachedGrowthBookFeatures.* experiments
  3. ETA on the engineering fix would be appreciated — this has cost me 24+ hours of work already

<img width="789" height="677" alt="Image" src="https://github.com/user-attachments/assets/a6589e20-e84e-4206-81ec-9f66d9318fa1" />

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗