Skip to main content

Agent Voice logo
Agent Voice launch video


Agent Voice gives AI agents the ability to create local speech recordings.

AI agents produce useful work, but they still communicate mostly through text. Every response competes for a developer's visual attention, so valuable work is often skimmed or missed.

My initial use case was listening alongside the text: text-to-speech for coding agents such as Codex and Claude Code.

The larger idea is simple: audio should be a first-class medium for agents.

Agent Voice runs locally, uses Kokoro-82M, and requires no API key. English is the best-supported language. The bundled 54-voice catalog also covers Japanese, Mandarin Chinese, Spanish, French, Hindi, Italian, and Brazilian Portuguese, though quality varies.

Check them out here.

Install and setup

Install the CLI with uv:

uv tool install agent-voice

Or with pipx:

pipx install agent-voice

Then download the speech model:

agent-voice setup

For setup with experimental playback controls, see Experimental desktop playback controls.

Test the CLI directly:

agent-voice speak "Hello from Agent Voice." -p

Choose a skill

[!Note] The skills are starting points. Copy them to customize delivery wording, recording defaults, playback behavior, or when an agent should offer audio to your liking!

Agent Voice provides two kinds of skill:

  • create-speech-recording turns supplied text into audio. Use it to create a recording or read something aloud.
  • spoken-response creates the spoken semantic twin of an assistant response. It can speak the current response, the previous response, or later responses in the thread.

Choose how the recording should appear in your agent:

Variant Delivery format Supported surfaces
Normal Portable Markdown links to the web player, media app, and web audio Anywhere basic links can be clicked
-desktop Embedded native or HTML audio player Codex Desktop, Antigravity, and OpenCode Desktop
⚠️ -controls ⚠️ Clickable agent-voice:// playback links with a web-player fallback Compatible desktop renderers on macOS, Linux, and Windows

For portable delivery, install the normal skills:

npx skills add yoav0gal/agent-voice -g --skill create-speech-recording
npx skills add yoav0gal/agent-voice -g --skill spoken-response

Portable Agent Voice delivery with listening links and a terminal playback command

For an embedded player in a supported desktop app, install the desktop skills:

npx skills add yoav0gal/agent-voice -g --skill create-speech-recording-desktop
npx skills add yoav0gal/agent-voice -g --skill spoken-response-desktop

Agent Voice audio embedded natively inside a desktop conversation

Experimental desktop playback controls

[!WARNING] Experimental feature.

agent-voice controls install
npx skills add yoav0gal/agent-voice -g --skill create-speech-recording-controls
npx skills add yoav0gal/agent-voice -g --skill spoken-response-controls

Experimental Agent Voice playback controls with a web-player fallback

Remove the handler with agent-voice controls uninstall.

CLI

The CLI provides small primitives that agents can combine. Run agent-voice COMMAND --help for the full options of any command.

Command What it does
setup Download and verify speech model assets.
update Upgrade Agent Voice through its uv or pipx installer.
speak Turn text or stdin into a recording.
play Play an existing local recording.
voices List supported language tags and voices.
models List speech models and variants.
config View or change persistent defaults.
doctor Check that Agent Voice is ready.
service start|stop Manage the background speech service.
viewer start|stop Manage the local recording viewer.
controls install|uninstall Install or remove the experimental desktop protocol handler.
serve Start the localhost speech API.

Speak

# Positional text
agent-voice speak "The build is finished."

# Agent output through stdin
printf '%s' "$TEXT" | agent-voice speak --label build-summary

# Spoken response text and written response Markdown in one command
agent-voice speak "$RESPONSE_AS_TEXT" \
  --markdown "$RESPONSE_AS_MARKDOWN" --label response

# Use separate files for a long spoken response and its written Markdown
agent-voice speak --response-file "$RESPONSE_AS_MARKDOWN_FILE" \
  < "$RESPONSE_AS_TEXT_FILE"

# Choose the output and delivery
agent-voice speak "Here is your summary." \
  --voice bf_emma --speed 1.2 --format mp3 -p
Option Purpose
-o, --output PATH Write to an exact path.
--label TEXT Set the managed filename prefix.
--markdown TEXT Show an inline Markdown response in the viewer.
--response-file PATH Show a Markdown response in the browser viewer.
--output-dir DIR Choose the managed output directory.
-f, --format FORMAT Use wav, mp3, opus, or m4a.
-v, --voice NAME Select a voice.
--lang TAG Set the language tag (default: en-us).
--speed NUMBER Set pitch-preserving playback speed.
-p, --play Start local playback after creation, without waiting for it to finish.
--play-after SECONDS Schedule local playback after creation, without waiting.
--controls Include experimental desktop playback control links.
--no-service Run the same Agent Voice model inside this command, then unload it.
--model-id ID, --variant NAME Select a model and build.

