Skip to main content

Pluggable voice chat runtime

Project description

TryVoice

Hands-free voice runtime for AI agents. Talk to your AI coding assistant without touching the keyboard.

TryVoice wraps AI agents (like OpenClaw and Claude Code) into a voice interface with wake word activation, push-to-talk, and real-time streaming — all running in your browser.

Early Preview (v0.1.0-alpha) — actively developed, expect rough edges.

What It Does

  • Wake word activation — say a keyword to start talking, no hands needed (powered by OpenWakeWord)
  • Push-to-talk — hold a button to speak, release to send
  • Real-time streaming — hear the AI respond as it generates, with interruptible playback
  • Multi-bot slots — up to 4 independent agent sessions side by side
  • Mobile-ready — PWA support, works on phone browsers
  • Pluggable adapters — connect any AI agent via the Adapter SDK

Prerequisites

TryVoice is a voice layer on top of existing AI agents. You need at least one of:

  • OpenClaw — running with a gateway endpoint
  • Claude Code — installed on the same machine (claude CLI available in PATH)

More agent adapters coming soon. See Building an Adapter to connect your own agent.

Quick Start

1. Clone and setup

git clone https://github.com/AaronZ021/tryvoice-oss.git
cd tryvoice
bash scripts/setup.sh

This creates a virtual environment, installs all packages, and builds the frontend.

2. Configure

# Edit .env (created from .env.example during setup)
vim .env

For Claude Code (voice-driven coding on your local machine):

TRYVOICE_ACTIVE_ADAPTER=claude-code
# That's it — TryVoice auto-discovers your Claude Code sessions

For OpenClaw (voice interface to OpenClaw agents):

TRYVOICE_ACTIVE_ADAPTER=openclaw
OPENCLAW_GATEWAY_URL=http://localhost:18789
OPENCLAW_GATEWAY_TOKEN=your_gateway_token_here

3. Run

source .venv/bin/activate
python -m backend.cli
# Open https://localhost:7860 in your browser

4. Enable wake word (optional but recommended)

Once the UI loads, click the microphone settings icon and select a wake word keyword (e.g., "hey jarvis", "alexa", "americano"). The browser will listen in the background — say the keyword to start a voice turn hands-free.

Docker

# Clone and configure
git clone https://github.com/AaronZ021/tryvoice-oss.git
cd tryvoice
cp .env.example .env
# Edit .env with your adapter settings (see above)

docker compose up
# Open https://localhost:7860

Architecture

┌─────────────┐     WebSocket      ┌──────────────────┐
│  Browser UI  │◄──────────────────►│   TryVoice       │
│  (PWA)       │                    │   Runtime         │
│              │                    │                   │
│  Wake Word   │                    │  ┌────────────┐   │
│  STT / TTS   │                    │  │  Adapter    │   │──► OpenClaw
│  Audio I/O   │                    │  │  Registry   │   │──► Claude Code
│              │                    │  │  (plugin)   │   │──► Your adapter
└─────────────┘                    └──┴────────────┴───┘

Voice flow: Wake word / PTT → STT (browser Web Speech API or Groq Whisper) → Adapter → Agent → Streaming text → TTS (Edge TTS) → Audio playback

Voice Configuration

Variable Default Description
TRYVOICE_ACTIVE_ADAPTER echo Active adapter (claude-code, openclaw, or custom)
GROQ_API_KEY Groq API key for server-side STT (optional, browser fallback)
EDGE_TTS_VOICE zh-CN-XiaoxiaoNeural Edge TTS voice (300+ voices available)
PORT 7860 Server port

See .env.example for all options.

Supported Adapters

Adapter Package Use Case
claude-code tryvoice-adapter-claude-code Voice control for Claude Code terminal sessions
openclaw tryvoice-adapter-openclaw Voice interface to OpenClaw agent gateway
echo Built-in Testing and demo (echoes your speech back)

Building an Adapter

Connect TryVoice to any AI agent by implementing the Adapter protocol:

pip install tryvoice-adapter-sdk
from tryvoice_adapter_sdk import AgentAdapter, AdapterCapabilities, AdapterEvent

class MyAdapter:
    def report_capabilities(self) -> AdapterCapabilities:
        return AdapterCapabilities(supports_stream=True, ...)

    async def stream_user_turn(self, session_key, text, ...):
        # Call your agent, yield AdapterEvent chunks
        yield AdapterEvent(kind="token", text="Hello!")
        yield AdapterEvent(kind="turn_end")

Register via entry point in pyproject.toml:

[project.entry-points."tryvoice.adapters"]
my-agent = "my_package.adapter:MyAdapter"

Development

Prerequisites

  • Python 3.9+ (3.11 recommended)
  • Node.js 20+ (for frontend build)

Setup

git clone https://github.com/AaronZ021/tryvoice-oss.git
cd tryvoice
bash scripts/setup.sh
source .venv/bin/activate
python -m backend.cli

Project structure

tryvoice/
├── apps/
│   ├── host-runtime/      # Python FastAPI backend (adapter layer, session FSM, voice providers)
│   └── client-web/        # TypeScript frontend (Vite, state machine, wake word, audio)
├── scripts/               # Setup and build scripts
├── pyproject.toml          # Python package config
├── Dockerfile              # Multi-stage build (Node + Python)
└── docker-compose.yml      # Single-command deployment

License

Apache License 2.0 — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tryvoice-0.1.0.tar.gz (59.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tryvoice-0.1.0-py3-none-any.whl (59.2 MB view details)

Uploaded Python 3

File details

Details for the file tryvoice-0.1.0.tar.gz.

File metadata

  • Download URL: tryvoice-0.1.0.tar.gz
  • Upload date:
  • Size: 59.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for tryvoice-0.1.0.tar.gz
Algorithm Hash digest
SHA256 cedf352df6ed2a5a3f75cb3ed4500772e1cc2afdd377d7aff5c7d341fa54d2a6
MD5 33c09a1af431e6aae605ab62a8f8e079
BLAKE2b-256 0a33b3f0a544a1127d32c27f0f839a59d217627df34a92e75484f6360ed75dca

See more details on using hashes here.

File details

Details for the file tryvoice-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: tryvoice-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 59.2 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for tryvoice-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f5aab9ae5f2aa8b1ba01fd451646595a0ab71484b559b1f3e600b5f7f48aa246
MD5 edf3db4bbd12c35de50833c73421b508
BLAKE2b-256 a337c60256dd8acc971513f87e27d7d7095abf8bcd527a706d45bacfd7f9ddaf

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page