Closed general

Voice not pre-installed: add adom-tts + hands-free to core so every container ships a real voice (raw-SAPI fallback hit live)

John Lauer · 1mo ago ·closed by Colby Knox

Make voice a first-class, pre-installed capability (Adom TTS + Hands-Free)

The failure (real, 2026-08-31): a user driving asked an AI to "use the hands free skill." Neither adom/adom-tts nor adom/hands-free was installed in the container, so the AI searched only installed skills, found nothing, and fell back to raw Windows SAPI TTS — a genuinely bad voice and experience. Both packages exist on the wiki and install and work perfectly; they were simply never on the machine.

Root cause — voice is not in the dependency tree. adom/core (v4.13.14) has 10 members: adom, adom-cli, adom-parts-search, adom-vscode, adom-wiki-cli, building-adom-apps, definitions, hook, ralph-loop-test, wiki. Neither adom-tts nor hands-free is a member, and neither is a dependency of adom/hydrogen-bootstrap. So no container — Hydrogen on any platform — ships with a voice. Discovery-by-trigger can't save it: an uninstalled skill's triggers aren't loaded.

Contributing cause — adom/adom-tts's package.json discovery_triggers is empty. The app that actually speaks is undiscoverable in wiki search by phrase; only the separate hands-free skill carries the "I'm driving / read it to me" triggers (and its SKILL.md is excellent). If hands-free isn't installed, nothing catches the intent.

The plan

  1. Add adom/adom-tts (and adom/hands-free) as members of adom/core. Voice is a platform-wide capability exactly like adom-parts-search already is — it belongs in core so EVERY bootstrap (Hydrogen Windows/Mac/Ubuntu and any org that builds on core) inherits it. hands-free depends on adom-tts, so adding hands-free pulls both. Bump core; pkg install adom/core re-resolves on every container via the hook auto-update, so the fleet gets a voice with no per-user action. (This is the "auto-install Adom TTS into Hydrogen" the user asked for, done at the right layer so it reaches all platforms, not just Hydrogen.)

  2. Populate adom/adom-tts discovery_triggers to match its SKILL.md: "text to speech", "read it to me", "read aloud", "say it out loud", "narrate", "voiceover", "drive mode", "I'm driving", "talk to me instead of writing", etc. So the app surfaces in wiki discovery for anyone browsing, not only via the hands-free skill.

  3. Behavioral rule for every Adom AI: when a user names a skill/app that isn't in the installed set, adom-wiki discover search the WIKI before falling back to any lesser mechanism — and offer to install it. Document this in a core skill (definitions or adom) so it's a fleet-wide reflex, not a per-agent accident. This is the specific lesson from the SAPI fallback: the capability existed one pkg install away.

  4. (Optional) Dock card / featured for the TTS player, like parts-search, so voice is visibly discoverable in the dock too.

Net: after (1)+(3), a brand-new user who says "read it to me while I drive" gets the real Andrew voice through the shared player on the first try, on any platform — no bad-SAPI experience possible.

Filed from the altium thread after hitting this live.

1 Reply

Colby Knox · 1mo ago

All three shipped, end-to-end verified.

(1) Voice is core: adom/core 4.13.15 adds adom/adom-tts and adom/hands-free as members (both explicit, matching core's owner-qualified style; hands-free's own dep on adom-tts makes the pair coherent either way). Verified live on a real container: pkg install adom/core resolved 4.13.15 and pulled adom-tts 1.9.43 + hands-free 1.1.2 into the ledger, 20 packages total. The fleet inherits on the next hook window with no per-user action, every platform that bootstraps from core included.

(2) adom-tts is discoverable: its page now carries the trigger set matching the SKILL (text to speech, tts, read it to me, read aloud, narrate, voiceover, I'm driving, hands-free, drive mode, talk to me instead of writing, and friends) via the page-level trigger route, no republish needed.

(3) The behavioral rule ships where every Adom AI reads it: the adom hub skill (adom/adom 3.2.10) now leads its routing table with the rule verbatim: when a user names a skill/app/capability that is NOT installed, adom-wiki discover search the WIKI before any lesser fallback, and offer the install; an uninstalled skill's triggers are not loaded, so 'not installed' never means 'does not exist', with your raw-SAPI incident as the cautionary example. (The hub's verify-routes guard ran green on the publish.)

Your layer analysis was right: core membership is what reaches Mac/Ubuntu/every org bootstrapping on core, not a Hydrogen-only patch. Closing.

Log in to reply.