Python Version Compatibility
How do I check my Python version?
How do I check my Python version?
Run the following command:Klaus requires Python 3.11-3.13. On macOS 26, use Python 3.13 specifically to avoid hotkey issues.
Homebrew installed the wrong Python version
Homebrew installed the wrong Python version
If you’re on macOS and the Homebrew formula installed Python 3.14, you can force Python 3.13:
Hotkey Issues
Global hotkeys not working
Global hotkeys not working
Klaus uses two parallel hotkey systems:
- Qt in-app hotkeys - Work when Klaus window is focused (no permissions needed)
- pynput global hotkeys - Work system-wide but require macOS Accessibility permission
- macOS prompts for Accessibility (input monitoring) permission on first launch
- If denied, global hotkeys won’t work, but in-app hotkeys still function
- To grant permission later: System Settings > Privacy & Security > Accessibility > Add your Terminal app
- Press Fn+key (e.g., Fn+F3)
- Enable “Use F1, F2, etc. keys as standard function keys” in System Settings > Keyboard
- Change the toggle key in
~/.klaus/config.toml:
main.py:436-517Push-to-talk key not responding
Push-to-talk key not responding
Check your configuration in For macOS ISO keyboards with shifted-key variants (e.g., ± → §), Klaus automatically maps these. See
~/.klaus/config.toml:main.py:45-99 for the mapping logic.Setup Wizard Issues
Setup wizard keeps appearing
Setup wizard keeps appearing
The setup wizard runs when Reference:
setup_complete = false in config.toml. If you close the wizard without completing all steps, Klaus exits.To skip the wizard (if you’ve already configured manually):Edit ~/.klaus/config.toml and add:config.py:665-667, main.py:322-338API key validation fails
API key validation fails
Klaus validates keys by format (prefix + length), not by live API calls.Expected formats:
- Anthropic: starts with
sk-ant-, minimum length - OpenAI: starts with
sk-, minimum length - Tavily: alphanumeric API key
- macOS: Apple Keychain (auto-migrates from legacy plaintext)
- Windows:
~/.klaus/config.tomlunder[api_keys]
- Environment variables (
ANTHROPIC_API_KEY,OPENAI_API_KEY,TAVILY_API_KEY) - Apple Keychain (macOS only)
~/.klaus/config.toml[api_keys]section
config.py:527-548, secrets_store.pyInput Mode Issues
Voice activation triggering on background noise
Voice activation triggering on background noise
Klaus uses WebRTC VAD with multi-stage filtering. If false triggers occur frequently, tune these settings in Increase
~/.klaus/config.toml:vad_min_rms_dbfs (e.g., to -40.0) to reject quieter background noise.Increase vad_min_voiced_run_frames (e.g., to 8 or 10) to require longer continuous speech.Reference: audio.py:102-155, config.py:62-80Voice activation not detecting speech
Voice activation not detecting speech
If Klaus isn’t picking up your voice:
- Lower sensitivity - Change
vad_sensitivityfrom3to2or1 - Reduce minimum thresholds:
- Check microphone level - Ensure your mic input volume is adequate in system settings
- Use push-to-talk mode - Toggle with the mode button or
toggle_key
audio.py:363-415How do I switch between voice activation and push-to-talk?
How do I switch between voice activation and push-to-talk?
- Default: Voice activation
- Toggle methods:
- Press the toggle key (default
§on macOS,F3on Windows) - Click the mode toggle button in the Klaus UI
- Press the toggle key (default
~/.klaus/config.toml:main.py:519-554Configuration File Issues
Invalid TOML syntax error
Invalid TOML syntax error
If Klaus logs a TOML decode error, your
~/.klaus/config.toml has syntax issues.Common mistakes:- Missing quotes around strings with spaces
- Incorrect escape sequences (use
\\for backslash,\"for quote) - Mismatched brackets
config.py:133-143Settings not persisting after restart
Settings not persisting after restart
Verify that If the file is read-only:Reference:
~/.klaus/config.toml exists and is writable:config.py:17-20Performance Issues
High latency from question to first spoken word
High latency from question to first spoken word
Expected end-to-end latency: 2-4 seconds (STT + Claude + first TTS chunk)If you’re seeing >5 seconds:
- Check network connection - Claude API calls require stable internet
- Router timeout - The query router has a 350ms timeout for LLM classification. Increase if needed:
- Disable query router - For debugging, disable intelligent routing:
README.md:164, config.py:97TTS playback crackling on macOS
TTS playback crackling on macOS
Klaus uses a single persistent
sd.OutputStream per session to avoid CoreAudio latency from repeated stream creation.The VAD mic stream is suspended during TTS playback with suspend_stream() and resumed afterward.If crackling persists:- Check system audio settings for sample rate mismatches
- Ensure no other apps are competing for audio device access
tts.py, audio.py:245-276Cost and API Usage
Unexpected API costs
Unexpected API costs
Typical costs:
- 10 questions: ~$0.05
- 50 questions: ~$0.25
- 100 questions/day: ~3.50/day
- Use a cheaper model in
config.toml(requires manual edit, not in settings UI): - STT is free (runs locally via Moonshine)
- TTS costs $0.015/min of generated audio
README.md:166-172, config.py:180Database and Session Issues
How do I reset all sessions and start fresh?
How do I reset all sessions and start fresh?
Delete the SQLite database:Klaus will recreate it on next launch with a fresh “Untitled Session”.Note: Images are not stored; only a short hash of each page capture is kept.Reference:
README.md:272-278, config.py:19Session history not loading
Session history not loading
Check if the database file exists and is readable:If corrupted, rename the old database and let Klaus create a new one:Reference:
memory.py