
I built xSignalBot: an auto-reply bot for Signal that answers with a local LLM via Ollama — zero cloud, zero cost
Disclaimer: I'm the developer of this project — sharing because it might be useful to others running self-hosted AI. (Full transparency, as Reddit's self-promo etiquette expects.)
xSignalBot is an open-source auto-reply bot for Signal that answers incoming messages using a local LLM via Ollama — no cloud APIs, no costs, and no message ever leaves your machine.
How it works
Signal message → signal-cli (WSL2 daemon) → Python bridge → Ollama (qwen2.5:14b locally) → auto-send / approval → reply shown in desktop app + phone
- signal-cli runs as a persistent JSON-RPC daemon in WSL2 (no polling, no JVM restart per message)
- Ollama (qwen2.5:14b) generates the reply locally — works fully offline
- Replies sync to all your Signal devices (desktop app + phone), so you always see what the bot sent
Features
- 🤖 7 reply tones: Standard, Sad, Cheerful, Reserved, Funny, Silly (long), Financial Advisor — each with fitting emojis
- 🧠 Per-contact chat history (last 100 messages as context) — the bot remembers the conversation
- ⏱️ Auto-send (3 s countdown) or manual approval — your choice
- 🛡️ Whitelist-only: replies go ONLY to contacts you explicitly allow
- 🧪 Test mode that never actually sends
- 💬 Typing indicator ("… is typing") while generating
- 🖥️ Tkinter control panel: manage whitelist, pick tones, health check, single-instance protection
- 📈 Optional "Financial Advisor" tone that gives gloriously absurd market advice (Bitcoin hamsters included 🐿️📈)
Tech stack
- Messaging: signal-cli 0.14.7 (WSL2 daemon, JSON-RPC)
- AI: Ollama + qwen2.5:14b (local, free)
- UI: Python 3 / Tkinter
- Platform: Windows + WSL2
Links
- GitHub: https://github.com/immerzu/xSignalBot (MIT license)
- README with full setup instructions: WSL2 + signal-cli linking (QR code), Ollama install, config (whitelist, tones)
Why I built it
I wanted a free, private auto-responder for Signal that runs entirely on my own hardware — no cloud AI, no per-message costs, full control over who gets answered. It's been running stable for me, so I'm sharing it in case others find it useful.
Feedback, issues, and PRs welcome! 🙌