Always-on local agent for the OpenClaw ecosystem.
Klatsch runs on each of your machines (Windows or Linux/Pi) and gives OpenClaw eyes and ears on that host:
- ποΈ Voice assistant β wake-word detection, Whisper STT, edge-TTS, German/English
- π Notification hub β receive push messages from the gateway and speak them aloud
- π‘ Peer coordinator β Follow-Me routing: whoever is closest to the mic answers
- π₯οΈ System awareness β processes, CPU/RAM, disk health, screenshot, clipboard
- πΎ Inventory proxy β exposes local disks and Git repos via HTTP
- β° Reminders β schedule spoken reminders by voice
- π’ Intercom + broadcast β speak to one peer or all peers at once
- π Morning briefing β daily 06β09 h gateway briefing (date, weather, agenda)
- π€ Ollama integration β "frag Ollama β¦" routes to a local LLM
The name is German for both "clap" and "gossip" β because when it works, you clap, and it always knows what's going on. π
- Python 3.11+
- FFmpeg (for edge-tts audio decode):
winget install ffmpeg - An OpenClaw gateway running somewhere on the network
# Clone
git clone https://github.com/donapart/klatsch.git
cd klatsch
# Create venv + install deps
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txtOr run the one-shot setup script (Windows, auto-creates a startup shortcut):
powershell -ExecutionPolicy Bypass -File setup.ps1All settings are via environment variables (or a .env file):
| Variable | Default | Description |
|---|---|---|
GATEWAY_URL |
http://localhost:18789 |
OpenClaw gateway base URL |
GATEWAY_TOKEN |
opensesame |
Gateway auth token |
AGENT_ID |
main |
Agent ID to route voice commands to |
HOST_NAME |
machine hostname | Displayed in tray and logs |
WAKE_WORDS |
hey klatsch,klatsch |
Comma-separated wake words |
TTS_VOICE |
de-DE-ConradNeural |
edge-tts voice name |
WHISPER_MODEL |
base |
faster-whisper model size (tiny/base/small) |
MIC_THRESHOLD |
0.015 |
Voice activity threshold 0.0β1.0 |
INPUT_DEVICE |
system default | Audio input device index |
OUTPUT_DEVICE |
system default | Audio output device index |
VOLUME |
100 |
TTS playback volume 0β100 |
PEERS |
(empty) | Space-separated peer URLs, e.g. http://other-host:7790 |
SPEAKER_SCORE |
0.5 |
Follow-Me speaker proximity score 0.0β1.0 |
# Normal mode (console)
python klatsch.py
# Background with system tray icon
python klatsch.py --tray
# Discover audio devices
python klatsch.py --list-devices
# Test microphone (5 s recording)
python klatsch.py --test-mic
# Specific devices
python klatsch.py --input-device 3 --output-device 5Each Klatsch instance runs a small HTTP server so peers and external services can interact with it.
| Endpoint | Description |
|---|---|
GET /health |
Status, hostname, presence |
GET /inventory |
Local disks + Git project list |
GET /screenshot |
Screenshot as base64 PNG |
GET /clipboard |
Read clipboard text |
GET /processes |
Top-20 processes by CPU |
GET /syshealth |
CPU%, RAM%, disk usage |
GET /find-file?q=query |
Search files by name |
| Say | Action |
|---|---|
| "Hey Klatsch, β¦" | Wake + command |
| "pause" | Pause current TTS |
| "weiter" | Resume TTS |
| "Klatsch, sag host-b: β¦" | Intercom to peer |
| "sag allen dass β¦" | Broadcast to all peers |
| "ΓΆffne Chrome" | Open application |
| "fokussiere Discord" | Bring window to foreground |
| "Zwischenablage" | Read clipboard aloud |
| "erinnere mich in 10 Minuten an β¦" | Set reminder |
| "Systemstatus" | Speak CPU + RAM |
| "frag Ollama β¦" | Query local LLM |
Right-click any file or use "Send To" to interact with Klatsch directly from Explorer.
powershell -ExecutionPolicy Bypass -File install-context-menu.ps1This adds three right-click entries and a "Send To" shortcut:
| Menu entry | Action |
|---|---|
| Mit Klatsch vorlesen π | Read the file aloud via TTS |
| An Klatsch senden πΎ | Ask the AI agent about the file |
| Mit Klatsch zusammenfassen π | Get an AI summary |
| Send To β Klatsch | Same as "An Klatsch senden" |
powershell -File install-context-menu.ps1 -Uninstallpython klatsch-send.py speak report.txt # read aloud
python klatsch-send.py ask config.yaml # ask agent
python klatsch-send.py summarize meeting.md # summarize
python klatsch-send.py notes.txt # default: askSet PEERS=http://other-host:7790 on every host. When the wake word fires on multiple devices simultaneously, the one closest to the speaker (highest mic amplitude) wins β the others stay silent.
| Package | Feature |
|---|---|
openwakeword |
Lightweight wake-word detection (falls back to Whisper) |
pystray + Pillow |
System tray icon (--tray mode) |
psutil |
GET /processes, GET /syshealth, presence watcher, disk watcher |
pyperclip |
Clipboard read/write |
MIT β see LICENSE.
Built on top of OpenClaw.
POST /speak {"text": "Hello!"} POST /notify {"text": "...", "from": "Bot"} POST /intercom {"text": "...", "from": "HOST-A"} POST /clipboard {"text": "text to set"} POST /open-app {"app": "chrome"} POST /remind {"text": "Stand-up!", "minutes": 15} POST /broadcast {"text": "...", "endpoint": "/notify"} POST /wake-claim (internal Follow-Me protocol)