Ask it to put some music on — and keep talking to it while it plays
A music card with the catalogue connection built in: drop it on the canvas and ask for a song, with nothing to fill in. Pick by genre, language, artist or just “play something”, skip forward and back, pause, set the volume, ask what is on. Speech and music no longer fight: while the robot talks the music ducks instead of pausing, and comes back on its own. Interrupting the robot no longer kills the song, and stopping the song no longer cuts the robot off mid-sentence.

Nothing to fill in
The catalogue connection lives inside the card, so there is no address and no key to enter — drag it onto the canvas, wire it up, and ask for a song. The card has no settings at all: what used to be configuration turned out to be either an implementation detail or something only the person listening can answer, so volume and autoplay became actions instead.
Worth knowing: the connection is fixed in the card's source, so anyone who can read the repository or pull the image can read it. It is hidden from the card's UI, which is about not leaking it further — not about keeping it secret.
Named after what a person wants
Ten actions: list the genres, play, next, previous, pause, resume, stop the music, what's playing, set the volume, autoplay on or off, and search without playing.
Three things the caller no longer has to do:
- Guess the genre codes.
list_genresreturns the catalogue's own vocabulary, and tells you whether it came from the catalogue or from the built-in fallback. A value it does not recognise degrades to free text instead of failing. - Keep the bookkeeping.
nexttakes no arguments — the card holds the criteria of the last request and the last 50 tracks it played. - Remember what a stop means.
stop_musicstops the music and leaves speech alone.
Autoplay is off by default: a song finishes and it stops. "Keep playing by itself" is a decision, and it should have to be asked for.
Speech and music, on one speaker
A speaker driver subscribes to exactly one topic and does not mix — true of every robot in the tree. So a new audio_mixer card does the summing: speech passes at full volume and is never attenuated or interrupted, everything else is background and ducks under it, dropping to 15% over a 200 ms ramp and coming back 300 ms after the sentence ends.
It ducks, it does not pause. Pausing stalls the decoder and leaves an audible seam in the song, and a robot in conversation is talking constantly. That one decision is why interrupting the robot now leaves the music running: there is nothing to resume.
While we were in there
A long background action no longer blocks the robot. Previously a playing song held the queue, so the model's next call of any kind waited until the song ended; and because a song has no text to estimate a duration from, a long one could be silently reclaimed mid-playback — after which the robot would talk straight over the music. Both are fixed, and "is it playing something?" still has an answer.
One cost, stated plainly: an emergency stop does not stop the song — music is not a dangerous action. Use "stop the music".