Configuration

Dictare uses a TOML configuration file at:

~/.config/dictare/config.toml

Edit it directly, use the web dashboard at http://localhost:8770/ui, or use the CLI:

dictare config edit    # Open config file in your editor
dictare config list    # Show all options and current values

Audio

[audio]
input_device = ""              # Audio input device (empty = system default)
output_device = ""             # Audio output device (empty = system default)
max_duration = 60              # Max recording duration in seconds
audio_feedback = true          # Enable/disable audio cues
silence_ms = 850               # Silence threshold to stop recording (ms)
headphones_mode = false        # TTS won't pause listening when true

[audio.advanced]
sample_rate = 16000            # Sample rate in Hz (Whisper requires 16000)
channels = 1                   # Number of audio channels
device = ""                    # Audio device name (empty = system default)
pre_buffer_ms = 640            # Audio buffered before speech detection (ms)
min_speech_ms = 150            # Minimum speech duration to process (ms)
transcribing_sound_min_ms = 8000

Per-Event Sound Configuration

[audio.sounds.start]
enabled = true
path = ""                      # Custom sound file (empty = built-in)
volume = 0.3                   # 0.0–1.0
focus_gated = false            # Silent when terminal is focused

[audio.sounds.stop]
enabled = true
volume = 0.3

[audio.sounds.agent_announce]
enabled = true
volume = 0.3                   # TTS announces agent name on switch

Speech-to-Text (STT)

[stt]
model = "large-v3-turbo"       # Model name (see Speech Engines page)
language = "auto"              # Language hint or "auto" for detection
translate = false              # Translate speech to English
hw_accel = true                # Hardware acceleration (CUDA/MLX)

[stt.advanced]
device = "auto"                # auto, cpu, cuda, mlx
compute_type = "int8"          # int8 (fastest), float16, float32 (most accurate)
beam_size = 5                  # Higher = slower but more accurate
hotwords = ""                  # Comma-separated hotwords for better recognition
max_repetitions = 5            # Anti-hallucination: max consecutive repeats

Available models: large-v3-turbo (default, recommended), large-v3, parakeet-v3.

Text-to-Speech (TTS)

[tts]
engine = "say"                 # espeak, say (macOS), piper, kokoro, outetts
language = "en"                # Voice accent
speed = 175                    # Words per minute
voice = ""                     # Engine-specific speaker name

Hotkey

[hotkey]
key = "KEY_RIGHTMETA"          # macOS: Right Cmd. Linux: KEY_SCROLLLOCK
device = ""                    # Keyboard device (empty = auto-detect)
mode_switch_modifier = "KEY_RIGHTALT"  # Hold + hotkey to switch mode

Output

[output]
mode = "agents"                # agents or keyboard
typing_delay_ms = 2            # Delay between keystrokes (keyboard mode)
auto_submit = false            # Automatically submit after transcription
submit_keys = "enter"          # Keyboard mode submit shortcut
newline_keys = "shift+enter"   # Keyboard mode newline shortcut

Client

[client]
url = "http://127.0.0.1:8770/openvip"
clear_on_start = true       # Clear terminal before launching the child process
claim_key = "ctrl+\\"      # Key to claim this session as the active voice target
info_key = "ctrl+]"         # Key to show agent info notification (empty = disabled)

Pipeline

[pipeline]
enabled = true

[pipeline.mute_filter]
enabled = true
confidence_threshold = 0.85
max_scan_words = 10
decay_rate = 0.95

[pipeline.mute_filter.mute_triggers]
"*" = [["ok|okay|mate|buddy", "mute|stop"]]

[pipeline.mute_filter.listen_triggers]
"*" = [["ok|okay|mate|buddy", "listen"]]

[pipeline.submit_filter]
enabled = true
confidence_threshold = 0.85
max_scan_words = 15
decay_rate = 0.95

[pipeline.submit_filter.triggers]
"*" = [["ok|okay", "send|submit"]]

[pipeline.agent_filter]
enabled = true
triggers = ["agent"]
match_threshold = 0.5

Agent Profiles

Define custom agent presets:

[agent_profiles]
default = "claude"
live_dangerously = false

[agent_profiles.claude]
command = ["claude", "--max-turns", "1000"]
continue_args = ["-c"]
live_dangerously_args = ["--dangerously-skip-permissions"]
description = "Claude"

[agent_profiles.codex]
command = ["codex"]
continue_args = ["resume", "--last"]
live_dangerously_args = ["--dangerously-bypass-approvals-and-sandbox"]
description = "OpenAI Codex CLI"

[agent_profiles.aider]
command = ["aider"]
description = "Aider"

Optional Pi profile:

[agent_profiles.pi]
command = ["pi"]
continue_args = ["-c"]
description = "Pi"

See Agents for more on custom agent configuration.

Redaction

Replace sensitive terms in terminal output (useful for demos):

redact = [
    ["my-secret-project", "my-project"],
    ["[email protected]", "[email protected]"],
]

Stats

[stats]
typing_wpm = 40             # WPM baseline for time-saved calculations

Applying Changes

Most config changes take effect after restarting the service:

dictare service restart

The web dashboard applies changes and restarts automatically.