The architecture is built around one rule: OpenClaw should enforce policy and route messages, but it should not own theDocumentation Index
Fetch the complete documentation index at: https://openclaw-simplex.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
simplex-chat process lifecycle for this plugin.
That separation keeps the channel implementation explicit, makes host-level supervision a deployment choice, and avoids hiding the network/runtime boundary inside plugin startup code.
High-level diagram
Boundaries
Policy boundary
Access checks stay in OpenClaw through
dmPolicy, allowFrom, groupPolicy, pairing state, and command authorization.Runtime boundary
The plugin connects to a separately running
simplex-chat instance over WebSocket instead of spawning or supervising that process.Account boundary
Account-specific overrides live under
channels.openclaw-simplex.accounts, while shared channel config remains at the channel root.Failure isolation
If the SimpleX WebSocket endpoint is unavailable, this channel reports a runtime error and disconnect state without taking down unrelated OpenClaw channels.
Data flow
simplex-chatemits events through its WebSocket API.- The plugin monitor parses those events into OpenClaw channel context.
- OpenClaw applies policy checks and runs the agent.
- The plugin translates replies, edits, reactions, media sends, and group actions back into SimpleX commands.
Implementation surfaces
src/channel/simplex-monitor.ts: inbound SimpleX event parsing and message normalization.src/channel/simplex-send.tsandsrc/channel/simplex-outbound.ts: outbound message/action translation.src/simplex/simplex-ws-client.tsandsrc/simplex/simplex-transport.ts: WebSocket transport and command execution.channels.openclaw-simplexandchannels.openclaw-simplex.accounts: shared and per-account runtime config.