Skip to content

[bug] Saying "stop" does nothing — only "stop voice" is a command, and the agent replies "Stopped" anyway #331

Description

@serge-ivo

What happened

Coder Lead, 2026-08-06 23:51:37. The user said "Stop-stop." — meaning stop.

It was transcribed and sent as a chat message. The agent replied "Got it. Stopped." Nothing
stopped. The mic stayed live, and two phantom turns followed (see #(B), the companion ticket).

Cause: "stop" alone is not an exit phrase

packages/sdk/src/voice/convo.ts:147:

const EXIT_BY_LANG = {
  en: ["exit voice", "exit voice mode", "stop voice", "stop voice mode",
       "leave voice", "text mode", "switch to text", "back to text"],}

Every English phrase that contains "stop" requires the word "voice" after it. Bare "stop",
"stop stop", "stop listening" match nothing.

There is no vocabulary reason for this: phraseMatchesTranscript already allows a single-word
command when it is the whole utterance — the restriction exists so "don't forget to mute"
stays a message. "Stop-stop." was the whole utterance, so a listed "stop" would have fired
correctly and safely.

Stop-words are not the answer either: they are off unless configured (stripStopWord:394), and a
stop-word ends the turn — it submits the message. It does not stop the session.

The second half: the agent confirmed a stop it cannot perform

"Got it. Stopped."

Voice mode is client state. The agent has no visibility into it and no control over it — it
answered "stop" conversationally, as any assistant would. But the reply reads as confirmation, so
the user reasonably disengaged while the microphone was still open.

That is the same class as #254 and #259: an agent making a confident statement about a capability
it does not have, because nothing told it otherwise. Here the honest reply is "I can't control
the microphone — say 'stop voice' or tap the mode control"
, which requires the prompt to know
voice is active.

Fix

  • Add bare "stop", "stop stop", "stop listening" (and the equivalents in the other nine
    languages already listed) to EXIT_BY_LANG.
  • Consider whether "stop" should mean exit voice or interrupt what is happening — they are
    different. Mid-reply, a user saying "stop" most likely wants the TTS to shut up and the turn
    abandoned, not to leave hands-free entirely. exit may be the wrong verb to bind it to.
  • Teach the agent that voice is active so it stops confirming actions it cannot take. Derived from
    state, not hardcoded prose (Prompt-drift check — three agents in two days told a story about themselves their capabilities contradicted #315).

Verification

  • "Stop." as a whole utterance exits voice; "don't stop now" does not.
  • The agent never claims to have stopped voice.
  • Mid-TTS "stop" silences the reply rather than only unsubscribing from the next one.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions