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, live text updates, edits, reactions, media sends, and group actions back into SimpleX commands.
Implementation surfaces
src/channel/events/simplex-monitor.ts: inbound SimpleX event monitoring, reconnect handling, parsing, and message normalization.src/channel/messaging/simplex-send.tsandsrc/channel/messaging/simplex-outbound.ts: outbound message delivery, optional SimpleX-native live text replies, and reply translation.src/actions/actions.ts,src/actions/message-actions.ts, andsrc/actions/group-actions.ts: shared OpenClaw message actions such as upload-file, reactions, polls, edits, deletes, and group operations.src/simplex/runtime/ws-client.tsandsrc/simplex/runtime/transport.ts: WebSocket transport and command execution.channels.openclaw-simplexandchannels.openclaw-simplex.accounts: shared and per-account runtime config.