# Voice

> Speech in and out for iii — transcribe audio files to timestamped text, run live dictation sessions fed with microphone audio, and read text aloud.

- Skill: `iii-hq/voice` (Agent Skill)
- Install (CLI): `npx skillmds@latest add iii-hq/voice`
- Raw SKILL.md: https://api.skillmd.com/api/skills/iii-hq/voice/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: iii-hq (https://skillmd.com/u/iii-hq)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/iii-hq/voice

---


# voice

Local speech-to-text and read-aloud on the iii bus. Nothing leaves the machine by default: a small streaming recognizer produces live text and a large second-pass model re-decodes each finished utterance with punctuation and casing, both with models the worker downloads once. An OpenAI-compatible audio endpoint, or any speech provider registered with llm-router (`stt.backend` / `tts.backend` set to `router`), can replace either half through configuration.

## When to Use

- A user attached or named a WAV recording and wants its text: `voice::transcribe`.
- A surface streams microphone audio and wants live text: `voice::dictation::*`.
- A reply should be spoken: `voice::speak`.

## Boundaries

- Audio in is 16 kHz mono 16-bit PCM for dictation; WAV files of any rate for `voice::transcribe`. No other container is decoded.
- The bundled model is English. Other languages need the `openai` backend.
- `voice::speak` on the host backend plays on the machine running the worker, not in the caller's browser; the `openai` backend returns audio for the caller to play.
- Dictation sessions idle past `session_idle_secs` are closed by the worker.

## Functions

- `voice::transcribe` — a WAV file (path or base64) to text with timestamped segments.
- `voice::dictation::start` — open a session; transcript events go to `output_function_id`.
- `voice::dictation::push` — feed one base64 PCM chunk (rising `seq`).
- `voice::dictation::stop` — close a session and return its transcript (`discard` to drop it).
- `voice::dictation::list` — open sessions.
- `voice::speak` — read text aloud; returns a `speech_id`.
- `voice::speak::stop` — stop host playback.
- `voice::models::list` — local models, whether each is installed, and each one's license, author and source (Parakeet TDT 0.6B v2 is CC BY 4.0: keep the attribution if you copy its files elsewhere).
- `voice::models::download` — install a local model, checksum-verified.
- `voice::models::remove` — delete a downloaded model.
- `voice::doctor` — backends, model state, open sessions.

## Reactive triggers

- `voice::transcript` — partial, final, closed and error events of dictation sessions (filter `session_id`).
- `voice::session-started`, `voice::session-stopped` — session lifecycle.
- `voice::model-progress` — download progress, one event per megabyte and a final `done`.

