signal-cli (handles the Signal protocol) and signal-bot (Python app calling Vaquill) - communicate over a local WebSocket. Source code at github.com/Vaquill-AI/integrations/signal-bot.
Features
- Plain-text Q&A via the Vaquill
/askAPI - Per-chat conversation history
- Slash-like commands:
help,examples,stats,clear - Runs entirely inside a local Docker network - no public URL required
Prerequisites
- Docker and Docker Compose
- A phone number you control for Signal registration (or an existing Signal account you can link as a secondary device)
- Vaquill API key (
vq_key_...). See Authentication.
Platform setup
You need to either register a fresh phone number with Signal, or link the bot as a secondary device on an existing Signal account.Option A: Register a fresh number (primary device)
1
Start signal-cli
2
Request a verification code
3
Submit the SMS code
Option B: Link as a secondary device
This keeps your existing Signal phone active and avoids re-registering a number:The registration is tied to the
signal-cli Docker volume. Back it up - losing the volume means re-registering and a new Signal safety number.Quickstart
1
Clone
2
Configure
3
Run
4
Verify
Configuration
See
.env.example for the full list.
Commands
Any other text is treated as a legal question and routed to Vaquill.
Deployment
Docker Compose (recommended)
Deploy both services on the same Docker network. Thesignal-cli service needs a persistent volume mounted at /home/.local/share/signal-cli to retain the registration.
Dokploy / self-hosted
Deploy as two separate applications in the same project:- signal-cli: Docker image
bbernhard/signal-cli-rest-api, envMODE=json-rpc, persistent volume on/home/.local/share/signal-cli. - signal-bot: Build from the Dockerfile in
signal-bot/, env vars from.env.
Risks to plan for
- No official Signal bot API - this is an unofficial integration.
- Account ban risk if Signal detects automated behavior. Keep volume low and ideally use a dedicated number.
- Protocol breakage - signal-cli updates can break on Signal protocol changes. Pin image versions (
bbernhard/signal-cli-rest-api:0.92) in production rather thanlatest. - Volume backups - the phone-number registration is tied to the persistent volume. Back it up regularly.
Troubleshooting
Related
The official Business API path.
Telegram
Lightest setup, no Docker required.
Chatbots overview
Compare all six platforms.
Authentication
How Vaquill API keys work.

