Skip to main content

TermVoice

TermVoice turns speech into reviewed prompts for terminal AI agents. Recording and transcription happen locally; the prompt only leaves your computer when you approve it and dispatch it to an agent.

Alpha software. TermVoice never evaluates a transcript as a shell command, but an approved prompt can still cause an AI agent to take actions allowed by that agent's permissions. Read the transcript before sending it.

Why TermVoice

  • Push-to-talk input without leaving the terminal
  • Local transcription with faster-whisper
  • Review or edit every prompt before it is sent
  • Direct Codex launch, clipboard, and stdout targets
  • Automatic deletion of temporary microphone recordings
  • Multilingual auto-detection and configurable Whisper models
  • No TermVoice account, server, telemetry, or API key

How it works

microphone -> temporary WAV -> local Whisper -> review/edit -> Codex
                                                    |------> clipboard
                                                    |------> stdout

The first use of a named model downloads its weights. After the model is cached, speech recognition runs locally. If you dispatch to Codex or another hosted agent, the approved text prompt is still sent according to that product's privacy and data policies. TermVoice does not send the audio recording.

Install

TermVoice requires Python 3.9 or newer. On macOS, PortAudio is recommended:

brew install portaudio
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install termvoice
termvoice doctor

To install the latest development version from a clone, replace the package installation command with python -m pip install -e ..

Linux users may need their distribution's PortAudio package before installing. Windows users can normally install the Python dependencies directly.

The initial install includes faster-whisper, which downloads a selected model on first use. The default base model balances speed and accuracy. Use a larger model for accuracy or a smaller model for lower latency.

Use

From a normal shell prompt:

termvoice

Speak, press Enter, review the transcript, and press Enter again to start Codex with that prompt.

To dictate into a Codex session that is already open, copy the reviewed text and paste it into the session:

termvoice --target clipboard

To print only the approved prompt:

termvoice --target stdout

To transcribe an existing recording:

termvoice --audio ./prompt.m4a --target stdout

Useful options:

--model small          choose a model name or local model directory
--language en          skip automatic language detection
--device cpu|cuda      choose the inference device
--compute-type int8    trade precision for speed and memory
--editor "code --wait" choose the transcript editor
--input-device 2       choose a microphone by sounddevice index or name
--keep-audio           retain a newly recorded WAV file
--yes                  bypass review (not recommended)

Defaults can also be set with TERMVOICE_TARGET, TERMVOICE_MODEL, TERMVOICE_LANGUAGE, TERMVOICE_DEVICE, TERMVOICE_COMPUTE_TYPE, and TERMVOICE_INPUT_DEVICE.

Privacy and safety

  • New microphone recordings use a temporary WAV file and are deleted after transcription unless --keep-audio is supplied.
  • Audio is processed by the local faster-whisper runtime. Model weights may be downloaded on first use.
  • TermVoice has no network or telemetry code of its own.
  • The review screen is enabled by default.
  • Prompts are passed to Codex as a process argument, never through shell=True.
  • --target clipboard copies text but does not submit it anywhere.

Avoid --yes when dispatching directly to an agent. Speech recognition can mishear filenames, destructive verbs, numbers, and negations.

Development

The core workflow is dependency-injected, so tests do not need a microphone, model download, or Codex installation.

PYTHONPATH=src python -m unittest discover -s tests -v
python -m compileall -q src tests

See CONTRIBUTING.md and docs/architecture.md.

Releasing

Releases use PyPI Trusted Publishing and do not store a long-lived PyPI token in GitHub. Publishing a GitHub release builds the source and wheel distributions, then uploads them from the publish.yml workflow through the protected pypi environment.

Roadmap

  • Streaming partial transcripts
  • Apple Silicon MLX backend
  • whisper.cpp backend
  • Configurable developer vocabulary and repository context
  • Terminal-emulator hotkey recipes
  • Additional agent adapters
  • Signed packages and release automation

License

MIT. See LICENSE.

Release files for termvoice 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for termvoice 0.1.0
File Size Uploaded
termvoice-0.1.0.tar.gz 13.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for termvoice 0.1.0
File Interpreter ABI Platform
termvoice-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 26.6 kB

Release files / termvoice-0.1.0.tar.gz

Download URL termvoice-0.1.0.tar.gz
Size 13.8 kB
Tags Source
SHA-256 checksum
How to use checksums
7d6a3dae4677aa6c1fcb493a15db459607e1502977f2cc6f2fb38be52c75cc70
BLAKE2b-256 checksum
How to use checksums
82ba82cdc4420a6e078edff45bcacad1acc8b49396c29c086492c9fba5dcb32b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 15, 2026.

Transparency log

Release files / termvoice-0.1.0-py3-none-any.whl

Download URL termvoice-0.1.0-py3-none-any.whl
Size 12.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
11439dd81ca9e1576ed0bfaa3e052fc7dbac6065edeb79304ce0da2e8e8c6223
BLAKE2b-256 checksum
How to use checksums
979c8066668b08aaaf6575b51b34f9895a1b349648c4ed0c796c826e4afa4e51
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 15, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page