This setup and acceptance-test guide makes activation, verification, failure diagnosis, and rollback observable by the person who will use the workflow. It does not claim that every assistive-technology and terminal combination has been certified.
What screen reader mode changes
Anthropic announced the mode on July 20, 2026. The official thread says the flag replaces the visual terminal UI with plain linear text, then names transcript labels, numbered menus, a terminal bell, the environment variable, and the persistent setting.
Running `claude --ax-screen-reader` swaps the visual terminal UI for plain, linear text that screen readers (like VoiceOver and NVDA) can follow.
— @ClaudeDevs July 20, 2026
The operational details below are based on Anthropic's current screen reader guide, settings reference, CLI reference, terminal guide, and Claude Code changelog, checked July 21, 2026. No cross-platform assistive-technology lab run was performed for this article. VoiceOver and NVDA are examples in Anthropic's documentation, not evidence of an exhaustive support matrix.
The current docs and changelog describe the version history differently. The accessibility page gives v2.1.181 as the minimum, while the changelog records “Added screen reader mode” under v2.1.208. This guide preserves both records. Use a current release instead of treating either entry as a reason to pin an older build.
Prerequisites and version baseline
Check the binary that your terminal will actually launch:
claude --version
The documented hard minimum is v2.1.181. A more useful rollout floor is v2.1.211 or later, because the intervening releases add or fix behavior relevant to acceptance testing:
| Version | Relevant behavior in current Anthropic sources |
|---|---|
| v2.1.181 | Documented minimum; older builds reject the flag as unknown |
| v2.1.198 | Tables in replies become Header: value sentences instead of character grids |
| v2.1.206 | Startup confirmation names whether flag, environment, or settings enabled the mode |
| v2.1.210 | Shift+Tab permission-mode changes receive a one-time spoken-friendly announcement |
| v2.1.211 | Fixes the audible bell being disabled by /terminal-setup or onboarding setup |
For a native install, claude update follows the configured release channel. Homebrew, WinGet, and Linux package-manager installs normally use their package manager instead; Anthropic's installation guide lists the current commands. If the version remains old after an update, check for competing binaries with which -a claude on macOS/Linux or where.exe claude on Windows, as described in the installation troubleshooting guide.
You also need a terminal with usable scrollback and your normal assistive technology. Our Claude Code dynamic-workflows guide provides a broader tour of interactive sessions, requirements, and permission handling.
Fast path: one accessible session
Run:
claude --ax-screen-reader
On v2.1.206 or later, the first line should be:
[Screen Reader Mode: on via flag]
Versions from the documented minimum through v2.1.205 use the older confirmation [Accessible screen reader mode: on]. An unknown-option error means the running binary is too old or is not the binary you updated.
This flag affects the interactive terminal renderer. It does not install a screen reader, synthesize speech, alter the selected model, or change Claude Code's permission policy. Your assistive technology reads the linear terminal output.
Activation methods and precedence
Choose the narrowest scope that matches your use. Anthropic documents three activation methods, in this precedence order: flag, environment variable, settings.
| Method | Command or file | Scope | Best use |
|---|---|---|---|
| CLI flag | claude --ax-screen-reader | One launch | First test, shared computer, or occasional use |
| Bash/Zsh environment | export CLAUDE_AX_SCREEN_READER=1 | That shell and child processes | Remote shell or temporary terminal profile |
| PowerShell environment | $env:CLAUDE_AX_SCREEN_READER = "1" | That PowerShell session and child processes | Windows test or remote PowerShell session |
| User setting | "axScreenReader": true in ~/.claude/settings.json | All Claude Code sessions for that user | Daily use across terminals, including VS Code's integrated terminal |
For persistent user settings, merge the key into the existing JSON rather than replacing the file.
{
"axScreenReader": true
}
The settings scope reference places personal preferences in user scope. Avoid committing this preference to a repository's .claude/settings.json: project settings are shared with every collaborator, while assistive-technology needs are personal. For SSH, set the variable or user setting on the remote machine, where the Claude Code process runs.
Precedence explains many confusing results. A launch flag wins over CLAUDE_AX_SCREEN_READER; the environment wins over the JSON setting. After Claude Code relaunches itself to finish an update, it passes the mode through the environment, so the new process can report on via env even when the original launch used the flag or setting. That documented relaunch behavior is not proof that your configuration changed.
Persistence and rollback
Rollback should be tested alongside enablement, especially on a shared or managed workstation.
| What enabled the mode | Make it persist | Turn it off |
|---|---|---|
--ax-screen-reader | Put the flag in a personal launcher or alias only if that is intentional | Exit and relaunch without the flag |
| Bash/Zsh environment | Add export CLAUDE_AX_SCREEN_READER=1 to the user's shell profile | Run unset CLAUDE_AX_SCREEN_READER; also remove the profile line for future shells |
| PowerShell environment | Add $env:CLAUDE_AX_SCREEN_READER = "1" to the user's PowerShell profile | Run Remove-Item Env:CLAUDE_AX_SCREEN_READER; also remove the profile line |
| User setting | Keep "axScreenReader": true in ~/.claude/settings.json | Change it to false or remove the key |
For a one-launch override when settings enable the mode, use CLAUDE_AX_SCREEN_READER=0 claude in Bash/Zsh, or set $env:CLAUDE_AX_SCREEN_READER = "0" before launching from PowerShell. Anthropic explicitly documents that 0 keeps the mode off even when the setting is true. It cannot negate a positive --ax-screen-reader flag, which has higher precedence.
Inside Claude Code, /status shows which settings sources loaded. It does not identify which source supplied each individual key. If a settings file is malformed or rejected, run claude doctor for the source and validation error.
Screen reader and terminal setup
Screen reader mode does not auto-detect VoiceOver, NVDA, or another assistive technology. Turn it on explicitly, then test the exact combination the user relies on. Anthropic does not currently publish a certification table for JAWS, Orca, Braille displays, terminal multiplexers, or every terminal emulator; compatibility should not be inferred from the phrase “plain text.”
Do not confuse CLAUDE_AX_SCREEN_READER with CLAUDE_CODE_ACCESSIBILITY. The latter keeps the native terminal cursor visible for screen magnifiers such as macOS Zoom; it does not enable linear screen-reader output. The same accessibility reference documents prefersReducedMotion and the dark-daltonized and light-daltonized themes for separate needs. These controls can be used alongside screen reader mode.
The terminal changes how efficiently a user can revisit earlier turns:
| Terminal | Documented way to move between OSC 133 turn markers | Fallback |
|---|---|---|
| iTerm2 | Cmd+Shift+Up | Search scrollback for you: or claude: |
| VS Code terminal | Ctrl+Up on Windows; Cmd+Up on macOS | Search the integrated terminal's scrollback |
| Windows Terminal | Bind its scrollToMark action; no default key | Search scrollback for transcript labels |
| Kitty or Ghostty | Use the terminal's documented jump-to-prompt key | Search for transcript labels |
| macOS Terminal | It does not act on Claude Code's OSC 133 markers | Search for you: |
| WezTerm | Claude Code does not emit these markers there | Search for you: |
The bell is the terminal's own alert. In screen reader mode it rings when Claude finishes a reply, a permission prompt appears, or a tool that ran longer than five seconds finishes. If an earlier Apple Terminal setup disabled it, update to v2.1.211 or later and re-enable Audible bell under Settings → Profiles → Advanced.
Test the host terminal independently. In Bash or Zsh, run:
printf '\a'
In PowerShell, run:
[Console]::Write("`a")
If that produces no audible or configured visual alert, fix the terminal before diagnosing Claude Code. The broader terminal configuration guide covers bell, desktop-notification, and tmux passthrough settings.
Expected behavior
When the mode is active, the interface becomes an accumulating terminal transcript rather than a continuously redrawn visual UI. Anthropic documents these observable changes:
- interface chrome has no box-drawing characters or color-only cues;
- unchanged content is not redrawn, and progress spinners become static text;
- messages begin with searchable labels such as
you:,claude:,tool:,tool error:,error:, andPermission Required:; - menus become numbered lists followed by an
Enter selectionprompt; - yes-or-no prompts accept
y,n,yes, orno; - the terminal cursor follows the input caret;
- reply tables become
Header: valuesentences on v2.1.198 or later; - fullscreen
tuisettings are ignored for the foreground screen-reader session.
This simplified transcript is still interactive. Tool permissions remain in force; they are presented as numbered choices rather than an arrow-key-oriented visual dialog. The mode improves access to the prompt but does not approve an action on the user's behalf. The permission and workflow controls in our Claude Code best-practices guide still apply.
Verification checklist
Use this acceptance test on the user's real OS, terminal, and assistive technology. It avoids modifying a project.
- Confirm the executable. Run
claude --version; require v2.1.181 or later and prefer v2.1.211 or later. - Confirm activation. Start
claude --ax-screen-readerand listen for or inspect the startup confirmation. On current builds it should nameflag. - Confirm labels and table linearization. Submit:
Reply with a two-column Markdown table containing one row: Mode, ready.Verify the user and Claude labels are announced, and on v2.1.198+ the table reads as header-value sentences rather than a box grid. - Confirm menu control. Open a dismissible selection menu such as
/theme. Verify that choices are numbered, the valid range is announced, an out-of-range number is rejected without exiting, and Escape cancels the menu. - Confirm caret tracking. Type a first line, use
Ctrl+Jto add a second line without submitting, and edit both lines. Use the screen reader's current-line command to check that focus follows the input caret, then clear the draft. - Confirm permission-mode feedback. On v2.1.210+, cycle once with
Shift+Tab, verify a one-time announcement such as[plan mode on], then return to the user's original mode. Do not leave a more permissive mode selected by accident. - Confirm history navigation. Use the terminal's marker shortcut where supported; otherwise search scrollback for
you:and move through at least two turns. - Confirm alerts. First prove the terminal bell works with
printf '\a'outside Claude Code. Then verify an alert at the end of a harmless reply. - Confirm persistence. Relaunch through the intended environment variable or user setting and verify the startup line names that method.
- Confirm rollback. Disable that method, relaunch, and verify the screen-reader confirmation is absent and the normal renderer returns.
Record the Claude Code version, OS, terminal and version, assistive technology and version, activation method, and result for each check. A short evidence log is more useful than “works on my machine.” Teams that use the test loop in our Claude Code QA app guide can add this matrix to the same release check.
Troubleshooting decision table
| Symptom | Most likely explanation | Next check or action |
|---|---|---|
error: unknown option '--ax-screen-reader' | The running binary is older than v2.1.181, or another install wins on PATH | Run claude --version, then which -a claude or where.exe claude; update or remove the stale installation |
| No method-specific startup line | The build is older than v2.1.206, or the mode is off | Check for the older [Accessible screen reader mode: on] line; otherwise relaunch with the flag |
Startup says on via env unexpectedly | The environment overrides settings, or Claude Code inherited the mode during an update relaunch | Inspect CLAUDE_AX_SCREEN_READER; unset it and start a fresh process if settings should control the mode |
| Settings file appears ignored | Wrong file, invalid JSON, or a higher-precedence environment/flag value | Run /status to see loaded sources, then claude doctor; remember /status does not attribute individual keys |
| Tables still read as grids | Claude Code is older than v2.1.198 | Update and repeat the one-row table test |
| Permission-mode change is silent | Build is older than v2.1.210, or the mode changed by something other than Shift+Tab | Update and test by cycling with Shift+Tab; other change paths remain a documented limitation |
| No bell | Terminal bell is disabled, or old /terminal-setup behavior disabled Apple Terminal's bell | Test printf '\a', enable the terminal bell, and use v2.1.211+ |
| Jump-to-turn shortcut does nothing | Terminal has no binding, does not act on OSC 133, or Claude Code does not emit markers there | Bind scrollToMark in Windows Terminal; in macOS Terminal or WezTerm, search for you: instead |
| Attached background session has no native scrollback | claude attach still enters the alternate screen | Exit with Left Arrow on an empty prompt, or Ctrl+Z when a dialog has focus; use a foreground session for the acceptance test |
| A screen reader not named by Anthropic behaves poorly | No official compatibility result exists for that exact combination | Capture a minimal reproduction and report OS, terminal, assistive technology, and their versions to the issue tracker |
Team rollout checklist
- Inventory the combinations people actually use: OS, terminal, shell or PowerShell, screen reader or Braille software, and versions.
- Standardize on v2.1.211 or later, then record the exact tested build instead of saying “latest.”
- Let each user choose the flag, environment, or user setting. Keep the preference out of shared project configuration unless every collaborator has explicitly agreed to it.
- Run the verification checklist with the user who depends on the assistive technology; a sighted review of the plain transcript is not equivalent.
- Include permission prompts, long replies, tables, errors, multiline input, terminal search, bells, and rollback—not only a successful greeting.
- Treat
claude attachand other alternate-screen workflows as a separate test because foreground success does not cover them. - Document how to re-enable the terminal bell and how to remove every persistence mechanism.
- Keep a small issue template with Claude Code, OS, terminal, and assistive-technology versions plus a secret-free reproduction.
- Re-run acceptance checks after changing Claude Code, the terminal, the screen reader, shell profiles, or managed settings.
Privacy and known limitations
Screen reader mode changes terminal presentation, not Claude Code's data path. Anthropic's data-usage documentation says prompts and model outputs are sent over the network for inference, with retention depending on account type and preferences. Its application-data guide says local session transcripts and tool results under ~/.claude/projects/ are plaintext and subject to a 30-day cleanup by default. The separate prompt-history file at ~/.claude/history.jsonl persists until it is manually deleted. Terminal scrollback is another local copy. On a shared machine, review operating-system permissions, terminal history behavior, and the cleanupPeriodDays or CLAUDE_CODE_SKIP_PROMPT_HISTORY controls before handling sensitive material.
Do not paste credentials, private source, or a full transcript into a public accessibility issue. Anthropic asks reports to name the operating system, terminal, assistive technology, and versions; a minimal redacted reproduction is usually enough.
Current documented limitations remain:
- activation is opt-in rather than automatic when a screen reader starts;
- permission-mode changes are announced only when cycling with
Shift+Tab; - attached background sessions still use the alternate screen and lack native scrollback;
- costs are announced in the exit summary rather than after each turn;
claude -pnon-interactive mode is unchanged because it already writes plain text;- the docs name VoiceOver and NVDA as examples but do not certify every assistive technology or terminal combination.
A rollout can therefore accept foreground use while keeping background sessions and unlisted assistive technologies marked as unverified.
FAQ
What is the minimum Claude Code version for screen reader mode?
Anthropic's current accessibility documentation says v2.1.181 or later. For the fuller experience, use v2.1.211 or later because later builds add linearized tables, method-specific startup confirmation, permission-mode announcements, and an audible-bell fix.
Does Claude Code screen reader mode provide text-to-speech?
No. The mode changes Claude Code's terminal rendering to plain, labeled, linear text. VoiceOver, NVDA, or another assistive technology is responsible for speaking or presenting that text.
How do I keep Claude Code screen reader mode enabled?
Add axScreenReader set to true in your user settings file at ~/.claude/settings.json, or persist CLAUDE_AX_SCREEN_READER=1 in your shell profile. The user setting is usually clearer because it applies across terminals.
Does Claude Code officially support JAWS, Orca, or Braille displays?
Anthropic's current page names VoiceOver and NVDA as examples but does not publish an exhaustive assistive-technology certification matrix. Test the exact operating system, terminal, and assistive-technology combination before a team rollout.
Can I use Claude Code screen reader mode over SSH?
Yes. Anthropic says to set the environment variable or settings file on the remote machine where Claude Code runs. Confirm the startup line in the remote terminal and test its bell and scrollback behavior.
How do I turn Claude Code screen reader mode off?
Exit a flag-started session and relaunch without the flag, unset CLAUDE_AX_SCREEN_READER, or set axScreenReader to false. CLAUDE_AX_SCREEN_READER=0 also forces the mode off when a settings file enables it.
Get the latest on AI, LLMs & developer tools
New MCP servers, model updates, and guides like this one — delivered weekly.
Related Guides
How to Change Antigravity Themes
Customize themes, dark mode, icons, and color schemes.
Rules & ConfigurationAntigravity Rules Guide
How to build custom rules with AGENTS.md and GEMINI.md.
MCP & IntegrationMCP Servers Setup Guide
Step-by-step guide to connecting MCP servers in Antigravity.
ComparisonBest Antigravity Alternatives 2026
Claude Code, Cursor, Windsurf, Codex, and Kiro compared.
Pricing & QuotaAntigravity Cockpit Guide
Monitor AI quota, track rate limits, and manage credits.
MCP & IntegrationGoogle Stitch + Antigravity Guide
The complete design-to-code workflow with DESIGN.md and Vibe Design.
Official sources
- ClaudeDevs screen reader announcement, activation follow-up, and documentation link
- Use Claude Code with a screen reader
- Claude Code settings and environment variables
- CLI reference and terminal configuration
- Installation and updates and installation troubleshooting
- Claude Code changelog
- Data usage and local application data
- Claude Code issue tracker
