Skip to content
| Marketplace
Sign in
Visual Studio Code>AI>Audio for GitHub CopilotNew to Visual Studio Code? Get it now.
Audio for GitHub Copilot

Audio for GitHub Copilot

Speaking Promptly

| (0) | Free
Hear GitHub Copilot's chat replies read aloud as they arrive, with word-by-word highlighting, in your computer's voices or natural ElevenLabs voices.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Audio for GitHub Copilot

Hear GitHub Copilot's replies instead of reading them. Every reply Copilot writes in VS Code's chat is read aloud as soon as it's finished, with each word highlighted as it's spoken, so you can look away from the screen while Copilot works.

  • Automatic: one click to connect to GitHub Copilot, 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".
  • Prompts tab: every prompt and reply in your latest Copilot chat, 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.
The Prompts tab reading a GitHub Copilot reply aloud, with the word being spoken highlighted and earlier prompts and replies formatted as in the chat

Works on Windows, macOS and Linux. Requires the GitHub Copilot Chat extension, signed in to any Copilot plan (Copilot Free included), and a recent VS Code with agent hooks (on by default).

Unofficial: Audio for GitHub Copilot is an independent extension for GitHub Copilot. It isn't made by, affiliated with or endorsed by GitHub or Microsoft. GitHub and GitHub Copilot are trademarks of GitHub, Inc.; ElevenLabs is a trademark of ElevenLabs.

Getting started

  1. Install Audio for GitHub Copilot. VS Code installs the GitHub Copilot Chat extension along with it if you don't have it yet; sign in to Copilot if you haven't already.
  2. Audio for GitHub Copilot asks once whether it may connect to GitHub Copilot: choose Connect.
  3. Ask Copilot something in the Chat view. The reply is read aloud as soon as it's finished, and the Audio for GitHub Copilot panel (its icon is in the left sidebar) shows each word as it's spoken.
  4. 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 (see Setting up an ElevenLabs API key).

What it needs

Audio for GitHub Copilot needs the GitHub Copilot Chat extension installed in VS Code and signed in with a GitHub account (github.com or GitHub Enterprise). It checks VS Code's own list of signed-in accounts, again whenever that changes. If Copilot isn't installed, Settings shows GitHub Copilot is required with an Install GitHub Copilot button; if no GitHub account is signed in, Settings shows Sign in to GitHub Copilot. Either way the settings are locked until that's sorted, and the message goes away by itself. If the sign-in can't be checked, nothing is blocked.

How it connects

Audio for GitHub Copilot reads replies through VS Code's agent hooks, which Copilot's chat runs at set moments. VS Code loads your personal hooks from every .json file in ~/.copilot/hooks, and Audio for GitHub Copilot adds one file of its own there, copilot-audio.json, with a Stop hook (Copilot has finished a reply). No other file is touched. The first time Audio for GitHub Copilot finds Copilot it asks before adding it: Connect or Not now.

Not now works like Audio for GitHub Copilot: Disconnect from GitHub Copilot in the command palette (it deletes copilot-audio.json): the choice is remembered (it won't connect by itself), and Settings shows Reading is turned off with a Connect button. Audio for GitHub Copilot: Connect to GitHub Copilot does the same.

Hooks need VS Code's Chat › Use Hooks setting (chat.useHooks), which is on by default. If it's off, or the ~/.copilot/hooks folder is switched off in Chat › Hook Files Locations, Audio for GitHub Copilot says so and offers to turn it back on.

When Copilot finishes, the hook gives Audio for GitHub Copilot the path to Copilot's record of the chat (a transcript file), and Audio for GitHub Copilot reads the last reply in it. Steps where Copilot only ran tools are skipped, as is Copilot's reasoning. Microsoft notes that the transcript format may change between VS Code releases; if it does, Audio for GitHub Copilot falls back to finding the last reply in whatever shape the file has.

No permission alerts. Copilot's hooks have no "waiting for your approval" event, so unlike Audio for Claude Code, this extension can't tell you when Copilot stops to ask before running something.

Using Audio for Claude Code as well? The two can be installed side by side: Audio for GitHub Copilot keeps its files in ~/.copilot-audio, Audio for Claude Code in ~/.claude, and their commands are listed separately as Audio for GitHub Copilot and Audio for Claude Code. Leave VS Code's Chat › Use Claude Hooks setting (chat.useClaudeHooks) off (the default); otherwise Copilot would also run Audio for Claude Code's hooks and replies could be read twice.

The panel

Click the Audio for GitHub Copilot icon in the left sidebar. The panel has four tabs (Prompts and Clipboard on the left, Shortcuts and Settings on the right):

  • Shortcuts: Audio for GitHub Copilot's three 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 Audio for GitHub Copilot shortcut or by another command, so one of them wouldn't work; Audio for GitHub Copilot also says so straight away when you save a clashing shortcut. (Audio for Claude Code uses the same keys, so if both are installed, give one of them different keys here.)
  • 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: every prompt in your latest Copilot chat in this VS Code window (the latest 60), newest first, each with Copilot's reply, whether or not it was read aloud, with the chat's first prompt as its name above the list. It's read from Copilot's own record of the chat on your computer (without the file and selection details Copilot adds), and new prompts and replies appear within a second. A prompt Copilot is still working on shows "No reply yet". Each card has ▶ (read again) and copy buttons, and shows the prompt and reply formatted the way the chat shows them (headings, bold, lists, tables, quotes and code blocks); click a reply or its prompt to show all of both. VS Code doesn't tell other extensions which chat is open in Copilot's Chat view, so the list shows the chat used most recently in this window; start or continue a chat and the list follows it. With no folder open, or before your first prompt, the list is empty. These cards have no remove button and there's no Clear all, since they mirror the chat itself. The latest exchange is highlighted (blue left edge). To find an older prompt here, click Copilot's Copy button 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 while typing in it). 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.
