# Tts Clone

> Speak text aloud in the user's own cloned voice using the local tts-clone binary (Chatterbox via mlx-audio). Use when the user runs "/pst:tts-clone", says "say that in my voice", "read this back in my own voice", "use my cloned voice", or asks for spoken output in a cloned/custom voice rather than a stock one. For stock Kokoro voices and always-on voice modes, use the tts skill instead.

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

---


# TTS Clone - speak in a cloned voice

Speak text aloud with the local `tts-clone` binary, which clones a voice from a
reference recording instead of using Kokoro's stock voice table.

## Speaking

```bash
tts-clone "Your spoken message here"
```

Pass **no** `--voice` flag. The voice is per-user machine configuration, not
something this skill decides — `tts-clone` resolves it from `$PST_CLONE_VOICE`,
then the machine's configured default, then the only installed voice. Hardcoding
a name here would break every user but one, since pst is open source.

Only pass `--voice <name>` when the user explicitly names a voice.

ALWAYS run `tts-clone` via the Bash tool with `run_in_background: true` and **no**
trailing `&`. A trailing `&` is redundant, trips a command-safety prompt, and
fires the completion notification before the audio finishes playing.

## Timing - this is not `tts`

Unlike `tts`, Chatterbox **cannot stream**. It generates a complete file before
any sound plays, so expect roughly:

- **~5s of silence** before playback begins (longer on the first run of a
  session, which loads model weights from disk)
- then playback of the generated audio

Because of that delay, prefer `tts` for running narration and always-on voice
modes. Reach for `tts-clone` when the voice itself is the point.

## When no voice is installed

`tts-clone` exits with `no voices installed` when the user has not set one up. Do
not try to work around it or fall back to `tts` silently. Tell the user they need
a reference recording installed at
`${XDG_CONFIG_HOME:-~/.config}/pst/voices/<name>.wav` with its transcript
alongside as `<name>.txt`, then `tts-clone --set-default <name>`.

Run `tts-clone --voices` to see what is installed.

## Guidelines

- Keep spoken text conversational and natural — it will be spoken aloud.
- Avoid technical syntax, file paths, code snippets, or markdown in spoken text.
  This matters more here than with `tts`: paths come out badly mangled
  (`~/.config/pst` was heard as "IRconfigPress"). Say paths as words, or omit them.
- Say "id" as "eye-dee" (e.g. "click up id" → "click up eye-dee").
- Say "Nutiliti" as "newtility" (a play on "new utility", new-TIL-ih-tee).
- Escape any quotes or special shell characters before passing to the command.
- If the user provides literal text, speak that directly instead of summarizing.
- A voice sample is personal. Never copy a `voices/` file into the repo, quote its
  path into committed code, or share it — the whole point of keeping voices under
  XDG config is that installing pst never means handing over your voice.

