Speech Swift is a collection of Apple Silicon speech tools for recognizing, generating, transforming, and analyzing audio locally with MLX Swift and CoreML. It is for Mac and iOS applications that need on-device speech features such as transcription, voice agents, synthesis, and speaker identification; the catalogue entries provide instructions and skills for using it.
Getting it into your agent
It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.
git clone --depth 1 https://github.com/soniqo/speech-swiftnpx agentmods add skills/soniqo/speech-swift/benchmarkWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/soniqo/speech-swift/benchmark)<a href="https://agentmods.dev/skills/soniqo/speech-swift/benchmark"><img src="https://agentmods.dev/badge/skills/soniqo/speech-swift/benchmark/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/soniqo/speech-swift/benchmark"><img src="https://agentmods.dev/badge/skills/soniqo/speech-swift/benchmark.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector warn
SkillSpector: 1 finding, up to medium
These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →
- medium analysis-evasion · line 1 Suspicious Unicode normalization or mixed-script contentFix: Review the flagged content for security risks. Ensure no credentials, secrets, or sensitive data are exposed.
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00000 | $0.01254 |
| Opus 5.5 | $0.00000 | $0.00502 |
| Sonnet 5.5 | $0.00000 | $0.00251 |
| Haiku 4.5 | $0.00000 | $0.00125 |
Grade A, and why
benchmark scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 120 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Benchmark
Run benchmarks using the release build. Build first with /build.
Usage
/benchmark asr— full WER + RTF + peakRSS + throughput on a labeled dataset (LibriSpeech-style dir or.tsvmanifest). Extra args pass through toasr-bench. RequiresBENCH_DATASETenv var or--dataset <path>in the trailing args./benchmark asr-quick— single-file RTF smoke test (no WER, no dataset required). Equivalent to the oldasrbehavior./benchmark tts— synthesize test text, report RTF/benchmark vad— VAD on VoxConverse (all engines)/benchmark diarize— DER on VoxConverse (requires downloaded test set)
Examples
Compare our MLX quantizations on LibriSpeech test-clean (WER + RTF + peakRSS, each engine isolated in its own process so RSS reflects per-engine cost):
BENCH_DATASET=$HOME/datasets/LibriSpeech/test-clean /benchmark asr \
--engines qwen3-mlx-0.6b-4bit qwen3-mlx-0.6b-8bit \
--isolated --limit 50
Default engine set (qwen3-coreml + parakeet + whisperkit) on a TSV manifest:
/benchmark asr --dataset bench.tsv --limit 100 --output /tmp/run.json
module="$1"
shift || true
cli=".build/release/speech"
bench=".build/release/asr-bench"
case "$module" in
asr)
if [ ! -x "$bench" ]; then
echo "asr-bench binary missing — run /build first (release)." >&2
exit 1
fi
# Honor BENCH_DATASET if --dataset isn't already in the trailing args.
has_dataset=0
for a in "$@"; do
if [ "$a" = "--dataset" ]; then has_dataset=1; break; fi
done
if [ "$has_dataset" = "0" ] && [ -n "$BENCH_DATASET" ]; then
set -- --dataset "$BENCH_DATASET" "$@"
fi
"$bench" "$@" 2>&1
;;
asr-quick)
$cli transcribe Tests/Qwen3ASRTests/Resources/test_audio.wav 2>&1
;;
tts)
$cli speak "The quick brown fox jumps over the lazy dog." --output /tmp/bench_tts.wav 2>&1
;;
vad)
python3 scripts/benchmark_vad.py --compare --num-files 5 2>&1
;;
diarize)
python3 scripts/benchmark_diarization.py --num-files 5 2>&1
;;
*)
echo "Usage: /benchmark [asr|asr-quick|tts|vad|diarize] [args...]"
echo " asr — full WER + RTF + peakRSS via asr-bench (needs dataset)"
echo " asr-quick — single-file RTF smoke test (no dataset)"
;;
esac
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 5d ago Changed · +1 lines cbbf8090a253
- 1mo ago First seen · 119 lines · 0 tokens per session scan A ea26a24f6d40
benchmark is a skill published in the GitHub repository soniqo/speech-swift (1,244 stars, last pushed yesterday), licensed Apache-2.0. It costs nothing until one of its globs matches a file; then it loads 1,254 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
vocello-design
Historical Vocello 2.0 prototype reference only; not a current production skill or acceptance source.
kesha-voice-kit
Local multilingual voice toolkit — speech-to-text (STT), text-to-speech (TTS), speaker diarization, and language detection, over a CLI or an MCP server. Runs entirely offline on Apple Silicon, Linux, and Windows. No API keys, no cloud. NVIDIA Parakeet TDT for STT across 25 European languages, Kokoro-82M + Vosk-TTS for…
localvoxtral-doctor
Use when the user's localvoxtral dictation misbehaves, for example a dictation did not join this session, its text was not inserted, or speech or polish failed. Names the localvoxtral commands that check the setup and read the app's log.
vox-voice-alerts
Speak a short spoken alert to the user via the vox text-to-speech CLI whenever you hand the turn back to them — a task finished (pass or fail, however long it took), you're blocked and need input/a decision/approval, something broke, or you're about to go quiet on a long job. Assume the user is NOT watching the…
apple-container
Build, run, and manage OCI/Linux containers as lightweight per-container VMs on Apple-silicon macOS using Apple's open-source container CLI, no Docker daemon required.
add-new-model
Use this skill when the user wants to add or port a new model architecture to MLX-VLM — mapping a Hugging Face modeltype to a new file under mlxvlm/models, writing the ModelConfig, matching layer/weight names, reusing a similar existing model, adding a test class, and validating the port. Covers vision-language…