Inbound foreign language messages get a followup auto-translation message sent to you, using Beeper Desktop and LM Studio.
BabelClaw is a language-aware Beeper bridge that uses local LM Studio inference to translate inbound messages and forward translated output to Discord through OpenClaw.
- Watches Beeper Desktop API for new inbound messages
- Filters chats with guardrails (muted chats, ignored networks, ignored chat IDs/title patterns)
- Uses fail-safe muted filtering: excludes muted chats at API query time and drops messages when chat metadata cannot be resolved (configurable)
- Classifies/translates with LM Studio (configurable FROM/TO language)
- Applies local English-vs-Spanish heuristics before LLM calls to reduce false-positive translations
- Sends translated messages to Discord via
openclaw message send - Uses 24h dedupe state to avoid duplicates
- Runs as a macOS launchd daemon
- uv
- Beeper Desktop with Desktop API enabled
- LM Studio local server (OpenAI-compatible API)
- OpenClaw CLI configured with Discord access
- macOS (only required if you want launchd/LaunchAgent auto-start)
uv run --script babelclaw-daemon.py installThis will:
- prompt for Beeper token
- prompt for LM Studio model (uses
lmsif available) - write config to
~/.config/babelclaw-daemon/config.json - reset state for safe first run
- on macOS: write/load
~/Library/LaunchAgents/com.mattwiebe.babelclaw-daemon.plist - on non-macOS: skip launchd and print the
uv run --script ... run --verbosecommand to start manually
uv run --script babelclaw-daemon.py run --verboseTrace decisions in detail:
uv run --script babelclaw-daemon.py run --verbose --traceOne pass only:
uv run --script babelclaw-daemon.py once --verboseRestart launchd service (macOS):
uv run --script babelclaw-daemon.py restartuv run --script babelclaw-daemon.py uninstallOptionally remove local files too:
uv run --script babelclaw-daemon.py uninstall --delete-config --delete-stateMIT