{
  "markdown": "# voxtral-tts\n\nA Claude Code skill that converts text to speech using Mistral's Voxtral model, then delivers the audio as a voice note over Discord or Telegram (or hands back a local file path). Triggered by an explicit `--voice` flag or phrases like \"read that to me.\"\n\n## Highlights\n\n- **Cheap** — $0.016 per 1,000 characters, roughly $0.003 for a short reply and $0.16 for a full 10,000-character article\n- **Fast** — ~70ms latency for a 500-character response\n- **8 voices** — margaret, nick, angele, sanchit, gustavo, khyathi, yassir, patrick, spanning several accents and genders; defaults to margaret\n- **Markdown-aware** — `--strip-md` cleans agent output before speaking it, `--truncate` caps overly long input\n- **Channel delivery built in** — pairs with the `message` tool to send generated audio straight to a Discord channel or Telegram chat\n\n## Getting Started\n\n### Prerequisites\n\n- Python with [`uv`](https://docs.astral.sh/uv/) installed\n- A `MISTRAL_API_KEY` environment variable (the script exits with an error if it's unset)\n\n### Installation\n\n#### From the mackayi marketplace (recommended)\n\n```\n/plugin marketplace add keithmackay/mackayi\n/plugin install voxtral-tts@mackayi\n```\n\n#### Claude Code\n\n```bash\ncp -r /path/to/voxtral-tts/ ~/.claude/skills/voxtral-tts/\n```\n\nOr symlink:\n```bash\nln -s /path/to/voxtral-tts/ ~/.claude/skills/voxtral-tts\n```\n\nThen invoke with: `/voxtral-tts`\n\n#### Codex\n\nPlace the plugin directory where Codex can find it, then add an entry to your marketplace:\n\n**`~/.agents/plugins/marketplace.json`** (create if absent):\n```json\n{\n  \"name\": \"personal\",\n  \"interface\": { \"displayName\": \"Personal Plugins\" },\n  \"plugins\": [\n    {\n      \"name\": \"voxtral-tts\",\n      \"source\": { \"source\": \"local\", \"path\": \"/path/to/voxtral-tts/\" },\n      \"policy\": { \"installation\": \"AVAILABLE\", \"authentication\": \"ON_INSTALL\" },\n      \"category\": \"Productivity\"\n    }\n  ]\n}\n```\n\n#### Antigravity\n\n**Global install** (all workspaces):\n```bash\ncp -r /path/to/voxtral-tts/ ~/.gemini/antigravity/skills/voxtral-tts/\n```\n\n**Workspace install** (current project only):\n```bash\ncp -r /path/to/voxtral-tts/ .agents/skills/voxtral-tts/\n```\n\nThe source skill has Claude Code-specific metadata (`metadata.openclaw`), so use the `antigravity/SKILL.md` version instead of the root `SKILL.md`.\n\nSkills are auto-discovered. You can also mention the skill by name to force activation.\n\n#### Gemini CLI\n\nGemini CLI installs extensions directly from GitHub:\n\n```bash\ngemini extensions install https://github.com/keithmackay/voxtral-tts\n```\n\nTo update:\n```bash\ngemini extensions update voxtral-tts\n```\n\nThe skill is auto-discovered from `GEMINI.md` after installation.\n\n## Compatibility\n\n| Feature | Claude Code | Codex | Antigravity | Gemini CLI |\n|---------|:-----------:|:-----:|:-----------:|:----------:|\n| Core skill | ✅ | ✅ | ✅ | ✅ |\n| `metadata.openclaw` (emoji, required env) | ✅ | ❌ | ❌ | ❌ |\n\nLegend: ✅ Supported · ❌ Not supported\n\n## References\n\n- **Claude Code Skills:** https://code.claude.com/docs/en/skills\n- **Claude Code Complete Guide (PDF):** https://resources.anthropic.com/hubfs/The-Complete-Guide-to-Building-Skill-for-Claude.pdf\n- **Codex Plugins:** https://developers.openai.com/codex/plugins/build\n- **Antigravity Skills:** https://antigravity.google/docs/skills\n- **Gemini CLI Extensions:** https://github.com/google-gemini/gemini-cli/blob/main/docs/extension.md\n- **Agent Skills open standard:** https://agentskills.io/home\n\n## Usage\n\n```bash\n# Generate and get file path (prints path to stdout)\nuv run scripts/voxtral \"Hello, Keith.\"\n\n# Choose a voice\nuv run scripts/voxtral -v nick \"Here's your summary.\"\n\n# Save to a specific path\nuv run scripts/voxtral -v margaret -o /tmp/reply.mp3 \"Your briefing is ready.\"\n\n# Strip markdown from AI agent output before speaking\nuv run scripts/voxtral --strip-md -v nick \"**Summary:** task complete.\"\n\n# Pipe from stdin, truncate if too long\necho \"$LONG_OUTPUT\" | uv run scripts/voxtral --strip-md --truncate -v nick\n\n# Preview cost, output path, and voice without generating, writing, or sending anything\nuv run scripts/voxtral --dry-run -v nick \"Here's your summary.\"\n```\n\nSend the result as a voice note:\n\n```bash\n# Discord\nFILE=$(uv run scripts/voxtral -v nick \"Response text here\")\nmessage channel:discord action:send to:\"channel:<channelId>\" media:\"file://$FILE\"\n\n# Telegram\nFILE=$(uv run scripts/voxtral -v nick \"Response text here\")\nmessage channel:telegram action:send to:\"<chatId>\" media:\"file://$FILE\"\n```\n\nWhen a coding agent sees a `--voice` flag or a request to \"send as voice note,\" it strips markdown, truncates if needed, generates the audio, and sends it to the originating channel automatically. Add `--dry-run` (e.g. `--voice --dry-run`) to preview the estimated cost, output path, and destination channel without generating audio, writing a file, or sending anything.\n\n```\n/voxtral-tts --help    # print usage summary, take no other action\n```\n\n> [!NOTE]\n> If Voxtral requests start returning 404s, the model name may have changed — check `GET https://api.mistral.ai/v1/models`.\n\n## Contributing\n\nPull requests are welcome — fork the repo, make your change, and open a PR describing what it does and why.\n\n## Changelog\n\nSee [CHANGELOG.md](CHANGELOG.md) for release history.\n\n## License\n\n[MIT](LICENSE)\n",
  "bytes": 5302,
  "sha": "4401731e95abe40af32ef2dbc46ab403e1d60ec9b709bb4118d60a6cd85aa558",
  "repo_slug": "keithmackay/voxtral-tts",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_keithmackay_voxtral_tts_d4fe651c/readme"
}