Talk to Claude. Over the phone.
Voice interface that connects phone calls to Claude Code CLI. Call in, or let Claude call you -- with full context on why it's reaching out. Integrates with n8n for AI-initiated calls from any automation workflow.
How it works
A phone call comes in through Twilio, gets transcribed, reasoned about by Claude, and spoken back -- all in real time over a WebSocket.
Features
Not a demo. A working voice pipeline with the pieces you need for reliable phone conversations with Claude.
Energy-based VAD with configurable silence threshold and RMS energy floor. Detects when you stop talking, not when you pause.
vad.rsFilters common Whisper artifacts from silence and background noise. No phantom transcriptions hitting Claude.
stt.rsSession memory per call with configurable timeout. Claude remembers context across turns within the same conversation.
session_timeout_secsPOST to /api/call with a phone number and context. Claude knows why it's calling before the conversation starts.
Orchestrator routes triggers from any n8n workflow to the call-human module. Alerts, cron jobs, or events can initiate AI calls with full context.
n8n integrationMu-law codec, streaming WebSocket, direct PCM conversion. No intermediate servers -- Twilio talks straight to Axum.
audio.rsCustom TTS greeting when a call connects. Set it in config.toml -- default is "Hello, this is Echo".
config.tomlTech stack
Minimal dependencies, no runtime bloat. One compiled binary handles everything.
core runtime
http + websocket
telephony
speech-to-text
text-to-speech
reasoning engine
workflow automation
Quick start
Clone, configure, deploy. You'll need a Twilio number and API keys for Groq and Inworld.
Clone and build
Configure
Deploy and run
Point Twilio to your server