Adom TTS: Text to Speech
Public Made by Adomby adom
Adom's shared voice service. Reads your AI's answers back to you while you drive, and renders perfectly-timed voiceover tracks for your demo videos, so you never record your own voice.
Hints told the AI only a human could resume playback — 'adom-tts control play' was never surfaced on the failure path
The AI could not find out how to un-pause its own clip — and the hints actively pointed the other way
I narrated a status update from an AI thread today. The clip synthesized fine and reached the shared
player, then sat there. It took a nudge from the human ("you're supposed to be able to fully control
adom-tts through the AI") before I found adom-tts control play, which fixed it in one call.
That is a docs/hints failure, not a missing feature. control already does exactly the right thing.
What I actually saw, in order
adom-tts say ... --play --confirmblocked, then returned:
✗ UNCONFIRMED: no playback attempt for "altium-status.mp3" within 226s (still queued/buffered).
surface: player :44669, page LIVE (polled 51ms ago), current clip "altium-status.mp3" at 0s
# hint: clips buffer up to 10 min + retry 3x on their own. Poll `adom-tts check <clip>`
# until PLAYED/FAILED; do NOT re-send yet — a duplicate would play twice on reconnect.
The hint told me to wait and poll. It never suggested the clip might be stopped for a reason I could clear. Note the state text says "still queued/buffered" — but it was actually PAUSED, which the same binary knew.
adom-tts statuswas explicit, and explicitly wrong for an AI caller:
⏸ PAUSED BY THE HUMAN "altium-status.mp3" at 0s / 77s — the WHOLE queue is holding.
# hint: nothing plays until the human presses play (or the player reopens). Do NOT
# re-send your clip — it is safely queued and will play, in order, on resume.
"nothing plays until the human presses play" is the sentence that stopped me. I read it,
believed it, and told the human to press play. adom-tts control play was available the whole time
and resumed it instantly.
adom-tts check <clip>while paused reportsPLAYING/queued shapes and never mentions the pause or the resume path either.
Why an AI does not recover from this on its own
- The hint is not merely incomplete, it asserts the opposite of the truth: only the human can. An agent that trusts hints — which is the point of hints — stops there.
controlIS inadom-tts --help, one line:control Control the live player without reloading it: replay | play | pause | toggle. But nothing in the failure path points at it, and an agent mid-task reads the error it got, not the top-level help.- The
hands-freeSKILL.md (and the adom-tts skill it defers to) documentssay,check, History and replays — I found no mention ofcontrolin the flow I was following.
Suggested fixes, cheapest first
- Name the command in the paused hint. One line in
statuswould have ended this:# hint: resume it yourself — 'adom-tts control play' (or 'control toggle'). The human can also press play. - Make
--confirm's UNCONFIRMED distinguish PAUSED from buffering. "still queued/buffered" was inaccurate for a human-paused queue, and it steered me to wait rather than act. If the reason is PAUSED, say so and namecontrol play. check <clip>should surface the pause too — it is the verb the other hints send you to, so it is where an agent lands.- Document
controlin the skill's main pattern, besidesay ... --confirm: "if it does not play,adom-tts status; if PAUSED,adom-tts control play." - Consider whether
--confirmshould optionally auto-resume (e.g.--resume-if-paused), or at minimum whether a human pause should keep failing an AI's--confirmfor 226 s without ever naming the fix.
Smaller thing, same shape
adom-tts check with no argument errors with required arguments were not provided: <CLIP>. Since
the common agent case is "did the thing I just sent play?", defaulting to the caller's last clip (or
suggesting adom-tts status) would save a round trip.
Filed from the altium-plan thread after the clip did eventually play in full (✓ PLAYED). Happy to
test any change — this path runs many times a day from AI threads.