它把框線拆光,換成一行一行的字:Claude Code 的螢幕閱讀器模式
終端機裡那個轉圈圈的符號,每秒重畫好幾次。框線圍出一個盒子,盒子裡的字換掉了,盒子本身沒換。紅色代表出事,待你批准的那一格會亮起來。
這套介面有一半的資訊不在文字裡。它在位置、在顏色、在「剛剛那塊地方變了」這件事上面。
朗讀器拿到的是一串字元。能唸的只有剩下的那一半。
claude --ax-screen-reader 打下去之後,補回那一半的方式,是把整個介面改寫成一行一行、印出去就不再動的字。第一行會告訴你它進來了:[Screen Reader Mode: on via flag]。
三種開法,關掉的時候順序會反過來
1 | # 只開這一次 |
第三種是寫進 user settings:"axScreenReader": true,這台機器上每個 session 都算,VS Code 的整合終端機也算。
三個同時存在時,旗標壓過環境變數,環境變數壓過設定檔。咬人的是關掉那一邊:CLAUDE_AX_SCREEN_READER 設成 0,設定檔裡寫著 true 也沒用,它維持關閉。
版本門檻 v2.1.181,更舊的認不得這個旗標,會回你 error: unknown option '--ax-screen-reader'。走 SSH 的話,變數跟設定要放在跑 Claude Code 的那台遠端機器上,不是你手上這台。
拿掉了什麼,換成什麼
官方列的四件事:框線字元沒了;只靠顏色傳的提示沒了;沒變過的內容不重畫,進度轉圈變成一段靜態文字;Claude 回覆裡的表格不再用框線排版,改成 Header: value 的句子。
第四條最容易被低估。一張用框線排出來的表,欄位對齊靠的是空白的數量,一行一行唸下去會變成一串對不上位置的字。拆成「欄名:值」之後,每一句都自己講完自己是什麼。
取代框線的是標籤。每一則訊息開頭掛一個前綴:
| 標籤 | 是什麼 |
|---|---|
you: |
你送出的訊息 |
claude: |
Claude 的回覆 |
thinking: |
Claude 的思考 |
tool: |
工具活動,例如改了檔案、跑了指令 |
tool error: |
失敗的工具 |
error: |
對話裡的錯誤,例如 API 請求失敗 |
warning: |
Claude Code 的警告,例如換到備援模型 |
Permission Required: |
等你回答的權限詢問 |
Cost: |
結束時印的花費摘要,前提是你的帳號有顯示花費 |
標籤是文字,所以搜得到。這件事等一下會變成整篇最實用的一段。
它會故意停下來等
這模式做過最反直覺的一件事,是把自己變慢。而且慢得很精確:兩個等待點,一個 3 秒,一個 50 毫秒。
3 秒那個在開場。確認行印完之後,它先不畫提示字元,停 3 秒,讓朗讀器把那一行唸完。你按任何一個鍵都能把這段等待結束掉。嫌長或嫌短,CLAUDE_AX_STARTUP_QUIET_MS 可以調,這個變數需要 v2.1.217 以上。
那一行值得等,是因為它的尾巴有三種寫法:on via flag、on via env、on via settings。它不只說「開了」,還說了是哪一層把它開起來的。設定沒吃到的時候,你最想知道的正好就是這件事。要是提示字元搶在朗讀器前面印出去,這句話就被沖掉了,你得到的是一個開著的模式,跟一個不知道為什麼開著的狀態。這 3 秒保護的是那一行的資訊。
50 毫秒那個藏得更深,也更有意思。每次要寫一行新的、或改一行既有的內容之前,它會先把游標移回行首,等 50 毫秒,然後才寫。官方給的理由是:朗讀器接著會從這一行的第一個字元開始讀。
把它換成紙上的動作比較好記。有人拿著一張紙照著念,你要在同一張紙上補字,不能趁他念到一半把整行擦掉重寫,也不能把手指停在行尾就開始改。先把手指挪回行首,讓他知道待會要從頭來過,停一下,再動筆。CLAUDE_AX_PREPARK_MS 管的就是這個「停一下」,需要 v2.1.233 以上。
兩個計時器的量級差很遠,付法也不一樣。3 秒只在開場付一次,而且你按一下鍵就能買回來。50 毫秒是每寫一行付一次,你按不掉,也不會意識到自己在付:單獨一次沒感覺,一整輪輸出跑完就是真的比較慢。這個模式的速度代價不在開場那 3 秒,在這裡。
有個例外:你自己在輸入行尾巴打的字、按 Backspace 刪掉的字,會立刻出現,不吃這 50 毫秒。打字要是延遲 50 毫秒才看得到,這模式就沒人用得下去了。
一個軟體為了讓另一個軟體跟得上,在自己身上裝了兩個計時器。這種設計平常看不到,因為多數程式對「誰在讀我的輸出」這件事根本沒有概念。
選單變成打數字
平常用方向鍵上下選的那些選單,權限詢問也算,在這個模式下變成編號清單。每個選項唸成一行,最後跟一句 Enter selection 提示,那句會把有效的範圍講出來。打數字,按 Enter。
提示結尾有 or Escape to cancel 的,Escape 可以取消。打了一個不在清單上的號碼,它會重講一次有效範圍,讓你再來一次。
/effort 平常是個滑桿,在這裡也變成同一種編號清單。是非題則改成打字回答:y 或 n,yes 跟 no 也吃。
刪字的快捷鍵會把刪掉的內容唸出來。Ctrl+W、Alt+D、macOS 的 Option+Delete、Windows 的 Ctrl+Backspace 刪的是詞;Ctrl+U 跟 Cmd+Backspace 刪到行首;Ctrl+K 刪到行尾。用 Shift+Tab 循環權限模式時,它會唸出你落在哪一個,像 [plan mode on] 或 [accept edits on],而且只印一次,之後重繪不再重複。
回頭找東西,這段對誰都有用
這個模式印出去的東西全部留在 scrollback 裡。它在螢幕閱讀器模式下不理 tui 設定,也不做全螢幕渲染,一路捲下去。所以你可以用朗讀器的回顧指令翻,也可以用終端機自己的搜尋翻。
搜什麼?搜 you:。每則你送出的訊息都掛著這個前綴,搜它等於在對話紀錄裡一段一段跳。
更省事的方式是 OSC 133。Claude Code 會在每一輪的邊界丟出這個 shell integration 標記,終端機的「跳到上一個提示字元」功能就接得住:iTerm2 是 Cmd+Shift+Up,VS Code 終端機在 Windows 是 Ctrl+Up、macOS 是 Cmd+Up。Windows Terminal 沒有預設鍵,要自己在設定裡綁 scrollToMark 這個 action。Kitty 跟 Ghostty 查各自的文件。
有兩個終端機跳不動,原因不一樣。macOS 內建的 Terminal 是收到標記但不理它;WezTerm 則是 Claude Code 根本不對它發標記。結果一樣,都回去搜 you:。
這段我會建議不用朗讀器的人也看一眼。跳轉這件事平常沒人想,是因為框線本來就把段落切得很清楚,眼睛掃過去就找到了。
但眼睛掃只在畫面還沒捲掉的時候有用。翻得夠遠,框線一點忙都幫不上:它切出來的段落邊界不是字,搜尋框吃不到,你也沒辦法把一條框線貼給同事。you: 是字,OSC 133 是終端機自己認得的標記,這兩條路都不必你先記得那一輪長什麼樣子。所以這個模式順手做掉的是一件跟朗讀器沒什麼關係的事:把「翻」變成「查」。
它會敲鈴告訴你輪到你了
畫面上有東西在動的時候,你知道它還在跑。畫面不動了,你得自己判斷是跑完了還是卡住。這個模式改成用聲音講:Claude 回覆結束、有對話框或提示在等你回答、跑超過 5 秒的工具跑完,這三種情況都會敲一下終端機的鈴。
那是你終端機本身的提示音,要靜音就去改終端機的設定。沒開螢幕閱讀器模式但想要類似效果的,設定裡把 preferredNotifChannel 設成 "terminal_bell"。
有一個地方反而變糟
整段 scrollback 的價值,在一種情況下會整個消失。
用 claude attach 接進背景 session,或從 agent view 進去,會進到終端機的替代畫面(alternate screen)。那裡沒有原生的 scrollback。前面講的「全部留著、回頭搜」在這條路上不成立。要退出來,在空的提示字元上按左方向鍵;如果焦點在對話框上,按 Ctrl+Z。
剩下的已知限制裡,有一條的性質跟其他的不一樣:朗讀器在跑,這個模式不會自動開。沒有偵測,沒有提示,要你自己知道有這個旗標,然後自己打。前面講的那些東西,一行一行的輸出、you: 前綴、兩個計時器,全部卡在同一關:你聽說過它沒有。
其他幾條比較雜。用 Shift+Tab 以外的方式改權限模式,例如從某個指令進 plan mode,它不會播報。花費只在結束時的摘要裡講,不是每一輪都講。至於 -p 的非互動模式,這個模式對它沒有任何影響,因為它本來就只吐純文字,那條路是給腳本用的。
我沒開過它,以下是文件寫的
講清楚我的位置:我沒有實際跑起來這個模式,也沒有用 VoiceOver 或 NVDA 聽過它唸出來是什麼樣子。上面每一條都出自官方的無障礙文件,我讀到的是 2026 年 9 月 11 日的版本。3 秒夠不夠、50 毫秒會不會剛好卡在不上不下的地方,那要真的每天靠它工作的人才說得準,我說不準。
這也是我不想把它寫成「原來還有這個隱藏功能」的原因。這是有人每天走的那條路,不是拿來嘗鮮的。
那就順便把三個誰都能拿走的設定列出來:prefersReducedMotion 設 true,spinner、微光那些動畫會減少或消失;/theme 裡有 dark-daltonized 跟 light-daltonized 兩個色盲友善主題,也可以直接寫進 theme 設定;CLAUDE_CODE_ACCESSIBILITY 設成 1,終端機游標會為了螢幕放大鏡(像 macOS 的縮放)保持可見,跟著輸入游標走,v2.1.218 以上還會跟著 /config、/plugin 這類選單與面板的高亮列走。
我的立場,跟會讓我改口的條件
這個模式最實在的價值,是把「靠位置跟顏色傳的資訊」換成「靠文字傳的資訊」。文字可以搜、可以複製、可以貼進 issue 給別人看。框線跟顏色做不到這三件事的任何一件。
但我不會叫所有人都常駐開著。你如果是靠那個轉圈圈和框線的變化來判斷「它現在跑到哪一步」的人,關掉這些之後你會變慢,而且是那種說不上來哪裡慢的慢。反過來,如果你一天有一半的時間在回頭翻它剛剛講過什麼、剛剛改了哪個檔,常駐開著划算。這是我會改口的條件:不是看你用不用朗讀器,是看你花比較多時間在看它動,還是在查它做過什麼。
回到開場那個轉圈圈。它在這個模式下變成一段不會動的靜態文字,聽起來像是功能被拿掉了。實際上被拿掉的只有「這東西正在動」這個非得用眼睛看才拿得到的訊號,換回來的是「它現在在做什麼」這句可以讀、可以搜、可以貼給同事的話。
這個模式換掉的,是你把終端機當成什麼。一面隨時在變的畫面,還是一份從第一行寫到最後一行、可以回頭查的紀錄。
開一次看看,--ax-screen-reader 打下去,看那行確認訊息的尾巴寫的是 flag、env 還是 settings。



































































































































































































