bitvoker is a notification system that receives raw messages over TCP, filters and processes them through customizable rules and optional AI, then delivers them to over 100 destinations including Slack, Discord, Telegram, Microsoft Teams, Email, and more via Apprise.
bitvoker turns raw text into targeted, intelligent alerts. Send it logs, text, or any data, and configure rules to control exactly what happens. With regex matching and AI processing, here are some examples:
-
Security logs from
web-gateway-03containFailed login attemptfor useradminfrom an IP outside192.168.1.0/24, use a local LLM to identify the attack origin and recommend action, then send only the AI summary to the SOC team's Slack channel. -
A scraped product page contains
Sony WH-1000XM5with a discount over 15%, extract the current price, original price, and buy link using AI, then send the deal to a Telegram chat. -
Database logs from
db-prod-01showlong_query_thresholdexceeded over1000ms, summarize the impact using Meta's LLAMA4, send both the summary and the original log (only if it contains an IP starting with10.0.0.) to the DBA team's Microsoft Teams channel and email inbox.
- Multi-platform support: notifications for
and many more thanks to Apprise integration.
- AI Processing: refine messages using customizable pre-prompts with Meta's LLAMA4 or self-hosted Ollama
- Flexible Rule System: regex matching, source filtering, and per-rule AI and destination control
- Web Dashboard: modern interface for configuration, notification history, and log viewing
- Authentication: optional login for the web UI and token verification for TCP messages
- Dynamic Configuration: update settings and rules without restarting the server
- Notification History: browse and filter past notifications with timestamps and source info
bitvoker can optionally process messages with AI before delivery:
- Meta LLAMA4 (default): free cloud-based processing via meta.ai, subject to rate limits
- Ollama: self-hosted local processing via ollama.com, recommended for privacy and reliability
Define pre-prompts in your rules to control how AI processes each message. See the wiki for the full rule reference.
Tip
If you experience rate limits with Meta's service, switch to Ollama or reduce AI queries. A compact model like gemma3:1b works well even on limited hardware.
services:
bitvoker:
image: ghcr.io/rmfatemi/bitvoker:latest
container_name: bitvoker
# host mode recommended (see wiki for details)
network_mode: host
# for bridge mode, comment out the line above and uncomment below
# ports:
# - "8083:8083" # TCP server
# - "8084:8084" # TLS server
# - "8085:8085" # Web UI HTTPS
# - "8086:8086" # Web UI HTTP
volumes:
- bitvoker_data:/app/data
- /etc/localtime:/etc/localtime:ro
environment:
# Optional: uncomment to enable web UI login
# - BITVOKER_USERNAME=admin
# - BITVOKER_PASSWORD=changeme
restart: unless-stopped
volumes:
bitvoker_data:
name: bitvoker_datadocker-compose up -dRequires Python 3.11+ and GNU Make.
git clone https://github.com/rmfatemi/bitvoker.git
cd bitvoker
make install
make runSet BITVOKER_USERNAME and BITVOKER_PASSWORD environment variables to enable login for the web UI. When not set, the UI is accessible without authentication.
For TCP messages, optionally configure a message_token in the settings to require authentication:
Without token authentication (default, if message_token is not set):
echo "your message" | nc {server_ip} 8083
With token authentication (if message_token is configured in settings):
echo "TOKEN:your_secret_token:your message" | nc {server_ip} 8083
Messages without the correct token prefix will be rejected when token authentication is enabled.
Send messages to bitvoker over TCP using plaintext (port 8083) or TLS (port 8084).
echo "your notification" | nc {server_ip} 8083echo "your notification" | openssl s_client -connect {server_ip}:8084import socket, ssl
context = ssl.create_default_context()
with socket.create_connection(("{server_ip}", 8084)) as sock:
with context.wrap_socket(sock, server_hostname="{server_ip}") as s:
s.sendall(b"your notification")Tip
If you're not comfortable with YAML and regular expressions, any AI model can help you create your rules — just provide it with the rule reference from the wiki and describe what you need.
Access the web UI at https://{server_ip}:8085 (or http on port 8086) to configure destinations, rules, AI settings, and view notification history and logs.
This project is licensed under the MIT License - see the LICENSE file for details.