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-audiois supplied. - Audio is processed by the local
faster-whisperruntime. 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 clipboardcopies 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.cppbackend- 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)
| File | Size | Uploaded | |
|---|---|---|---|
| termvoice-0.1.0.tar.gz | 13.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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