Agent skill · 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.
What it needs
About 4k tokens when loaded.
What this skill does
Add Voice Add Grok Speech to Speech to an existing app. Run on /add-voice, typed Voice Mode, or clear “add Grok voice” intent. Goal 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. Protocol first Language-agnostic event loop. TypeScript samples default. Short Python twins only where the client API differs (e.g. ws vs websockets). Docs https://docs.x.ai/developers/model-capabilities/audio/speech-to-speech https://docs.x.ai/developers/model-capabilities/audio/ephemeral-tokens Pricing (cite docs only): https://docs.x.ai/developers/pricing (~$0.08/min STS + $0.004/text item; max session 120 min) Steps 1. Map the app Stack: none, OpenAI Realtime, STT→LLM→TTS cascade, TTS/STT only. Client: web / Node / iOS / Android / server. If a cascade or OpenAI Realtime exists: replace it with the single duplex loop below (URL, model, voice, event diffs); keep standalone /v1/stt or /v1/tts only if the product still needs one-shot listen or speak outside the agent. 2. Auth Server: Bearer XAIAPIKEY. Browser/mobile: backend POST https://api.x.ai/v1/realtime/clientsecrets, client uses ephemeral token (Bearer or browser sec-websocket-protocol: xai-client-secret.<token>). Never put a long-lived key in client bundles. Do not paste keys in chat. 3. Connect + session URL: wss://api.x.ai/v1/realtime?model=grok-voice-latest On open: session.update with voice (default eve), instructions, turndetection: { type: "servervad" } (or null for push-to-talk), PCM 24 kHz unless the app already standardizes elsewhere. Set audio.input.transcription.model: "grok-transcribe" or no user transcript arrives (conversation.item.inputaudiotranscription.updated is cumulative, not a delta). Tools if needed: websearch, xsearch, filesearch, mcp, custom function. 4. …
How to use it
Reference it in AdaL, Claude Code, Cursor or any coding agent — nothing to install:
@skills cursor/add-voice