speak prints one JSON receipt with the absolute recording path, file URI, audio metadata, playback state (started or scheduled), and available viewer links. This makes the command reliable for both people and agents.

Configure defaults

# Show current defaults
agent-voice config

# Set your preferred voice, speed, format, service timeout, and output directory
agent-voice config --voice bf_emma --speed 1.15 --format mp3 \
  --service-timeout 10 --output-dir ./recordings

# Restore built-in defaults
agent-voice config --reset

Voice, speed, format, and output directory can be overridden per recording with speak.

Manage the Agent Voice service

By default, speak starts the Agent Voice background service when needed. Once the model weights are loaded, the service keeps them warm between requests to avoid another cold startup. It stops after 10 idle minutes by default, and each completed speech request restarts that timer. Automatic startup reuses a running service without changing its timeout; service start uses the saved timeout or an explicit --idle-timeout value.

agent-voice service start                    # stops after 10 idle minutes
agent-voice service start --idle-timeout 30  # set this process to 30 minutes
agent-voice service stop

Use agent-voice serve for a foreground service while debugging.

Discover and diagnose

agent-voice voices
agent-voice models
agent-voice doctor
agent-voice doctor --json

voices groups each installed voice under its supported --lang tag. Select a pair with agent-voice speak --lang TAG --voice VOICE "Text".

Use --json with voices, models, config, or doctor when another tool or agent will consume the result.

Play and view recordings

agent-voice play "/absolute/path/recording.mp3"
agent-voice play "/absolute/path/recording.mp3" --after 10
agent-voice viewer start
agent-voice viewer stop

The lightweight viewer starts automatically when needed and serves only local recordings. It prefers http://127.0.0.1:8779 and selects a free port if that port is unavailable. Each managed recording keeps an editable .txt source beside it. At startup and every six hours, the viewer removes owned audio older than four days and 18 hours; files without Agent Voice source, transcript, and language metadata are left alone. Opening a player or audio URL regenerates missing audio from its source with the original language and current voice and speed.

Playback commands return as soon as local playback starts, or immediately with scheduled when a delay is requested; they never wait for the recording to end.

[!Note] 🗒️ The viewer is a workaround for agent surfaces that do not support embedded audio. I expect native text-to-speech to become common across these platforms, which would be a better solution. For now, the viewer keeps playback and the written response together in a local page. 🗒️

Local speech API

agent-voice serve

curl http://127.0.0.1:8765/v1/audio/speech \
  -H 'Content-Type: application/json' \
  -d '{"input":"The task is complete.","voice":"af_heart","response_format":"mp3"}' \
  --output speech.mp3

The API binds to localhost. speak uses it when available and falls back to embedded inference.

Platform limitations

Prebuilt dependencies support macOS arm64/x64, Linux x64, and Windows x64. Linux arm64 requires a C build toolchain for miniaudio. On Windows arm64, use x64 Python under emulation.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

agent_voice-0.8.0.tar.gz (6.9 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agent_voice-0.8.0-py3-none-any.whl (61.3 kB view details)

Uploaded Python 3

File details

Details for the file agent_voice-0.8.0.tar.gz.

File metadata

  • Download URL: agent_voice-0.8.0.tar.gz
  • Upload date:
  • Size: 6.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for agent_voice-0.8.0.tar.gz
Algorithm Hash digest
SHA256 bdb0b3b020d7f4c55d88687f2d5852e3438e04f81be52a9804070d92a97a0b53
MD5 fd617bbd447e84a9e5c8613097a6d6ed
BLAKE2b-256 1753537e6ad78bb04fbc2b10bb5f353a7fe33faa74060c432ffd5c54dc192466

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_voice-0.8.0.tar.gz:

Publisher: publish.yml on yoav0gal/agent-voice

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file agent_voice-0.8.0-py3-none-any.whl.

File metadata

  • Download URL: agent_voice-0.8.0-py3-none-any.whl
  • Upload date:
  • Size: 61.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for agent_voice-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bad5bd81ef75098c6c1773fc0edc4eddf1893e13ef005223a3b1366ac8c3567d
MD5 d20596022d1050a09d6b5797da2408ad
BLAKE2b-256 3083a8eac6f6f116cbed3f52afd2ad0807b4c58a58cc3f4194a43328507d4513

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_voice-0.8.0-py3-none-any.whl:

Publisher: publish.yml on yoav0gal/agent-voice

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page