SimpleX Chat
قناة SimpleX Chat
What this page is, and what it holds.
This page covers SimpleX Chat. You will use hermes send and hermes gateway setup here; about 5 minutes to read. Open the channel to yourself first with an allowlist. An open channel means anyone can message your agent.
Outcomes taken from this page, not a template.
- Understand what بوابة المراسلة is and when you need it.
- Run
hermes sendandhermes gateway setupand understand what happens next. - Read the table and take only the row that applies to you.
- Set
SIMPLEX_WS_URLin the right place.
Exactly as they appear in Hermes.
hermes sendhermes gateway setuphermes send simplex:
SIMPLEX_WS_URLSIMPLEX_ALLOWED_USERSSIMPLEX_HOME_CHANNELSIMPLEX_GROUP_ALLOWED
Jump to the part you need.
Nothing summarised away.
The documentation body below is reproduced from the official source so commands and identifiers stay exact. Each section carries a short note describing what it contains.
SimpleX Chat ↗ is a private, decentralised messaging platform where users own their contacts and groups. Unlike other platforms, SimpleX assigns no persistent user IDs — every contact is identified by an opaque internal ID generated at connection time, which makes it one of the most private messengers available.
Run hermes gateway setup and pick SimpleX for a guided walk-through.Prerequisites
Explains the idea itself. Read it slowly; the later sections build on it.
- The simplex-chat CLI installed and running as a daemon
- Python package websockets (
pip install websockets)
Install simplex-chat
Ordered, practical steps. Run one and confirm it worked before moving on.
Download the latest release from the simplex-chat GitHub releases ↗ page:
# Linux / macOS binary
curl -L https://github.com/simplex-chat/simplex-chat/releases/latest/download/simplex-chat-ubuntu-22_04-x86_64 -o simplex-chat
chmod +x simplex-chatThe SimpleX Chat project does not publish a prebuilt Docker image for the chat client; to run it under Docker, build from source from the simplex-chat repository ↗.
Start the daemon
Explains the idea itself. Read it slowly; the later sections build on it.
simplex-chat -p 5225The daemon listens on WebSocket at ws://127.0.0.1:5225 by default.
Configure Hermes
A lookup table. Do not read it all; find the row that applies to you. Commands here: hermes gateway setup.
Via setup wizard
hermes gateway setupSelect SimpleX Chat and follow the prompts.
Via environment variables
Add these to ~/.hermes/.env:
SIMPLEX_WS_URL=ws://127.0.0.1:5225
SIMPLEX_ALLOWED_USERS=<contact-id-1>,<contact-id-2>
SIMPLEX_HOME_CHANNEL=<contact-id>| Variable | Required | Description |
|---|---|---|
SIMPLEX_WS_URL | Yes | WebSocket URL of the simplex-chat daemon |
SIMPLEX_ALLOWED_USERS | Recommended | Comma-separated allowlist. Each entry can be a numeric contactId or a display name — both forms work. |
SIMPLEX_ALLOW_ALL_USERS | Optional | Set true to allow every contact (use carefully) |
SIMPLEX_AUTO_ACCEPT | Optional | Auto-accept incoming contact requests (default: true) |
SIMPLEX_GROUP_ALLOWED | Optional | Comma-separated group IDs the bot participates in, or * for any group. Omit to ignore group messages entirely |
SIMPLEX_HOME_CHANNEL | Optional | Default contact/group ID for cron job delivery |
SIMPLEX_HOME_CHANNEL_NAME | Optional | Human label for the home channel |
HERMES_SIMPLEX_TEXT_BATCH_DELAY | Optional | Quiet-period seconds (default: 0.8) used to concatenate rapid-fire inbound text messages into one event |
Find your contact ID or display name
Settings you configure once. Change one at a time so you can see what each does. Set SIMPLEX_ALLOWED_USERS in your environment, not in the chat.
After starting the daemon, open a conversation with your agent contact. The numeric contactId appears in session logs. If you'd rather use the display name shown in the SimpleX UI, that works too — SIMPLEX_ALLOWED_USERS accepts either form.
Authorization
Settings you configure once. Change one at a time so you can see what each does. Set SIMPLEX_ALLOWED_USERS in your environment, not in the chat.
By default all contacts are denied. You must either:
- Set
SIMPLEX_ALLOWED_USERSto a comma-separated list ofcontactIds and/or display names (e.g.SIMPLEX_ALLOWED_USERS=4,alicematches either contactId 4 or the contact whose display name is "alice"), or - Use DM pairing — send any message to the bot and it will reply with a pairing code. Enter that code via
hermes pairing approve simplex <CODE>.
Group chats
Settings you configure once. Change one at a time so you can see what each does. Commands here: hermes send. Set SIMPLEX_GROUP_ALLOWED in your environment, not in the chat.
By default the adapter ignores group messages — a bot in a group otherwise processes every member's traffic. Opt-in explicitly:
SIMPLEX_GROUP_ALLOWED=12,34 # specific group IDs
# or
SIMPLEX_GROUP_ALLOWED=* # any group the bot is inAddress groups by prefixing the chat ID with group:, e.g.
simplex:group:12 as a cron deliver= target or in a hermes send call.
Sending with `hermes send`
Settings you configure once. Change one at a time so you can see what each does. Commands here: hermes send. Set SIMPLEX_HOME_CHANNEL in your environment, not in the chat.
SimpleX works as a standalone send target — the daemon must be running, but a live gateway is not required for plain text:
hermes send --to simplex:alice "hello" # DM by contact display name
hermes send --to simplex:group:12 "hello" # group by numeric ID
hermes send --to simplex "hello" # SIMPLEX_HOME_CHANNELWhile the gateway is running, the adapter enumerates your contacts and
allowed groups into the channel directory (refreshed every 5 minutes), so
hermes send --list shows them by name. Before the first gateway run the
platform still appears in --list with a "no channels discovered yet"
hint — direct targets like the ones above work regardless.
Attachments
Explains the idea itself. Read it slowly; the later sections build on it.
The adapter supports native SimpleX attachments in both directions:
- Inbound — incoming images, voice notes, and files are accepted via the daemon's XFTP flow (
rcvFileDescrReady→/freceive→ wait forrcvFileComplete) and surfaced asMessageEvent.media_urlswith the appropriateMessageType(PHOTO,VOICE,TEXT+ document). - Outbound —
send_image_file,send_voice,send_document, andsend_videoall use the structured/_sendform withfilePath, so the receiving SimpleX client renders images inline and plays voice notes inline rather than offering them as downloads.
Agent replies can also embed MEDIA:/path/to/file tags in plain text —
the adapter strips the tag from the body and sends the file as either a
voice note (audio extensions) or a document.
Using SimpleX with cron jobs
Settings you configure once. Change one at a time so you can see what each does. Commands here: hermes send, hermes send simplex:. Set SIMPLEX_HOME_CHANNEL in your environment, not in the chat.
cronjob(
action="create",
schedule="every 1h",
deliver="simplex", # uses SIMPLEX_HOME_CHANNEL
prompt="Check for alerts and summarise."
)Or target a specific contact via the cron job's deliver: field, or from a shell script with the hermes send CLI:
hermes send simplex:<contact-id> "Done!"Privacy notes
Explains the idea itself. Read it slowly; the later sections build on it.
- SimpleX never reveals phone numbers or email addresses — contacts use opaque IDs
- The connection between Hermes and the daemon is local WebSocket (
ws://127.0.0.1:5225) — no data leaves your machine - Messages are end-to-end encrypted by the SimpleX protocol before reaching the daemon
Troubleshooting
A troubleshooting section. Find the symptom that matches yours rather than reading it end to end.
"Cannot reach daemon" — Ensure simplex-chat -p 5225 is running and the port matches SIMPLEX_WS_URL.
"websockets not installed" — Run pip install websockets.
Messages not received — Check that the contact's ID is in SIMPLEX_ALLOWED_USERS or approve them via DM pairing.
3 questions answered by this page alone.
Every option is a real identifier from the Hermes documentation. The wrong ones are real too, just from other pages.