Skip to content

Repository files navigation

Cadence Code

CI License: MIT Python 3.11-3.14

A local voice interface for Codex and Claude Code on Apple Silicon. Start Talking, speak naturally, and let your coding agent decide what to say back — no daemon, no cloud, no second language model in the loop. See Cadence Code privacy for the exact local-processing and host handoff boundary.

Requirements

  • Apple Silicon Mac, macOS 14+
  • Python 3.11-3.14 on PATH
  • A working microphone and output device, with mic permission for the host app
  • Internet access for the initial install and selected model downloads
  • ~500 MB-4.5 GB disk space depending on the models you pick (shared with other local Hugging Face apps)

Install

Claude Code

/plugin marketplace add michael-L-i/cadence-code
/plugin install cadence-code@cadence-code-marketplace

Restart Claude Code, then run /cadence-code:start-talking.

Codex (CLI and desktop app; the IDE extension doesn't support plugins yet)

codex plugin marketplace add michael-L-i/cadence-code
codex plugin add cadence-code@cadence-code-marketplace

Start a new Codex session, then run $start-talking (or pick Start Talking from /skills).

On first run Cadence Code shows a quick orientation, starts with Pocket TTS and Parakeet 110M, requests microphone access, and downloads both models automatically. Change either model anytime with /cadence-code:voice-settings (Claude Code) or $voice-settings (Codex).

During a conversation, press Escape and use /cadence-code:jump-in or $jump-in to redirect by voice. Use /cadence-code:wrap-up or $wrap-up to end cleanly and release the local speech models. Saying "stop" or "goodbye" does the same thing.

If Claude Code's voice tools are still connecting on first use, Start Talking finishes the one-time dependency setup and asks you to run /reload-plugins before invoking it again.

To update, re-run the marketplace/plugin update commands for your host, then fully restart it — an already-running MCP process isn't replaced in place.

How it works

Cadence Code runs one lightweight stdio MCP server alongside your coding agent. The agent decides what to say and writes every spoken response; Cadence Code just converts that text to speech and your replies back to text, using local MLX models. Detailed answers stay on screen — voice gets a short, separately composed version, like a coworker giving you the useful part instead of reading a terminal response aloud.

Only one voice conversation can hold the microphone and model memory at a time, enforced by a machine-wide lock so Codex, Claude Code, and dev sessions never collide.

Model choices

TTS model card Tier Language License Download
Pocket TTS 100M Lightweight English CC BY 4.0 236 MB
Kokoro 82M Lightweight English Apache 2.0 389 MB
Chatterbox Turbo 350M Balanced English Apache 2.0 417 MB
Qwen 0.6B Heavy, highest quality English Apache 2.0 1.97 GB
STT model card Tier Language License Download
Moonshine Base 61M Lightweight English MIT 248 MB
Parakeet 110M Balanced English CC BY 4.0 459 MB
Parakeet 0.6B v3 Heavy, highest accuracy 25 languages CC BY 4.0 2.51 GB

TTS is currently English-only. For multilingual transcription, choose Parakeet 0.6B v3. Follow each model card for its upstream license terms.

Configuration

Settings live in config.toml~/.cadence-code for Codex and direct development, or Claude Code's per-plugin data directory. It has [tts], [stt], and [audio] sections for model, voice, speed, endpointing, and device choices; upgrades migrate old configs automatically.

Model weights are cached in Hugging Face's shared cache (~/.cache/huggingface/hub), not Cadence Code's own directory, so switching models keeps the previous one for other local MLX tools to reuse. Clean up manually with:

hf cache scan
hf cache delete --sort size

Troubleshooting

  • No microphone or output: allow mic access for Codex or Claude Code in macOS System Settings > Privacy & Security > Microphone, verify the [audio] device settings, then restart the host.
  • Setup or model download fails: confirm the supported Python version, internet access, and free disk space, then restart the host to retry.
  • Session already in use: stop Cadence Code in every Codex, Claude Code, and dev session — only one process can own the audio session at a time.
  • An update still reports the old version: fully exit every host process that loaded Cadence Code and start a new one.

For a checkout-based diagnosis, run uv run --locked cadence-code doctor or uv run --locked cadence-code listen-test.

Uninstall

Stop every Cadence Code session first.

# Codex
codex plugin remove cadence-code@cadence-code-marketplace
codex plugin marketplace remove cadence-code-marketplace

# Claude Code
claude plugin uninstall cadence-code@cadence-code-marketplace
claude plugin marketplace remove cadence-code-marketplace

Both leave configuration and the private Python environment behind (decline --keep-data in Claude Code to remove them too); delete ~/.cadence-code manually for Codex. Model weights stay in the shared Hugging Face cache — use the cache commands above to remove specific ones.

Development

uv.lock is the source of truth for local development and CI.

uv sync --locked --python 3.13
uv run --locked cadence-code doctor
./dev check    # tests + plugin validation
./dev claude   # local branch test in Claude Code
./dev codex    # local branch test in Codex

See AGENTS.md for the full project map and MCP tool reference, and CONTRIBUTING.md before changing the lock file. CI and release details are in RELEASING.md.

Contributing and support

Contributions are welcome. Use GitHub Discussions for questions and the issue forms for bugs and feature proposals.

Please follow the Code of Conduct. Report security issues privately as described in SECURITY.md.

License

Cadence Code is released under the MIT License.

About

A fully local voice companion for Codex and Claude Code on Apple Silicon — talk to your coding agent instead of typing.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages