Clau-dio
Hear Claude Code's replies instead of reading them. Every reply Claude Code writes is read aloud as soon as it
arrives, with each word highlighted as it's spoken, so you can look away from the screen while Claude works.
- Automatic: one click to connect to Claude Code, then every reply is read.
- Your choice of voice: your computer's built-in voices, or thousands of natural ElevenLabs voices, each with a
▶ sample. Speed from 1x to 3x, volume, and skipping code blocks.
- Sounds natural: file paths are read as file names, lists and headings as sentences, tables as lists, and links
as "link".
- Tells you when Claude Code needs you: "Claude needs your permission to use Bash", so you can step away.
- Prompts tab: every prompt and reply in the Claude Code conversation you have open, ready to hear again.
- Clipboard tab: text you copy or paste, read aloud on demand, with a daily archive.
- ElevenLabs usage in the status bar, so you always know how much of your plan is left.
Works on Windows, macOS and Linux. Requires the Claude Code extension, signed in to any account.
Unofficial: Clau-dio is an independent extension for Claude Code. It isn't made by, affiliated with or
endorsed by Anthropic. Claude and Claude Code are trademarks of Anthropic; ElevenLabs is a trademark of ElevenLabs.
Getting started
- Install Clau-dio. VS Code installs the Claude Code extension along with it if you don't have it yet;
sign in to Claude Code if you haven't already.
- Clau-dio asks once whether it may connect to Claude Code: choose Connect.
- Ask Claude Code something. The reply is read aloud as soon as it arrives, and the Clau-dio panel
(its icon is in the left sidebar) shows each word as it's spoken.
- In the panel's Settings tab, pick a voice, speed and volume. For more natural voices, add an ElevenLabs API
key at the bottom of Settings.
What it needs
Clau-dio needs the Claude Code extension installed in VS Code and signed in to an active account (any plan, an
API key, or a cloud provider all work). It asks Claude Code itself whether it's signed in (claude auth status),
again whenever Claude Code's sign-in changes. If Claude Code isn't installed, Settings shows Claude Code is
required with an Install Claude Code button; if it's signed out, Settings shows Sign in to Claude Code.
Either way the settings are locked until that's sorted, and the message goes away by itself. If the sign-in check
can't be run, nothing is blocked.
How it connects
Clau-dio reads replies through two hooks in Claude Code's own settings file, ~/.claude/settings.json: a Stop hook
(a reply is finished) and a Notification hook (Claude Code needs your permission). That file is shared with Claude
Code in the terminal and other tools, so the first time Clau-dio finds Claude Code it asks before adding them:
Connect or Not now. Only Clau-dio's own entries are added; everything else in the file is left exactly as it
was, and a copy is kept as settings.json.bak.
Not now works like Clau-dio: Disconnect from Claude Code in the command palette: the choice is remembered (it
won't connect by itself), and Settings shows Reading is turned off with a Connect button.
Clau-dio: Connect to Claude Code does the same.
Only Claude Code in VS Code is read aloud. The hooks are in Claude Code's own settings, so they also run when
you use claude in a terminal or in scripts (claude -p, the Agent SDK), but Clau-dio stays silent for those.
Permission alerts. When Claude Code stops to ask before running something, Clau-dio says so (for example
"Claude needs your permission to use Bash"), so you can step away while it works. Its other notices, such as
"waiting for your input", are not read.
The panel
Click the Clau-dio icon in the left sidebar. The panel has four tabs (Prompts and Clipboard on the left, Shortcuts and Settings on the right):
- Shortcuts: Clau-dio's four keyboard shortcuts and the keys they use now. Change opens VS Code's Keyboard
Shortcuts on that command: double-click it, press the keys you want, then Enter (right-click it there and choose
Reset Keybinding to go back to the default). The tab shows your own shortcuts as soon as they're saved, and
warns (in yellow) when a shortcut's keys are also used by another Clau-dio shortcut or by another command, so one
of them wouldn't work; Clau-dio also says so straight away when you save a clashing shortcut.
- Settings: turn reading on or off, skip code blocks, change speed (1x to 3x) and volume, pick a voice (every voice in the list has a ▶
button that plays a short sample), and set up ElevenLabs.
- Prompts: the reply being read now, with the current word highlighted and a Stop button, and Recent
Prompts/Replies: Claude Code replies that were read aloud, each with your prompt (the prompt you sent that led to it,
found in Claude Code's own conversation record on your computer, without the file and selection details Claude Code
adds) and ▶ (read again), copy and remove buttons. Click a reply or its prompt to show all of both.
The list follows the Claude Code tab you have selected: it shows every prompt in that conversation (the latest 60),
newest first, each with Claude's reply, whether or not it was read aloud, with the conversation's name above the
list. It's read from Claude Code's conversation record, and new prompts and replies appear within a second. A
prompt Claude is still working on shows "No reply yet". If you click into a file while a Claude Code tab is still
showing in another editor group, the list stays on that conversation. With no Claude Code tab showing, the list is
empty. These cards have no remove button and there's no Clear all, since they mirror the conversation itself.
The latest exchange is highlighted (blue left edge). VS Code doesn't let other extensions see clicks inside Claude
Code's chat window, so to find an older prompt here, click Claude Code's Copy icon on that prompt or reply: the
Prompts tab opens with that card highlighted and scrolled into view (copying part of a reply works too). With Add copied text automatically on, the text also goes into the Read text aloud box. Text copied
this way isn't added to the clipboard history, and the highlight returns to the latest exchange with your next prompt.
- Clipboard: text you copy while VS Code is in focus is added here automatically (it isn't read aloud by itself),
ready to listen to with ▶, and is also put in the Read text aloud box, ready to press Speak (not while you're
typing in that box). You can also paste or type any text there and press Speak (or Ctrl+Alt+Enter). Select part of the text first to hear
just that part (the button then says Speak selection). Left out:
copies made in other apps; text that looks like a password, key or token (a long word mixing letters and digits,
KEY=value lines, user:password@host connection strings, private keys, and well-known token formats); and
anything copied while a secrets file such as .env, .pem, .key or secrets.json is the open editor. The
Add copied text automatically switch turns it off. VS Code has no clipboard-change event, so the clipboard
is checked once a second while VS Code is in focus.
Each day starts with an empty clipboard history: at midnight (or the next time VS Code starts) earlier days' texts
move to the Archive. Show archives (next to Clear all) switches the list to the archive, and Show
Recent switches back; the panel remembers which you were looking at. The archive has one folding section per day
(newest first, with the date and how many texts). Archived texts have the same ▶, copy and remove buttons,
Delete removes a whole day, and days older than 7 days are dropped. Clear all clears only today's list.
To hear just part of a card, select that text (in the prompt, the reply or a clipboard item) and press the card's ▶
(it turns blue while text is selected). The panel keeps the last 30 replies and clipboard texts between VS Code sessions. When a new reply starts being read, the
panel switches to Prompts by itself (if the panel is closed, it opens there next time). Voice samples, pasted text
and replays don't switch tabs. Ctrl+Alt+S reads the text you've selected (in the editor, or in the panel), Ctrl+Alt+D stops
reading mid-sentence, and Ctrl+Alt+R reads the latest reply
again.
More natural voices (ElevenLabs)
The ElevenLabs card at the bottom of Settings asks Interested in more natural voices? and links to ElevenLabs
(free and paid plans). Need a key? Api key setup instructions, at the right of the ElevenLabs API key
label, shows step-by-step how to create one and which permissions to give it (Text to Speech: Access, Voices: Write,
User: Read). When you save a key, Clau-dio also checks those permissions (without using any credits) and,
if any are missing, says which ones to change in ElevenLabs; fix them there and press Check again. It checks again
each time VS Code starts. Paste your ElevenLabs API key into the password box and press Save: Clau-dio checks
it with ElevenLabs first, then keeps it in VS Code's secure storage (Windows Credential Manager, macOS Keychain or the
Linux secret service). The key is never written to a settings file, and the panel only ever shows its last four
characters. Once a valid key is saved, the card shows just the key, with Remove to delete it; removing it brings
the invitation back.
With a key saved, the Voice picker lists your ElevenLabs voices (the standard ElevenLabs voices plus any you've
added to your account) under the built-in ones. Each shows its accent, gender and style, a picture when ElevenLabs
provides one (otherwise an illustrated face that matches the voice's gender and age), and a ▶ button to hear ElevenLabs' sample. Search at the top of the list
filters voices.
Your ElevenLabs voices come in two groups: ElevenLabs · My Voices (voices you've cloned, designed or added from
the Voice Library) and ElevenLabs · Default voices (the standard ones every account has). Tick Show only "My
Voices" from ElevenLabs, at the right of the Voice heading (greyed out until a key is saved, as are the Language, Accent, Age, Voice Type and Style filters; Gender works for the built-in voices too), to list only your own
voices; the filters then offer only the languages, accents and styles your voices have, and the Voice Library is
hidden. The panel remembers the tick.
Below your own voices is ElevenLabs' Voice Library: over 10,000 voices shared by the ElevenLabs community.
Trending voices are shown first and more load as you scroll; the search box searches the whole library. Choosing
a library voice adds it to your ElevenLabs account ("My Voices") first, which needs the key's "Voices: write"
permission; library voices don't use up your custom voice slots. Some library voices cost more credits per
character, which the list shows (for example "2× credits"). Library voices need a paid ElevenLabs plan.
A filters card under the Voice heading has labelled dropdowns, each starting at Any, in two rows:
Language, Accent and Gender, then Age, Voice Type and Style. Voice Type picks Trending, Featured, or what the
voice is for (Characters & animation, Narration & story, Conversational, Social media, Advertisement, Entertainment & TV,
Educational). Style stays disabled on Any until a type is chosen, then lists the styles found among that type's voices
(such as Deep or Raspy).
ElevenLabs' licensed Iconic voices (such as Optimus Prime) aren't included: they're licensed per project with the
rights holder's approval and can't be used through the API. They filter your own voices and the whole Voice
Library (ElevenLabs does the filtering, so all 10,000+ voices are covered). Built-in voices follow the Language and
Gender filters, and are hidden while an accent or age filter is on, since they don't have those details.
The panel remembers your filters.
When an ElevenLabs voice is chosen, replies are read by Clau-dio inside VS Code (which holds the key
securely): the reading script hands the reply over, Clau-dio gets the speech from ElevenLabs (model
eleven_flash_v2_5, which is fast and uses half the credits of the larger models), plays it, and highlights every
word exactly. The first sentence or two are fetched on their own, so reading starts after a short wait while the
rest is fetched in the background. If VS Code isn't running, or ElevenLabs can't be used (no internet, credits used
up, key rejected), the built-in voice reads the reply (or the part not yet read) instead and Clau-dio says why.
Audio players used: Windows' own media player (nothing to install), afplay on macOS, and paplay, aplay, mpv
or ffplay on Linux (install one of them).
Usage in the status bar. While an ElevenLabs key is saved, the status bar at the bottom of VS Code shows how much
of your plan's character allowance you've used this period, for example 41% · 12k/30k. Hover over it for the exact
figures, your plan and the reset date; click it to open your ElevenLabs subscription page. It turns yellow at 75% and
red at 90%, and updates a few seconds after each reply read with ElevenLabs (and every 15 minutes). It needs the
key's "User: read" permission; without it, the item shows a warning explaining that.
Now reading
While a reply is being read, the panel shows it with the current word highlighted. On Windows the speech
engine reports each word, so the highlight is exact; on macOS and Linux it follows the reading speed,
so it may drift slightly on long replies.
Speech used on each system
| System |
Speech |
Needs |
| Windows |
Windows built-in voices (PowerShell) |
nothing |
| macOS |
say (JavaScript for Automation) |
nothing |
| Linux |
espeak-ng, espeak or spd-say (Python) |
Python 3 and one of those speech engines |
Speech always runs in the background, so Claude Code is never held up while a reply is read.
If the hook fires twice for the same reply, it is only read once.
Before reading, each reply is tidied for listening: code blocks become "Code omitted." (unless Skip code blocks when speaking
is off), links are read by their text and web addresses as "link", file paths as just the file name
(src/media/panel.html is read as "panel.html"), tables as lists, and each list item and heading as its own
sentence.
Commands and shortcuts
On a Mac, Ctrl+Alt+Enter is Cmd+Option+Enter. Change any of the shortcuts on the panel's Shortcuts tab.
| Command (Ctrl+Shift+P) |
Shortcut |
What it does |
| Clau-dio: Read Selected Text |
Ctrl+Alt+S |
Reads the selected text (nothing selected: no sound) |
| Clau-dio: Stop Speaking |
Ctrl+Alt+D |
Stops the reply being read |
| Clau-dio: Turn Reading On/Off |
|
Mutes or unmutes reading |
| Clau-dio: Read Last Reply Again |
Ctrl+Alt+R |
Reads the latest reply again |
| (Clipboard tab, in the Read text aloud box) |
Ctrl+Alt+Enter |
Speaks the box, or just the highlighted part |
| Clau-dio: Test Voice |
|
Reads a short sample in your chosen voice |
| Clau-dio: Disconnect from Claude Code |
|
Removes its hooks from Claude Code's settings |
| Clau-dio: Connect to Claude Code |
|
Adds the hooks back |
Privacy and your data
- Stays on your computer: your settings, the reply list, clipboard history and archive. Your ElevenLabs API key
is kept in VS Code's secure storage and never written to a file.
- Read locally: Claude Code's conversation records in
~/.claude (to show your prompts), and the clipboard,
only while VS Code is in focus and Add copied text automatically is on. Text that looks like a secret is never
kept, and the clipboard archive keeps 7 days.
- Changed outside VS Code: only Clau-dio's own two hooks in
~/.claude/settings.json, and only after you choose
Connect.
- Sent to ElevenLabs, only if you use an ElevenLabs voice or key: the text being read aloud (to turn it into
speech), and requests for your voice list and usage. Nothing is sent anywhere when you use the built-in voices.
- No tracking: Clau-dio has no analytics or telemetry.
- Affiliate link: the Try ElevenLabs button uses an ElevenLabs affiliate link. Signing up through it may earn
the developer a commission, at no extra cost to you.
Uninstalling
Uninstall Clau-dio from VS Code's Extensions view. Everything it kept is deleted: the ElevenLabs API key,
the reply list, clipboard history and archive, the voice-picture cache and its other switches (all in VS Code's own
storage, which VS Code itself keeps after an uninstall), plus its reading scripts, voice settings and temporary audio
in ~/.claude, and its hooks in Claude Code's settings (everything else there is left as it was).
It's caught two ways: while VS Code is open (within a few seconds, or as the extension is shut down), and by VS
Code's own uninstall step after a restart (which leaves a small claudio-uninstalled marker in ~/.claude). If
anything was missed, the next install wipes it before it starts and removes the marker. Disabling, updating or simply
reinstalling the extension keeps everything. The settings.json.bak copy of your Claude Code settings (made before
the hooks were added) is kept.
Feedback and licence
Report problems or suggest ideas at
github.com/BeastFromPretoriaEast/Clau-dio-issues.
Clau-dio is free to install and use, but it isn't open source: copying, changing or republishing it isn't allowed
without permission. See the licence for the details.