AI Catchup

Claude Code Ships Screen Reader Mode: Plain-Text TUI for VoiceOver and NVDA

By 3 min read

Claude Code now has an opt-in screen reader mode that replaces boxes, spinners, and in-place redraws with labeled linear text that VoiceOver and NVDA read in order. Turn it on with the --ax-screen-reader flag, the CLAUDE_AX_SCREEN_READER env var, or the axScreenReader setting (v2.1.181+). Menus become numbered lists, a terminal bell signals when Claude needs you, and separate settings cover magnifiers, reduced motion, and colorblind themes.

Claude Code now ships an opt-in screen reader mode that replaces its visual terminal interface (boxes, progress animations, in-place redraws) with plain, linear, labeled text that a screen reader such as VoiceOver or NVDA reads in order. You can hold a full conversation, approve tool permissions, and review output end to end (Anthropic docs). It requires Claude Code v2.1.181 or later.

Key Takeaways

  • Three ways to enable, in precedence order: the --ax-screen-reader flag (one session), the CLAUDE_AX_SCREEN_READER=1 environment variable (one shell), or "axScreenReader": true in your user settings file (every session, every terminal) (Anthropic docs).
  • Every transcript message starts with a searchable label such as you:, claude:, tool:, tool error:, error:, and Permission Required:, so you can jump between sections with your terminal's scrollback search.
  • Menus become numbered lists. Permission prompts and other arrow-key menus read out as numbered options with an "Enter selection" prompt; type the number and press Enter. Yes/no prompts take a typed y or n.
  • The terminal bell rings when Claude finishes a reply, a permission prompt appears, or a tool running longer than 5 seconds finishes. No transcript polling needed.
  • Claude Code emits OSC 133 markers at turn boundaries, so jump-to-previous-prompt keys (Cmd+Shift+Up in iTerm2, Cmd/Ctrl+Up in VS Code's terminal) hop between turns.
  • Non-screen-reader accessibility is separate and stacks with the mode: CLAUDE_CODE_ACCESSIBILITY=1 keeps the cursor trackable for magnifiers, prefersReducedMotion cuts animations, and dark-daltonized / light-daltonized themes handle colorblind-friendly contrast.

What Your Screen Reader Hears

In the mode, Claude Code writes flat text: no box-drawing characters, no color-only cues, no redraws of unchanged content, spinners rendered as static text, and tables read as Header: value sentences instead of a box-character grid (tables require v2.1.198+). Output accumulates in normal scrollback, so your screen reader's review commands and your terminal's search both work on the full history. When the mode turns on, the first printed line confirms it and names the method, for example [Screen Reader Mode: on via flag] (v2.1.206+). Cycling permission modes with Shift+Tab announces the mode you land on, such as [plan mode on] (v2.1.210+).

Why This Matters Beyond Screen Reader Users

Terminal agents have quietly been one of the least accessible corners of the AI tooling boom: TUIs repaint constantly, communicate state through color and spinners, and bury permission prompts inside redrawn boxes, all of it hostile to assistive tech. Claude Code is the first of the major coding agents to ship a documented, versioned screen reader mode with labeled output and audible attention cues, and the design brief overlaps heavily with what scripting and logging users want too (plain linear output already exists separately via claude -p non-interactive mode). It also sets a bar: if your team standardizes on an agent, "can every engineer actually operate it" now has a concrete checklist to compare against.

Known limitations worth noting: the mode does not auto-enable when a screen reader is running, attached background sessions still enter the alternate screen with no native scrollback, and costs are announced at exit rather than per turn (Anthropic docs).

How to Use This Update

If you use VoiceOver or NVDA, add "axScreenReader": true to your user settings so every session on the machine starts in the mode, and learn the label vocabulary; searching scrollback for Permission Required: is the fastest way to find what Claude is waiting on. If you use a magnifier, set CLAUDE_CODE_ACCESSIBILITY=1 instead. And if you lead a team, put the issue tracker link in front of any engineer using assistive tech; Anthropic asks for the assistive technology in the title, and the docs read like a team actively taking reports.

Frequently Asked Questions

How do you turn on Claude Code screen reader mode?

Three ways, in precedence order: run claude --ax-screen-reader for one session, set CLAUDE_AX_SCREEN_READER=1 for a shell, or add axScreenReader: true to your user settings file for every session. Requires Claude Code v2.1.181 or later.

What does screen reader mode change?

Claude Code prints flat labeled text instead of boxes, spinners, and redraws. Messages start with labels like you:, claude:, tool:, and Permission Required:, tables read as Header: value sentences, and menus become numbered lists you answer by typing a number.

How do you know when Claude Code needs your attention?

In screen reader mode the terminal bell rings when Claude finishes a reply, when a permission prompt appears, and when a tool running longer than 5 seconds finishes. Outside the mode, set preferredNotifChannel to terminal_bell for similar alerts.

Does Claude Code support screen magnifiers and colorblind themes?

Yes, separately from screen reader mode. Set CLAUDE_CODE_ACCESSIBILITY=1 to keep the native cursor visible for magnifiers like macOS Zoom, use prefersReducedMotion to cut animations, and pick the dark-daltonized or light-daltonized theme for colorblind-friendly colors.

Get the weekly AI Catchup

Tools, practices, and what matters -- in your inbox every Monday.