Goal
Help verify the spoken TTS pipeline on a fresh install (Linux / macOS / Windows). Good for first-time contributors reporting OS-specific friction.
Recommended path (2026 — global install)
One-liner (registers Cursor + Claude hooks, downloads models, starts daemon):
curl -fsSL https://raw.githubusercontent.com/omarelkhal/aftertone/main/scripts/install.sh | bash -s -- --install-uv --start-daemon
Default install root: ~/aftertone (marker: ~/.cursor/hooks/aftertone-install-dir).
Then:
- Cursor: Settings → Hooks enabled · trust your workspace ·
/aftertone-on in the chat you are testing · agent reply with <spoken_summary>…</spoken_summary> (repo default: tag only — no tag = silence).
- Claude Code (optional):
claude → /aftertone_on in that chat — see docs/adapters/claude.md.
- Pipeline smoke (no Cursor needed):
INSTALL="$(cat ~/.cursor/hooks/aftertone-install-dir)"
cd "$INSTALL/py" && uv run python tts_daemon_ctl.py status --repo-root ..
SPEAK_SUMMARY_IGNORE_QUIET=1 bash "$INSTALL/py/test_speak_summary_pipeline.sh"
- Doctor:
uv run --directory "$INSTALL/py" python -m aftertone doctor
Legacy path (clone + bootstrap only)
Still valid for hacking on the repo itself:
git clone https://github.com/omarelkhal/aftertone.git && cd aftertone
bash scripts/bootstrap.sh
cd py && uv run python tts_daemon_ctl.py start --repo-root ..
For hooks in this clone only, use install.sh --no-global --into . or open the repo root in Cursor with project hooks.
PR welcome
- Clearer errors or docs for your OS (especially Windows / WSL audio)
- Small fixes to
py/test_speak_summary_pipeline.sh or install scripts
- Note: 45+ pytest tests already cover
speak_summary_prepare.py — this issue is end-to-end audio + hooks, not unit tests
When reporting, include: OS, Python/uv version, Cursor vs Claude, and whether you used global install or clone-only.
Goal
Help verify the spoken TTS pipeline on a fresh install (Linux / macOS / Windows). Good for first-time contributors reporting OS-specific friction.
Recommended path (2026 — global install)
One-liner (registers Cursor + Claude hooks, downloads models, starts daemon):
curl -fsSL https://raw.githubusercontent.com/omarelkhal/aftertone/main/scripts/install.sh | bash -s -- --install-uv --start-daemonDefault install root:
~/aftertone(marker:~/.cursor/hooks/aftertone-install-dir).Then:
/aftertone-onin the chat you are testing · agent reply with<spoken_summary>…</spoken_summary>(repo default: tag only — no tag = silence).claude→/aftertone_onin that chat — see docs/adapters/claude.md.uv run --directory "$INSTALL/py" python -m aftertone doctorLegacy path (clone + bootstrap only)
Still valid for hacking on the repo itself:
For hooks in this clone only, use
install.sh --no-global --into .or open the repo root in Cursor with project hooks.PR welcome
py/test_speak_summary_pipeline.shor install scriptsspeak_summary_prepare.py— this issue is end-to-end audio + hooks, not unit testsWhen reporting, include: OS, Python/uv version, Cursor vs Claude, and whether you used global install or clone-only.