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.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file termvoice-0.1.0.tar.gz.
File metadata
- Download URL: termvoice-0.1.0.tar.gz
- Upload date:
- Size: 13.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d6a3dae4677aa6c1fcb493a15db459607e1502977f2cc6f2fb38be52c75cc70
|
|
| MD5 |
bc8bf3690e069b9ca7141d8d98f6097e
|
|
| BLAKE2b-256 |
82ba82cdc4420a6e078edff45bcacad1acc8b49396c29c086492c9fba5dcb32b
|
Provenance
The following attestation bundles were made for termvoice-0.1.0.tar.gz:
Publisher:
publish.yml on saivarun1410/termvoice
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
termvoice-0.1.0.tar.gz -
Subject digest:
7d6a3dae4677aa6c1fcb493a15db459607e1502977f2cc6f2fb38be52c75cc70 - Sigstore transparency entry: 2475690995
- Sigstore integration time:
-
Permalink:
saivarun1410/termvoice@3bd114788e2f36fccc4a534ce7c9e4052648b91e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/saivarun1410
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3bd114788e2f36fccc4a534ce7c9e4052648b91e -
Trigger Event:
release
-
Statement type:
File details
Details for the file termvoice-0.1.0-py3-none-any.whl.
File metadata
- Download URL: termvoice-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
11439dd81ca9e1576ed0bfaa3e052fc7dbac6065edeb79304ce0da2e8e8c6223
|
|
| MD5 |
9d205417c6ae243e8fde95b96aa653e7
|
|
| BLAKE2b-256 |
979c8066668b08aaaf6575b51b34f9895a1b349648c4ed0c796c826e4afa4e51
|
Provenance
The following attestation bundles were made for termvoice-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on saivarun1410/termvoice
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
termvoice-0.1.0-py3-none-any.whl -
Subject digest:
11439dd81ca9e1576ed0bfaa3e052fc7dbac6065edeb79304ce0da2e8e8c6223 - Sigstore transparency entry: 2475691043
- Sigstore integration time:
-
Permalink:
saivarun1410/termvoice@3bd114788e2f36fccc4a534ce7c9e4052648b91e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/saivarun1410
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3bd114788e2f36fccc4a534ce7c9e4052648b91e -
Trigger Event:
release
-
Statement type: