Skip to content

webvoice: browser voice client spike (phone-direct Live) - #10

Merged
ssethia2 merged 2 commits into
mainfrom
ss/web-voice
Jun 16, 2026
Merged

webvoice: browser voice client spike (phone-direct Live)#10
ssethia2 merged 2 commits into
mainfrom
ss/web-voice

Conversation

@ssethia2

Copy link
Copy Markdown
Owner

A working prototype of the phone-direct voice architecture and the artifact from spike #2.

What it proved

  • iOS WebKit does clean AEC + barge-in (tested on iPhone, speaker, no headphones) — the thing native desktop Python couldn't deliver.
  • Ephemeral tokens keep the Gemini key server-side (/live-token).
  • The escalate handoff works: Gemini calls escalate_to_ariaPOST /agent → the full Claude brain (memory/email/calendar/tools) → spoken back, snappy.

Contents

  • server.py/live-token (ephemeral, escalate tool baked into the token), /agent (runs the brain), serves the client. No new deps.
  • index.html + capture-worklet.jsgetUserMedia({echoCancellation}) → 16 kHz PCM → Live; 24 kHz playback; the escalate handoff; on-page log.
  • README.md — what it proved + how to run (uvicorn + ngrok).

Spike, not production: single shared thread, no auth — don't expose publicly. Inert to the main app (separate entry point, no new deps). Next steps toward a real client: auth, per-user threads, push, native shell.

🤖 Generated with Claude Code

ssethia2 added 2 commits June 15, 2026 21:27
…-brain)

Validated the phone-client architecture end to end: the browser holds the Gemini Live
session (OS does AEC + barge-in — confirmed clean on iOS WebKit, where native desktop
Python couldn't), and the Aria brain is reached via one escalate_to_aria tool ->
POST /agent. Ephemeral token keeps the API key server-side.

- server.py: /live-token (ephemeral, tool baked in), /agent (run the full brain), serves
  the client. No new deps (fastapi/uvicorn/google-genai already present).
- index.html + capture-worklet.js: getUserMedia(echoCancellation) -> 16k PCM -> Live;
  24k playback; escalate handoff; on-page log.
- README: what it proved, how to run (uvicorn + ngrok), and that it's a no-auth prototype.

Spike, not production: single thread, no auth — don't expose publicly.

Assisted-by: Claude Code (Opus 4.8)
- PWA manifest + apple-touch-icon + meta tags so iOS "Add to Home Screen" gives a
  fullscreen, tap-to-launch Aria icon (no App Store, no native code).
- Generated app icon (stdlib PNG, no deps); server serves /manifest.json and /icon.png.
- run.sh: starts uvicorn + ngrok in one command; ARIA_NGROK_DOMAIN gives a STABLE url so
  the home-screen icon keeps working.
- README: the phone flow (run.sh → open → Add to Home Screen) + the stable-domain setup.

Assisted-by: Claude Code (Opus 4.8)
@ssethia2
ssethia2 merged commit 11de5fd into main Jun 16, 2026
1 check passed
@ssethia2
ssethia2 deleted the ss/web-voice branch June 16, 2026 02:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant