Free · No API keys · Local · Open source

Hear a short line when your agent finishes

Aftertone plays a brief spoken summary after each reply — local Supertonic ONNX, no cloud TTS API, no subscription.

Short response — quick dev question · Long task — clone a repo, skim the README, hear the summary — you do not have to read everything. Claude Code with /aftertone_on.

Linux / macOS
curl -fsSL https://raw.githubusercontent.com/omarelkhal/aftertone/main/scripts/install.sh | bash -s -- --install-uv --start-daemon
Windows (PowerShell)
irm https://raw.githubusercontent.com/omarelkhal/aftertone/main/scripts/install.ps1 | iex

Free install — no API keys, no Aftertone subscription, no cloud TTS account. One command installs uv, models, hooks, and the daemon to ~/aftertone or %USERPROFILE%\aftertone. In Cursor: enable Hooks and trust your workspace — spoken TTS is already on in config.

1

Agent replies

Cursor runs your coding agent; the reply lands in the hook payload.

2

Hook prepares text

Speaks the <spoken_summary> tag (repo default). Set summary_mode = "auto" for heuristic fallback when the tag is missing.

3

Daemon synthesizes

Models stay loaded; POST /say stays fast.

4

You hear it

One concise line — glance at the screen less often.

$0 forever for speech

Install once. Nothing to pay for TTS.

Aftertone is the local spoken layer after your agent replies — not another SaaS bill.

Cost $0 — open source (MIT). Optional donations only; no paid tier for speech.
API keys None — synthesis runs on localhost only. No cloud TTS signup.
Subscription None for Aftertone — install once, use in every project.
Setup One command — downloads free ONNX weights from Hugging Face (public models; no token required by default).
Languages Many locales via Supertonic — /aftertone-lang in Cursor; write <spoken_summary> in that language.

Your coding agent (Cursor, Claude, etc.) may have its own plan or API keys — that is separate from Aftertone, which only adds local voice after each reply.

Why Aftertone

Built for long agent sessions

Stay in flow when the model writes a wall of text. Listen for the gist while you read the details.

Free — no API keys

No paid tier, no cloud TTS account, no API keys for Aftertone. Install once; speech stays on your machine with ONNX.

Private by default

Audio is synthesized locally. Your reply text is not sent to a hosted text-to-speech service.

Fast hooks (once Cursor runs them)

The heavy work lives in tts_daemon.py. Each hook only prepares text and posts JSON. On Windows, Cursor may delay calling hooks longer than on Linux or macOS — see docs.

Cursor, Claude Code & Codex

Cursor afterAgentResponse, Claude Code Stop, and Codex Stop hooks — same daemon. OpenCode comes next.

Slash commands

Cursor (/aftertone-lang, …), Claude Code (/aftertone_lang, …), and Codex skills ($aftertone-on, …) — each runs one python -m aftertone call. Codex setup · Full list

For agents

Better summaries with <spoken_summary>

End substantive replies with one short flow briefing — state, significance, optional next move — written for listening, not the screen.

Example (last lines of the agent message)
<spoken_summary>
The hook fix is on main!! Send another reply with only one tag at the end??
</spoken_summary>

Repo default summary_mode = "tag_only" — agents should end substantive replies with the tag. Set language with /aftertone-lang; write the tag in that language (no auto-translation). The hook reads the last tag pair only. Use !! / ?? per sentence for livelier TTS. Spoken summary rules · Slash commands.