voice-agents — Claude Code skill: what it does, how to install
A coding skill that walks an agent through building a voice assistant: speech recognition, model reply, synthesis, and the fight over latency.
npx skills add sickn33/agentic-awesome-skills --skill voice-agents -a claude-codeWhat voice-agents does
The skill lays out two ways to build a voice agent: speech-to-speech over the OpenAI Realtime API, and a pipeline of STT → LLM → TTS that gives you more control and is easier to debug. Latency is the constraint it keeps returning to. People expect an answer in about 500 ms.
Included is a sketch that wires Deepgram, ElevenLabs and OpenAI together, plus tips such as starting synthesis while the model is still generating, and a voice activity detection pattern for turn-taking. That sketch is labelled legacy and explicitly not a production implementation: check the Deepgram constructor, the ElevenLabs stream calls and the Realtime beta client against the SDKs you actually have installed.
A final section deals with credentials and retention. Clients should get ephemeral session credentials rather than long-lived keys, audio and transcripts belong on a short leash, and a spoken name is not authentication. That is a reason to check how your agent authorises actions before you install anything.
What it helps with
- pick between speech-to-speech and an STT → LLM → TTS pipeline
- add voice activity detection so the agent stops interrupting itself
- cut the delay before the first audible syllable
- handle barge-in and cancel stale model output
- move clients to ephemeral credentials and trim audio retention
Example prompts for the agent
- Build a voice assistant on a Deepgram, OpenAI and ElevenLabs pipeline, keep replies to two sentences.
- Add VAD and barge-in handling to our current voice agent, old responses have to get cancelled.
- Check the `elevenlabs.textToSpeech.stream` and `transcription.live` signatures against the versions we have installed.
How to install voice-agents
1Skills CLI (Vercel)
npx skills add sickn33/agentic-awesome-skills --skill voice-agents -a claude-code2Manually: put the files in place
~/.claude/skills/voice-agents/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/voice-agents/
1Skills CLI (Vercel)
npx skills add sickn33/agentic-awesome-skills --skill voice-agents -a codex2Manually: put the files in place
.agents/skills/voice-agents/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add sickn33/agentic-awesome-skills --skill voice-agents -a cursor2Manually: put the files in place
.cursor/skills/voice-agents/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install sickn33/agentic-awesome-skills voice-agents2Manually: put the files in place
.github/skills/voice-agents/SKILL.md1Skills CLI (Vercel)
npx skills add sickn33/agentic-awesome-skills --skill voice-agents -a gemini-cli2Platform CLI
gemini skills install https://github.com/sickn33/agentic-awesome-skills --path skills/voice-agentsManually: put the files in place
.devin/skills/voice-agents/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add sickn33/agentic-awesome-skills --skill voice-agents -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set80
The whole set →Similar
Questions about voice-agents
How to install voice-agents in Claude Code?
Run npx skills add sickn33/agentic-awesome-skills --skill voice-agents -a claude-code. The skill then sits at ~/.claude/skills/voice-agents/SKILL.md.
What does voice-agents do?
It covers two voice agent architectures and their trade-offs, with a Deepgram, ElevenLabs and OpenAI pipeline sketch, a VAD pattern, and latency tips.
How does speech-to-speech differ from a pipeline?
Speech-to-speech runs through the OpenAI Realtime API and avoids extra hops. The STT → LLM → TTS pipeline gives more control and is easier to debug, though you have to hold latency down yourself.
Source text
SKILL.md · MIT
---
name: voice-agents
description: Voice agents represent the frontier of AI interaction - humans
speaking naturally with AI systems.
risk: safe
source: vibeship-spawner-skills (Apache 2.0)
date_added: 2026-02-27
---
# Voice Agents
Voice agents represent the frontier of AI interaction - humans speaking
naturally with AI systems. The challenge isn't just speech recognition
and synthesis, it's achieving natural conversation flow with sub-800ms
latency while handling interruptions, background noise, and emotional
nuance.
This skill covers two architectures: speech-to-speech (OpenAI Realtime API,
one low-latency architecture option) and pipeline (STT→LLM→TTS, more control,
easier to debug). Key insight: latency is the constraint. Humans expect
responses in 500ms. Every millisecond matters.
No market-adoption statistic or universal latency benchmark is established by this skill.
## Detailed Guide
Read [the detailed guide](references/detailed-guide.md) before executing this skill. It retains the complete procedure and reference material. Treat its safety, prerequisites, and validation requirements as mandatory. For focused work, load the relevant sections; for end-to-end work, read the guide completely.
## Legacy Pipeline Sketch (not a production implementation)
```
import { Deepgram } from '@deepgram/sdk';
import { ElevenLabsClient } from 'elevenlabs';
import OpenAI from 'openai';
// Initialize clients
const deepgram = new Deepgram(process.env.DEEPGRAM_API_KEY);
const elevenlabs = new ElevenLabsClient();
const openai = new OpenAI();
async function processVoiceInput(audioStream) {
// 1. Speech-to-Text (Deepgram Nova-3)
const transcription = await deepgram.transcription.live({
model: 'nova-3',
punctuate: true,
endpointing: 300, // ms of silence before end
});
transcription.on('transcript', async (data) => {
if (data.is_final && data.speech_final) {
const userText = data.channel.alternatives[0].transcript;
// Do not log raw private transcripts by default.
// 2. LLM Processing
const completion = await openai.chat.completions.create({
model: 'gpt-4o-mini',
messages: [
{ role: 'system', content: 'You are a concise voice assistant.' },
{ role: 'user', content: userText }
],
max_tokens: 150, // Keep responses short for voice
});
const agentText = completion.choices[0].message.content;
// Log only authorized redacted operational metadata.
// 3. Text-to-Speech (ElevenLabs)
const audioStream = await elevenlabs.textToSpeech.stream({
voice_id: 'voice_id_here',
text: agentText,
model_id: 'eleven_flash_v2_5', // Lowest latency
});
// Stream to user
playAudioStream(audioStream);
}
});
// Pipe audio to transcription
audioStream.pipe(transcription);
}
```
### Optimization Tips:
- Start TTS while LLM still generating (streaming)
- Pre-compute first response segment during user speech
- Use Flash/turbo models for latency
### Voice Activity Detection Pattern
Detect when user starts/stops speaking
**When to use**: All voice agents need VAD for turn-taking
# VOICE ACTIVITY DETECTION (VAD):
```
VAD Types:
1. Energy-based: Simple, fast, noise-sensitive
2. Model-based: Silero VAD, more accurate
3. Semantic VAD: Understands meaning, best for conversation
```
## When to Use
- User mentions or implies: voice agent
- User mentions or implies: speech to text
- User mentions or implies: text to speech
- User mentions or implies: whisper
- User mentions or implies: elevenlabs
- User mentions or implies: deepgram
- User mentions or implies: realtime api
- User mentions or implies: voice assistant
- User mentions or implies: voice ai
- User mentions or implies: conversational ai
- User mentions or implies: tts
- User mentions or implies: stt
- User mentions or implies: asr
## Limitations
- Use this skill only when the task clearly matches the scope described above.
- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
## Version, privacy and implementation boundaries
These mixed-version SDK sketches are conceptual and were not executed. Deepgram constructor/transcription.live, ElevenLabs stream signatures, the beta Realtime client and the named Silero JavaScript package must be checked against the installed official SDKs before use; do not infer missing package/runtime availability. smart_format formats text and is not noise reduction; model keyword/keyterm flags vary. A model-VAD probability threshold cannot be set from raw amplitude without a calibrated mapping. Confidence scores/latency figures are not universally comparable.
Define end-of-user-turn to first audible output and measure p50/p95 on representative devices/networks/languages. STT first partial, LLM first token and TTS first audio times are not simply additive end-to-end guarantees. Do not send partial/stale hypotheses to irreversible tools: serialize turns, deduplicate final transcripts, buffer complete TTS-safe segments, maintain history, and cancel/discard obsolete generation/audio. On barge-in truncate unheard assistant content in server history as well as stopping local playback; a checkpoint alone is insufficient.
Clients need appropriate ephemeral/session credentials, not long-lived API keys. Obtain authorized microphone/recording/voice/recipient scope, minimize audio/transcript retention and external-provider transfers, and avoid voice cloning/impersonation without rights. Bound sockets, retries, queues and costs; clean up listeners/streams on disconnect. Spoken names/numbers and claimed identity are not authentication. Validate tenant/recipient/action and obtain transaction-specific confirmation where needed. Text cleanup must preserve decimal numbers, currency, URLs and code semantics; SSML requires supported engines and escaping. A voice prompt is not a tool-authorization boundary. No call, recording or provider request was made.
© sickn33 · MIT · sickn33/agentic-awesome-skills