The Clipboard tab: the Read text aloud box and the clipboard history

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 clipboard history is kept 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, Audio for GitHub Copilot 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: Audio for GitHub Copilot 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 and an ElevenLabs button that opens your ElevenLabs dashboard; removing it brings the invitation back. Once the key has every permission Audio for GitHub Copilot needs, Api key setup instructions is hidden too (it comes back if a permission goes missing).

The voice picker, with built-in voices and ElevenLabs voices, filters and samples

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 Audio for GitHub Copilot inside VS Code (which holds the key securely): the reading script hands the reply over, Audio for GitHub Copilot 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 Audio for GitHub Copilot 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.

Setting up an ElevenLabs API key

You only need this for ElevenLabs voices; the built-in voices work without it. ElevenLabs has a free plan.

  1. Sign in at elevenlabs.io/app/developers/api-keys (or choose Developers near the bottom of the left-hand menu, then API Keys).

  2. Click Create Key (or + Create API Key).

  3. Give it a name you'll recognise, such as Audio for GitHub Copilot.

  4. Leave Restrict Key switched on, then set these permissions. Anything not listed can stay on No Access:

    Permission Set to What Audio for GitHub Copilot uses it for
    Text to Speech Access Reading replies aloud
    Voices Write Listing your voices and adding Voice Library voices (Write includes Read)
    User Read Showing your usage in the status bar (shown as Access on some accounts)
  5. Optional: set a Credit limit if you want to cap how much this key can use.

  6. Click Create Key, then copy the key straight away (it starts with sk_). ElevenLabs shows it only once.

  7. In VS Code, open the Audio for GitHub Copilot panel's Settings tab, paste the key into the ElevenLabs API key box at the bottom and press Save.

Audio for GitHub Copilot checks the key with ElevenLabs before saving it (without using any credits). If a permission is missing, it says which one; fix it in ElevenLabs and press Check again. Once everything is set, the setup instructions are hidden from the panel.

Already have a key without these permissions? On the API Keys page, open the ⋯ menu beside it, choose Edit, change the permissions and click Save Changes. You don't need to paste it into Audio for GitHub Copilot again; just press Check again.

Keeping your key safe: Audio for GitHub Copilot stores it in VS Code's secure storage (Windows Credential Manager, macOS Keychain or the Linux secret service), never in a file, and only ever shows its last four characters. Remove it at any time with Remove; you can also delete or disable the key on the ElevenLabs API Keys page.

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 Copilot 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. With Skip code blocks when speaking on (the default), code is simply left out: code blocks (including ~~~ blocks, blocks inside list items, a block showing Markdown with its own code inside, and a block that's never closed) and bits of code full of symbols in a sentence aren't read at all, while short ones such as npm test or init() are. With it off, the code is read out too. HTML tags are read by their name (<p> is read as "p", </p> as "closing p"), and no angle brackets or other code symbols are ever sent to the voice, so it can't trip over them. 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 the keys for Read Selected Text, Stop Speaking and Read Last Reply Again on the panel's Shortcuts tab.

Command (Ctrl+Shift+P) Shortcut What it does
Audio for GitHub Copilot: Read Selected Text Ctrl+Alt+S Reads the selected text (nothing selected: no sound)
Audio for GitHub Copilot: Stop Speaking Ctrl+Alt+D Stops the reply being read
Audio for GitHub Copilot: Turn Reading On/Off Mutes or unmutes reading
Audio for GitHub Copilot: Read Last Reply Again Ctrl+Alt+R Reads the latest reply again
(Clipboard tab, while typing in the Read text aloud box) Ctrl+Alt+Enter Speaks the box, or just the highlighted part
Audio for GitHub Copilot: Test Voice Reads a short sample in your chosen voice
Audio for GitHub Copilot: Disconnect from GitHub Copilot Deletes its hook file (~/.copilot/hooks/copilot-audio.json)
Audio for GitHub Copilot: Connect to GitHub Copilot Adds the hook file 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: Copilot's chat transcripts in VS Code's own storage folder (to read replies and 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 Audio for GitHub Copilot's own hook file, ~/.copilot/hooks/copilot-audio.json, and only after you choose Connect; plus its own folder, ~/.copilot-audio.
  • 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: Audio for GitHub Copilot 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 Audio for GitHub Copilot 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), its reading scripts, voice settings and temporary audio in ~/.copilot-audio, and its hook file in ~/.copilot/hooks (other hook files are left as they were).

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 copilot-audio-uninstalled marker in ~/.copilot-audio). 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.

Feedback and licence

Report problems or suggest ideas at github.com/BeastFromPretoriaEast/Audio-for-GitHub-Copilot-issues.

Audio for GitHub Copilot 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.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft