Files
clawdbot/docs/signal.md
2026-01-01 15:43:15 +01:00

1.7 KiB

Signal (signal-cli)

Status: external CLI integration only. No libsignal embedding.

Why

  • Signal OSS stack is GPL/AGPL; not compatible with Clawdis MIT if bundled.
  • signal-cli is unofficial; must stay up to date (Signal server churn).

Model

  • Run signal-cli as separate process (user-installed).
  • Prefer daemon --http=127.0.0.1:PORT for JSON-RPC + SSE.
  • Alternative: jsonRpc mode over stdin/stdout.

Endpoints (daemon --http)

  • POST /api/v1/rpc JSON-RPC request (single or batch).
  • GET /api/v1/events SSE stream of receive notifications.
  • GET /api/v1/check health probe (200 = up).

Multi-account

  • Start daemon without -a.
  • Include params.account (E164) on JSON-RPC calls.
  • SSE ?account=+E164 filters events; no param = all accounts.

Minimal RPC surface

  • send (recipient/groupId/username, message, attachments).
  • listGroups (map group IDs).
  • subscribeReceive / unsubscribeReceive (if manual receive).
  • startLink / finishLink (optional device link flow).

Process plan (Clawdis adapter)

  1. Detect signal-cli binary; refuse if missing.
  2. Launch daemon (HTTP preferred), store PID.
  3. Poll /api/v1/check until ready.
  4. Open SSE stream; parse event: receive.
  5. Translate receive payload into Clawdis surface model.
  6. On SSE disconnect, backoff + reconnect.

Storage

  • signal-cli data lives in $XDG_DATA_HOME/signal-cli/data or $HOME/.local/share/signal-cli/data.

References (local)

  • ~/Projects/oss/signal-cli/README.md
  • ~/Projects/oss/signal-cli/man/signal-cli-jsonrpc.5.adoc
  • ~/Projects/oss/signal-cli/src/main/java/org/asamk/signal/http/HttpServerHandler.java
  • ~/Projects/oss/signal-cli/src/main/java/org/asamk/signal/jsonrpc/SignalJsonRpcDispatcherHandler.java