kural
Open-source voice AI agent framework.
Build phone agents with the LLM, speech, and telephony providers of your choice. Bring your own keys. Run for the cost of a phone number.
Why kural
Bring your own keys
Plug in OpenAI, OpenRouter, Groq, Ollama, vLLM, or any OpenAI-compatible endpoint. Same for STT and TTS. No middleman markup.
Free path exists
OpenRouter free models + local Whisper + local Kokoro TTS + a $1/month Twilio number. Production voice agent for call minutes only.
Self-hostable
Single Python process. Deploy on a $5 VPS, your laptop, or a container. No SaaS lock-in.
Phone-first
Twilio telephony out of the box. Browser audio works too. Built on Pipecat — every stage is a swappable frame processor.
How it works
A caller's audio flows through a Pipecat pipeline. Each stage is a frame processor you can swap or remove.
Provider matrix
| Layer | Free / local | Paid (BYOK) |
|---|---|---|
| LLM | Ollama, vLLM, OpenRouter free tier | OpenAI, Anthropic (via OpenRouter), Groq, Together |
| STT | faster-whisper, Distil-Whisper | Deepgram, AssemblyAI |
| TTS | Kokoro, Piper | ElevenLabs, Cartesia |
| Phone | — | Twilio (required for PSTN) |
Quickstart
Today, the v0 echo agent runs locally — speak into the mic, hear yourself back. No API keys needed.
# macOS: brew install portaudio # Ubuntu: sudo apt-get install -y portaudio19-dev git clone https://github.com/nnavnita/kural cd kural cp .env.example .env python -m venv .venv && source .venv/bin/activate pip install -e . kural # or: python -m kural.server
Wear headphones to avoid feedback. Stop with Ctrl+C.
Roadmap
- Done v0 — Local echo agent (mic → speaker passthrough)
- Next v0.1 — STT → LLM → TTS pipeline with one provider per layer
- Planned v0.2 — Provider adapters (OpenAI-compatible LLM, multiple STT/TTS)
- Planned v0.3 — Twilio telephony integration
- Planned v0.4 — Configurable agent personas (system prompt, tools)
- Planned v1.0 — Production-ready, documented, examples