tomi eb0619dea2 add configuration profiles with per-invocation --profile flag
- 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
2026-03-23 00:38:29 +01:00
2026-03-22 02:25:16 +01:00
2026-03-22 02:25:16 +01:00
2026-03-22 02:25:16 +01:00
2026-03-22 02:25:16 +01:00
2026-03-22 02:25:16 +01:00
2026-03-22 02:25:16 +01:00
2026-03-22 02:25:16 +01:00
2026-03-22 02:35:36 +01:00
2026-03-22 02:25:16 +01:00

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
S
Description
No description provided
Readme 94 KiB
Languages
C# 87.8%
Shell 12.2%