# Add Dictation

Adds speech-to-text dictation to a composer and transcribes recorded audio with Grok.

- Repository: https://github.com/cursor/plugins (15000 stars)
- Category: Media
- License: see repository
- Last updated: 2026-11-01
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add cursor/plugins --skill add-dictation -g -a claude-code -y`
Codex: `npx skills add cursor/plugins --skill add-dictation -g -a codex -y`
Cursor: `npx skills add cursor/plugins --skill add-dictation -g -a cursor -y`
Gemini CLI: `npx skills add cursor/plugins --skill add-dictation -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add cursor/plugins`

## Description

Use when the user runs /add-dictation or wants speech turned into text with Grok speech-to-text: a mic button that dictates into the composer, live captions, or transcribing recorded audio (files, uploads, URLs) with word timestamps, diarization, subtitles, meeting notes. STT, transcribe, transcription. For a voice agent that talks back use /add-voice.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Add Dictation

Add Grok Speech to Text to an existing app: a mic button that dictates into the composer, live captions, or transcripts of recorded audio. Run on `/add-dictation`, typed **Dictate**, or clear “transcribe” intent. Cursor has no mic; wire the **app**, not the IDE.

## Docs

- https://docs.x.ai/developers/model-capabilities/audio/speech-to-text
- Model selection (read first): https://docs.x.ai/developers/model-capabilities/audio/speech-to-text#model-selection
- Pricing (cite docs only): https://docs.x.ai/developers/pricing

## Model

Before any STT call, read the model-selection section and pass the **latest listed** model as `model`. Do not invent ids or reuse a stale one from this skill. REST: form field before `file`. Streaming: query param. Official examples currently send `grok-voice-transcribe-2.0`. Listed today: `grok-voice-transcribe-2.0` (best), `grok-voice-transcribe-1.0` (original; API default when `model` is omitted).

## Pick the path

| Need | Path |
| --- | --- |
| Tap, speak, tap, text appears. Uploaded files. URLs. | **Batch** `POST https://api.x.ai/v1/stt` (default) |
| Text appears while speaking: captions, long dictation, push-to-talk | **Streaming** `wss://api.x.ai/v1/stt` through a backend relay |

Batch is the default for a composer mic button: one request, no socket, the key never leaves the server. Go streaming only when the UX needs interim text.

## Auth

- Bearer `XAI_API_KEY`, server side only. The STT docs document no ephemeral-token flow, and browsers cannot set WebSocket headers, so browser streaming goes through your backend relay. Do not invent a token flow.
- Never put the key in a client bundle. Do not paste keys in chat.

## Steps

The rest: https://github.com/cursor/plugins/blob/HEAD/grok-voice/skills/add-dictation/SKILL.md
