Repository navigation
Release v1.3.0 — Secure REST API & Service Plugin Architecture
Release Notes
🚀 New Feature: Secure Outbound REST API
This release introduces a secure REST API that allows trusted external systems to send Signal messages through the agent.
New Endpoints
GET /healthPOST /api/v1/send
Example:
{
"to": "+19193280766",
"message": "Hello from REST"
}🔐 Security-First Design
The REST API is built with strong safety controls:
- Bearer token authentication via
token_file - Destination allowlist (
allowed_destinations) — deny-by-default if empty - Optional client IP allowlist
- Rate limiting (
max_requests_per_minute) - Request size limits
- Message length limits
- Optional message chunking
- Strict token file permission enforcement (chmod 600)
The API is disabled by default and must be explicitly enabled in rules.yaml.
🧩 Plugin Architecture Enhancement
This release introduces support for multiple plugin types:
1️⃣ Rule Plugins (existing behavior)
- Triggered by message rules
- Execute commands or integrations
- Continue working unchanged
2️⃣ Service Plugins (new)
- Long-running background services
- Start at agent initialization
- Example: REST API server
This separation improves maintainability and allows future extensions such as:
- Logging sinks
- Metrics exporters
- Webhook emitters
- Event bus integrations
🛠 Improvements & Fixes
- Enforced
allowed_servicesvalidation forhome_assistant_service - Fixed incorrect config key usage for
plugin_http.allowed_hosts - Improved redirect validation against host allowlists
- Structured REST API error responses (400/401/403/413/429)
- Thread-safe message dispatch from REST thread to GLib main loop
⚙️ New Configuration Block
Add to globals:
rest_api:
enabled: true
bind_host: "127.0.0.1"
bind_port: 8787
token_file: "/path/to/rest_api_token"
require_private_token_file: true
allowed_destinations:
- "+19193280766"
allowed_client_ips: ["127.0.0.1"]
max_request_bytes: 32768
max_message_chars: 3500
max_recipients_per_request: 1
split_long_messages: true
chunk_size: 1400
numbered_chunks: true
max_requests_per_minute: 60🔄 Backward Compatibility
- No breaking changes to existing rules
- No changes required to existing
rules.d/configurations - REST API is opt-in and disabled by default
📌 Summary
This release adds a production-ready, secure REST API for outbound messaging and establishes a scalable service plugin architecture for future integrations.
The agent is now ready for controlled external automation and expansion beyond rule-triggered workflows.