Fix Claude Code Terminal Cursor Not Tracked by Screen Readers (NVDA, JAWS, VoiceOver, BRLTTY) in Linux, Windows, and macOS
Claude Code hides the native terminal cursor, making it invisible to screen readers (NVDA, JAWS, VoiceOver, Orca, BRLTTY) and screen magnifiers. Blind and visually impaired users cannot see their text input position — backspace deletes characters with no audible feedback, arrow keys navigate blindly, and users cannot tell where they are editing. This affects ALL platforms (Linux, Windows, macOS) and ALL terminal-based screen readers. The fix (v2.1.84+) adds declarative cursor positioning so the native terminal cursor follows the text input caret, enabling standard screen reader tracking.
Symptoms
- Native terminal cursor stays at bottom-left corner or last render position instead of following text input caret
- Screen readers cannot track text input position — user does not know where cursor is when typing or editing prompts
- Backspace key produces no audible feedback because screen reader cannot detect cursor position change
- Arrow key navigation (left/right/word jump) is invisible to screen readers and screen magnifiers
- CJK IME composition text appears at wrong position (bottom-left corner) instead of at the input caret
- Questionnaires and tool authorization prompts still exhibit cursor tracking issues even after fix
Possible causes
- Claude Code previously hid the native terminal cursor and left it wherever the last render write landed, rather than moving it to follow the text input caret position
- Terminal emulators render IME preedit text at the physical cursor position, and screen readers/magnifiers track the native cursor to follow user input — when the cursor is hidden or static, all accessibility tracking breaks
- Unlike GUI applications that manage their own accessibility tree, terminal applications rely on the terminal emulator's cursor position for screen reader integration — hiding the cursor disables this mechanism entirely
- The issue is architectural: Claude Code's TUI rendering engine did not include cursor positioning commands in its output stream, treating cursor position as an implementation detail rather than an accessibility requirement
Solutions
Use Claude Code Desktop App as Alternative (Windows/macOS)
The Claude Code Desktop application provides better accessibility than the terminal CLI, with native GUI controls that screen readers can interact with more reliably.
- Download Claude Desktop from https://claude.ai/download
- Install and launch the desktop app
- Use the built-in Claude chat interface instead of the CLI for coding tasks
- Note: Desktop app currently lacks some CLI features like direct terminal integration
Risks
- Desktop app may not support all CLI features like MCP server integration or custom slash commands
- Desktop app accessibility also has known limitations — test with your specific screen reader setup
Verification
- Step 1: Launch Claude Desktop app
- Step 2: Navigate to the chat input field using Tab → expect: screen reader announces the input field
- Step 3: Type a prompt → expect: screen reader tracks text entry
- Step 4: Use standard keyboard shortcuts (Ctrl+C, Ctrl+V) → expect: they work as expected
Upgrade Claude Code to v2.1.84 or Later (Official Fix)
Anthropic added declarative cursor positioning in v2.1.84 so the native terminal cursor follows the text input caret, restoring screen reader tracking. This is the recommended and simplest fix.
- Check your current Claude Code version: `claude --version`
- If version is below 2.1.84, upgrade: `npm install -g @anthropic-ai/claude-code@latest`
- Verify the upgrade: `claude --version` → expect: 2.1.84 or higher
- Restart your terminal and launch Claude Code
- Test with your screen reader: type a prompt, use backspace, navigate with arrow keys → screen reader should now announce cursor position and deleted characters
Commands
claude --version
npm install -g @anthropic-ai/claude-code@latest
npm view @anthropic-ai/claude-code version
Risks
- Upgrading may introduce other regressions — test in a non-critical session first
- Questionnaires and tool authorization yes/no prompts may still have cursor tracking issues (see related issue #39900)
Verification
- Step 1: Run `claude --version` → expect: version 2.1.84 or higher (e.g., '2.1.84 (Claude Code)')
- Step 2: Launch Claude Code and type a few characters → expect: screen reader announces each character as typed
- Step 3: Press Backspace → expect: screen reader announces the deleted character
- Step 4: Use Ctrl+Left/Right Arrow to jump words → expect: screen reader announces the word at cursor
- Step 5: Move cursor to middle of existing text and type → expect: screen reader tracks insertion point correctly
Temporary Workaround: Use a Braille Display with BRLTTY Attribute Tracking
For Linux users with BRLTTY, configure attribute-based tracking as a fallback until upgrading to v2.1.84+. BRLTTY can track screen changes via text attributes rather than cursor position.
- Edit BRLTTY configuration (typically /etc/brltty.conf or ~/.brltty.conf)
- Add or uncomment: `attribute-tracking on`
- Restart BRLTTY: `sudo systemctl restart brltty`
- Launch Claude Code and check if braille display now shows prompt area changes
Commands
sudo systemctl restart brltty
cat /etc/brltty.conf | grep attribute
Config examples
# Add to /etc/brltty.conf: attribute-tracking on
Risks
- Attribute tracking is less precise than cursor tracking — may show more screen content than needed
- This is a partial workaround, not a full fix — upgrade to v2.1.84+ is the proper solution
Verification
- Step 1: Run `grep 'attribute-tracking' /etc/brltty.conf` → expect: 'attribute-tracking on'
- Step 2: Run `sudo systemctl restart brltty` → expect: no errors
- Step 3: Launch Claude Code and type text → expect: braille display shows input area changes even without cursor tracking
Agent JSON
Canonical machine-readable representation of this issue:
{
"issue_id": "7488dca7-5c12-4fa6-a35f-733fef3fff3a",
"slug": "fix-claude-code-terminal-cursor-not-tracked-by-screen-readers-nvda-jaws-voiceover-brltty-in-linux-windows-and-macos-dddjym",
"verification_status": "unverified",
"canonical_json": "https://codekb.dev/v1/issues/fix-claude-code-terminal-cursor-not-tracked-by-screen-readers-nvda-jaws-voiceover-brltty-in-linux-windows-and-macos-dddjym"
}