Skip to content

feat: add two-way voice turns to Apple Watch chat #100224

Description

@steipete

Summary

Add two-way voice turns to the Apple Watch chat: dictate a message on Watch and hear the resulting OpenClaw reply spoken on Watch.

Problem to solve

The watchOS app currently exposes native text input, including dictation, and forwards the resulting text through the iPhone chat bridge. The assistant response only appears as text, so users cannot complete a hands-free voice turn from their wrist.

Proposed solution

Add an explicit voice-turn action to the Watch chat. Reuse the existing WatchKit dictation sheet for input and the existing WatchConnectivity chat pipeline for delivery, then use watchOS system speech synthesis to speak only the new assistant reply produced by that turn. Keep ordinary text/dictation messaging silent and provide a visible stop control while speech is active.

Alternatives considered

  • Starting iPhone Talk mode from the Watch uses the phone microphone and speaker, not Watch audio.
  • A custom watchOS microphone capture/streaming stack duplicates native dictation, adds audio-session and transport complexity, and is unnecessary for turn-based conversation.
  • Speaking every synced assistant message would be surprising and could read stale history aloud.

Impact

Affected: Apple Watch users.

Severity: Medium usability gap.

Frequency: Every time a user wants a hands-free Watch interaction.

Consequence: Users must read the response or continue on iPhone after dictating from Watch.

Evidence/examples

Current code routes the Watch composer through WatchKit native text input and sends the recognized text through the existing send-chat command. The app snapshot already returns stable chat item identifiers, allowing the Watch to identify and speak only the assistant response that arrives after a voice turn.

Apple provides native Watch text input/dictation and AVSpeechSynthesizer, so this can remain entirely on supported system APIs without raw microphone streaming.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Normal backlog priority with limited blast radius.clawsweeper:linked-pr-openClawSweeper found an open linked pull request for this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:needs-product-decisionClawSweeper marked this issue as needing a product or behavior decision.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.clawsweeper:source-reproClawSweeper found a high-confidence source-level issue reproduction.enhancementNew feature or requestimpact:ux-frictionUser-facing flow adds avoidable confusion or support burden without fully blocking progress.issue-rating: 🦞 diamond lobsterVery strong issue quality with high-confidence source-level or clear reproduction.maintainerMaintainer-authored PRmaturity:stableIssue affects a taxonomy feature currently scored M4/M5.

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions