Install any skill in seconds. Free to start, no credit card required.
Get Started Free →cursor/add-voice
Use when the user runs /add-voice, types Voice Mode, or asks to add Grok realtime voice to an app, including replacing an STT-LLM-TTS cascade or OpenAI Realtime. Wire speech-to-speech, safe auth, and app mic. Composer: waveform button, mic icon reserved for dictation. For mic-to-text only use /add-dictation; to speak text replies use /add-read-aloud. To add debug logging and fix from logs use /debug-voice.
Passed 22 of 23 test cases with the skill, and 7 of 23 without it.
and 22 more in the full report
15 fixed7 passed either way1 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 15 test cases the skill fixed. Same model, same prompt, with and without the skill.
During initial testing of our xAI real-time voice integration, the agent speaks back audio correctly, but no user transcription events arrive on the client. The team assumes transcriptions are automatic whenever user speech is sent. What session parameter must be explicitly configured to receive user transcriptions?
| Checked | Without skill | With skill |
|---|---|---|
| Sets audio.input.transcription.model to grok-transcribe in the session update message. | Missed | Passed |
| Configures transcription settings during session initialization so transcription events are emitted. | Missed | Passed |
The instructions your model reads when the skill loads.
Add Grok Speech to Speech to an existing app. Run on /add-voice, typed Voice Mode, or clear “add Grok voice” intent.
Working duplex path: user-app mic in, audio out, wss://api.x.ai/v1/realtime?model=grok-voice-latest, safe auth. Cursor has no native mic; wire the app (or a sample client), not the IDE.
Language-agnostic event loop. TypeScript samples default. Short Python twins only where the client API differs (e.g. ws vs websockets).
Map the app
/v1/stt or /v1/tts only if the product still needs one-shot listen or speak outside the agent.Auth
XAI_API_KEY.POST https://api.x.ai/v1/realtime/client_secrets, client uses ephemeral token (Bearer or browser sec-websocket-protocol: xai-client-secret.<token>).Connect + session
wss://api.x.ai/v1/realtime?model=grok-voice-latestsession.update with voice (default eve), instructions, turn_detection: { type: "server_vad" } (or null for push-to-talk), PCM 24 kHz unless the app already standardizes elsewhere.audio.input.transcription.model: "grok-transcribe" or no user transcript arrives (conversation.item.input_audio_transcription.updated is cumulative, not a delta).web_search, x_search, file_search, mcp, custom function.Audio I/O (app-side)
AudioContext per session for capture and playback, created inside the user gesture (autoplay policy). Ask for 24 kHz; if the browser gives another rate, resample before sending.input_audio_buffer.append (or binary transport). Start WS and mic in parallel; buffer early audio, flush on open.response.output_audio.delta immediately; schedule with a ~150 ms lead so chunks butt together. On input_audio_buffer.speech_started, stop everything queued (barge-in).test cases passed, vs 7 / 23 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.