Skip to content

Activation UX: add a real "talk" affordance (button + optional hold-to-talk hotkey) #571

Description

@mabry1985

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:51invoke('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:

  1. 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.
  2. 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.
  3. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions