diff --git a/README.md b/README.md index 95612fe..eb4276e 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,9 @@ reply, or a permission prompt — `hey` plays a short sound, **but only if you'v idle longer than a threshold**. A fast back-and-forth stays silent; you're summoned only when you've likely stepped away. -Sound only — no speech, no listening. Built for [Claude Code](https://claude.com/claude-code) +No listening, ever. Most of the alerts are plain sounds; one (`yourturn`) is a +short pre-rendered clip of a voice, because a spoken word cuts through ambient +audio better than a blip. Built for [Claude Code](https://claude.com/claude-code) hooks, but the CLI works anywhere. ## Install @@ -21,7 +23,7 @@ ln -sf ~/hey/hey ~/.local/bin/hey # put `hey` on PATH ## Use ```sh -hey # list the sounds: ping, chirp, knock, coin, chime +hey # list the sounds: ping, chirp, knock, coin, chime, yourturn hey knock 2 45 # [times] [idle-threshold-s]; previews once, then active hey off # stop ``` @@ -61,10 +63,13 @@ gitignored `.env`). ## Sounds -Five bundled sounds live in `assets/`. The four synthesized ones (`ping`, `chirp`, +Six bundled sounds live in `assets/`. The four synthesized ones (`ping`, `chirp`, `knock`, `coin`) are generated by `assets/generate.py` — pure stdlib, no deps; -regenerate or tweak the palette and commit the results. Point `HEY_DIR` elsewhere -to use your own. +regenerate or tweak the palette and commit the results. `yourturn.wav` is speech, +rendered once offline with [johnny](https://github.com/4242labs/johnny) (Kokoro, +voice `af_sarah`), then trimmed and normalised — a committed file like any other, +so nothing synthesises at alert time and no text ever leaves the machine. Point +`HEY_DIR` elsewhere to use your own. ## Config diff --git a/assets/yourturn.wav b/assets/yourturn.wav new file mode 100644 index 0000000..0c62783 Binary files /dev/null and b/assets/yourturn.wav differ diff --git a/config.sh b/config.sh index 9641d55..db877e5 100644 --- a/config.sh +++ b/config.sh @@ -17,6 +17,8 @@ HEY_THRESHOLD="${HEY_THRESHOLD:-45}" # default idle seconds before a beep fi HEY_TIMES="${HEY_TIMES:-1}" # default number of plays per alert HEY_GAP="${HEY_GAP:-0.25}" # seconds between repeated plays # One row per sound: "name|file". Names match case-insensitively. +# A spoken alert is just another row — the player does not care whether the +# file is a synthesized blip or a voice saying two words. hey_registry() { cat <