berkayturanci/voicebridge
Project Overview
voicebridge
A Node bridge and mobile app that lets you talk to CLI coding agents like Claude Code from your phone.
True Intent (AI Assessment)
A source-available, self-hosted voice+chat bridge that lets a phone drive local CLI coding agents over a private Tailscale network.
README Accuracy
Notes
Code matches the README's claims. Note the PolyForm Noncommercial 1.0.0 license — despite being 'open source-adjacent', it forbids commercial use. Agent CLIs are spawned as child processes with user-supplied prompts, so the usual caveats about trusting your own agent binaries apply.
voicebridge is a self-hosted voice interface for command-line AI coding agents. It consists of a small Node.js HTTP server (server.js) that spawns and pipes stdin/stdout to agent CLIs (Claude Code, Codex, Antigravity, Ollama), a browser-based web UI served from /public that uses the Web Speech API for speech-to-text and text-to-speech, a Flutter mobile app (in /app) for iOS/Android, and an Electron desktop control panel (in /desktop) that packages everything into a Mac DMG and Windows installer.
The problem it solves is friction and cost around voice interaction with coding agents. Existing agent CLIs are text-only, and third-party voice services like ElevenLabs charge per minute and route audio through their servers. voicebridge lets a developer speak to their agent from a phone while away from the keyboard, using the phone browser's built-in (free) speech recognition and synthesis, with the agent still executing locally on the developer's machine.
The intended users are developers who already use CLI-based coding agents and want hands-free or remote-from-couch operation. They install the desktop app or run the Node server, expose it over Tailscale HTTPS (required because Web Speech needs a secure context), and pair a phone by scanning a QR code. From then on the phone acts as a chat+voice client that streams prompts to and receives streamed responses from the agent running on the host.
Architecturally it is straightforward: a single Node process (one production dependency, qrcode-terminal) exposes a small HTTP/NDJSON API guarded by an optional Bearer ACCESS_TOKEN, manages multiple named sessions, and shells out to configured agent binaries (CLAUDE_BIN, CODEX_BIN, AGY_BIN). Replies are streamed sentence-by-sentence to the browser, which speaks them via SpeechSynthesis. Optional local Whisper (batch or WebSocket streaming) replaces browser STT for fully-local transcription. A reference cloud-runner example allows the agent to run on a different host. Auth, session, and health tests exist under /test.
The code is clean and coherent with its stated purpose: extensive documentation, CI workflows for Android/iOS/desktop releases, Electron secure-storage for tokens, and no signs of exfiltration or hidden network calls. The PolyForm Noncommercial license is real and restrictive — commercial use is prohibited. The .agents and .claude directories contain 'Keel' agent workflow skill definitions used by the maintainer's own dev tooling, not runtime code.
| Languages | JavaScript, Dart, HTML, Shell, Swift, Kotlin |
| Runtime | Node.js 18+ |
| Framework | Electron (desktop), Flutter (mobile), plain HTTP server (bridge) |
| Database | None (JSON file persistence for sessions) |
| Package Manager | npm |
| Key Dependencies | qrcode-terminal, qrcode, electron, electron-builder, web-push (optional), Flutter SDK |
| Build Tool | electron-builder, Flutter build, GitHub Actions |
| Test Framework | node:test (built-in), Dart test, XCTest |