- Add SystemPrompt field to HushConfig (empty = built-in default) - Refactor ConfigManager: extract ApplyTomlFields, add LoadWithProfile(), ListProfiles(), GetProfilePath(), EnsureProfilesDirExists(); remove HUSH_PROFILE env-var logic (profiles are now resolved by the CLI) - Extend socket protocol: action commands (START/STOP/TOGGLE/ABORT) now carry a [4-byte LE length][optional HushConfig JSON] payload so the CLI can pass a per-invocation config override without restarting the daemon - Add GENERATE_PROFILE (cmd 7) socket command: CLI sends a description, daemon calls the LLM and returns a generated system prompt - Orchestrator: StopAndProcessAsync accepts optional HushConfig override; ProcessWithLlmAsync uses proper system/user chat roles and respects config.SystemPrompt; add GenerateProfilePromptAsync - Split CompleteTextAsync signature to (systemPrompt, userMessage, model) across ITextStreamingProvider, GroqProvider, FireworksProvider - Add --profile/-p flag to hush toggle and hush stop - Add hush profiles subcommand: list, get, new (manual or AI-generated), edit
Hush
A Linux speech-to-text daemon that records audio, transcribes it via the Groq Whisper API, optionally cleans up the text with an LLM, and types the result into whatever window currently has focus.
The intended workflow: bind hush toggle to a global hotkey, press to start recording, press again to stop, and the transcribed text appears in your active application.
Requirements
Runtime dependencies:
- pw-record (PipeWire) or
ffmpeg(PulseAudio) — audio capture - wtype (Wayland) or xdotool (X11) — text injection
notify-send— desktop notifications- A Groq API key
Build dependencies:
Installation
sudo ./install.sh
This builds the project, installs the hush binary to /usr/bin/hush, sets up zsh tab-completion, and registers hush.service as a systemd (or OpenRC) user service.
To uninstall:
sudo ./uninstall.sh
Setup
After installing, run the interactive setup wizard to configure your API key and preferences:
hush setup
Config is stored at ~/.config/hush/config in TOML format.
Commands
| Command | Description |
|---|---|
hush toggle |
Start recording if idle, stop and transcribe if recording |
hush start |
Start recording |
hush stop |
Stop recording and transcribe |
hush abort |
Discard the current recording |
hush status |
Show daemon state and recording duration |
hush show |
Show current configuration |
hush latency-test |
Measure STT and LLM round-trip latency |
hush daemon |
Run the daemon in the foreground |
hush setup |
Interactive configuration wizard |
Building Manually
./build.sh
Produces a native AOT binary at Hush.Cli/bin/Release/net10.0/linux-x64/publish/Hush.Cli.
Configuration
Key settings in ~/.config/hush/config:
| Key | Default | Description |
|---|---|---|
groq_api_key |
Groq API key | |
whisper_model |
whisper-large-v3-turbo |
Whisper model to use |
llm_model |
openai/gpt-oss-20b |
LLM model for text cleanup |
audio_backend |
pw-record |
pw-record or ffmpeg |
typing_backend |
wtype |
wtype or xdotool |
whisper_language |
Optional ISO 639-1 language code | |
min_recording_duration |
500 |
Minimum recording length in ms |