Context
Spun out of the activation-UX pass that disabled wake word and renamed "Push-to-talk" → "Tap to talk" (PR linked below). The rename made the label honest, but the underlying affordance gap remains.
Problem
What we call the default activation style is really double-click the orb to toggle a listening turn (web/src/plugins/orb/OrbStage.tsx:51 → invoke('set_mic_listening', { on })). Concretely:
- It's a toggle, not press-and-hold (double-click starts a turn, double-click again stops).
- There is no dedicated talk button anywhere. The only persistent control is the chrome-rail mic button, which is hard mute/unmute — a different axis.
- There is no keyboard shortcut to talk.
- The behavior is only explained by a settings hint ("Double-click the orb to talk"), so it's effectively undiscoverable for a new user.
Proposal (B)
Give "talk" a real, discoverable affordance:
- Visible talk button in the chrome rail (next to the mic/mute button) that starts/stops a listening turn — reuses the existing
set_mic_listening Tauri command, so it's a UI + wiring change, not new audio plumbing.
- Optional global hold-to-talk hotkey (press-and-hold to open the mic, release to close) — this is what would make "push-to-talk" literally true, for users who want walkie-talkie behavior. Likely a Tauri global shortcut + a held-vs-toggle mode.
- Decide whether to surface hold-to-talk as a distinct activation style or a modifier on "Tap to talk."
Out of scope / related
- Possible larger rethink of the three activation styles (tap-to-talk / open-mic / wake-word) — collapse or simplify (direction "C" from the discussion). Can fold in here or split.
- Wake word stays disabled until the retrained model ships (
web/src/shared/wakeword/enabled.ts).
Acceptance
- A first-time user can see how to start talking without reading settings.
- Push-to-talk (hold) works via keyboard for users who enable it.
Context
Spun out of the activation-UX pass that disabled wake word and renamed "Push-to-talk" → "Tap to talk" (PR linked below). The rename made the label honest, but the underlying affordance gap remains.
Problem
What we call the default activation style is really double-click the orb to toggle a listening turn (
web/src/plugins/orb/OrbStage.tsx:51→invoke('set_mic_listening', { on })). Concretely:Proposal (B)
Give "talk" a real, discoverable affordance:
set_mic_listeningTauri command, so it's a UI + wiring change, not new audio plumbing.Out of scope / related
web/src/shared/wakeword/enabled.ts).Acceptance