@savoirfairelinux/jami-openclaw
v0.2.0
Published
OpenClaw channel plugin for Jami — peer-to-peer encrypted messaging.
Downloads
267
Readme
Jami Channel Plugin for OpenClaw
Connect OpenClaw to Jami for private, peer-to-peer encrypted messaging.
Plugin required
Jami ships as a plugin and is not bundled with the core install.
Install via npm:
openclaw plugins install @savoirfairelinux/jami-openclawInstall via local checkout:
git clone https://git.jami.net/savoirfairelinux/jami-openclaw.git
openclaw plugins install ./jami-openclawQuick setup
- Install the Jami plugin.
- Set up a Jami account on a jami-web server or the jami-qt REST API server.
- Create an API token or use username/password credentials.
- Configure OpenClaw and start the gateway.
Minimal config:
{
"channels": {
"jami": {
"enabled": true,
"server": "http://localhost:8080",
"token": "jm_sk_...",
"dmPolicy": "open",
},
},
}Environment variables (default account)
Set these on the gateway host if you prefer env vars:
| Variable | Description |
| ------------------ | --------------------------------------------- |
| JAMI_SERVER | Server URL (default: http://localhost:8080) |
| JAMI_TOKEN | API token (jm_sk_...) |
| JAMI_USERNAME | Username (alternative to token) |
| JAMI_PASSWORD | Password (alternative to token) |
| JAMI_AUTH_METHOD | Auth method: local (default) or jams |
Env vars apply only to the default account.
Authentication
The plugin supports two authentication methods:
- Token auth (recommended): Set
channels.jami.tokenorJAMI_TOKENto a Jami API token. - Credential auth: Set
channels.jami.username+channels.jami.password(or the corresponding env vars). The plugin obtains an access token automatically.
Access control (DMs)
Default: channels.jami.dmPolicy = "open" (all DMs accepted).
To restrict access:
{
"channels": {
"jami": {
"dmPolicy": "pairing",
"allowFrom": ["<jami-uri-1>", "<jami-uri-2>"],
},
},
}When dmPolicy is "pairing", unknown senders get a pairing code. Approve via:
openclaw pairing list jami
openclaw pairing approve jami <CODE>CLI commands
openclaw jami status # Show connection status
openclaw jami accept-all # Accept all pending conversation requestsHow it works
The plugin connects to the Jami server's WebSocket event stream and listens for incoming messages. When a message arrives:
- The plugin auto-accepts conversation requests and adds the sender as a contact (for 1:1 conversation creation).
- The message is routed through OpenClaw's channel pipeline.
- OpenClaw generates a reply via the configured agent/model.
- The reply is sent back through the Jami REST API.
Architecture
┌──────────────┐ ┌────────────────┐
│ Jami Client │ Jami protocol │ Jami Server │
│ (jami-qt/ │ ◄─────────────────────►│ (jami-web / │
│ mobile) │ (peer-to-peer) │ jami-qt) │
└──────────────┘ └────────┬───────┘
uses its own │
daemon library WebSocket + REST
│
┌────────▼───────┐
│ OpenClaw │
│ Jami Plugin │
│ (this plugin) │
└────────┬───────┘
│
Channel pipeline
│
┌────────▼───────┐
│ OpenClaw │
│ Gateway │
│ (agent/model) │
└────────────────┘Development
git clone https://git.jami.net/savoirfairelinux/jami-openclaw.git
cd jami-openclaw
npm install
npm run buildTo test locally:
openclaw plugins install .License
AGPL-3.0-or-later — see COPYING.
