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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

termvoice-0.1.0.tar.gz (13.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

termvoice-0.1.0-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

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

Hashes for termvoice-0.1.0.tar.gz
Algorithm Hash digest
SHA256 7d6a3dae4677aa6c1fcb493a15db459607e1502977f2cc6f2fb38be52c75cc70
MD5 bc8bf3690e069b9ca7141d8d98f6097e
BLAKE2b-256 82ba82cdc4420a6e078edff45bcacad1acc8b49396c29c086492c9fba5dcb32b

See more details on using hashes here.

Provenance

The following attestation bundles were made for termvoice-0.1.0.tar.gz:

Publisher: publish.yml on saivarun1410/termvoice

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for termvoice-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 11439dd81ca9e1576ed0bfaa3e052fc7dbac6065edeb79304ce0da2e8e8c6223
MD5 9d205417c6ae243e8fde95b96aa653e7
BLAKE2b-256 979c8066668b08aaaf6575b51b34f9895a1b349648c4ed0c796c826e4afa4e51

See more details on using hashes here.

Provenance

The following attestation bundles were made for termvoice-0.1.0-py3-none-any.whl:

Publisher: publish.yml on saivarun1410/termvoice

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page