Signal: a private, end-to-end encrypted channel to your agent

Talk to Hermes over Signal by linking signal-cli as a secondary device and pointing the gateway at its local HTTP daemon.

Docs-backedReviewed Oct 29, 2026

What Signal is for

Signal encrypts transport, but Hermes requires an external signal-cli linked-device daemon. Decrypted messages reach the Hermes host, configured model and tools; the messenger alone does not make all processing private or local. Choose explicit user grants. Group chats stay ignored until you list specific group IDs. A home channel can receive scheduled results.

What you need

  • signal-cli (from GitHub releases on Linux, or Homebrew on macOS) and Java 17 or later
  • A phone number with Signal installed to link signal-cli as a secondary device
  • A way to keep the signal-cli daemon running, such as systemd, tmux or screen

Set it up

  1. 1

    Install signal-cli, for example brew install signal-cli on macOS

  2. 2

    Run signal-cli link -n "HermesAgent" and scan the QR code from Signal's Linked Devices screen on your phone

  3. 3

    Start the daemon with signal-cli --account +1234567890 daemon --http 127.0.0.1:8080, using your own E.164 number

  4. 4

    Run hermes gateway setup and choose Signal, or set SIGNAL_HTTP_URL, SIGNAL_ACCOUNT and SIGNAL_ALLOWED_USERS in ~/.hermes/.env

  5. 5

    Start the gateway with hermes gateway or hermes gateway install

Check it works

  • Run curl http://127.0.0.1:8080/api/v1/check and confirm it returns JSON with the signal-cli version
  • The setup wizard tests connectivity to the daemon
  • Message the bot from an allowed number. If pairing is enabled and a code is issued, approve it with hermes pairing approve signal CODE. A restrictive allowlist normally suppresses unsolicited codes.

Limits and failure points

  • Signal cannot edit sent messages, so tool-progress updates are suppressed; replies over 8,000 characters are split into chunks
  • Running more than one signal-cli listener on the same number produces duplicate messages
  • Voice input uses the configured speech-to-text provider when available, including documented local, hosted or custom providers. Spoken replies can be attached as audio. The signal-cli data folder contains account credentials.

Messaging setup

All messaging platforms

Primary sources

Spotted something wrong or out of date? Tell us on X at @HermesWatcher (opens in a new tab) and we will fix it.

Want Hermes set up for you?

Setup help, custom agent builds and one-off projects. Tell us what you need and get a quote by email.