Matrix (Plugin)
Matrix ist ein offenes, dezentrales Messaging-Protokoll. OpenClaw verbindet sich als Matrix-User auf einem beliebigen Homeserver – du brauchst also einen Matrix-Account für den Bot. Sobald er eingeloggt ist, kannst du dem Bot direkt schreiben (DM) oder ihn in Räume einladen (Matrix-”Gruppen”). Beeper funktioniert auch als Client, erfordert aber aktivierte E2EE.
Status: Unterstützt via Plugin (@vector-im/matrix-bot-sdk). Direct Messages, Räume, Threads, Medien, Reactions, Polls (senden + poll-start als Text), Standort und E2EE (mit Crypto-Support).
Plugin erforderlich
Matrix wird als Plugin ausgeliefert und ist nicht im Core-Install enthalten.
Installation via CLI (npm Registry):
openclaw plugins install @openclaw/matrix
Lokaler Checkout (wenn du aus einem Git-Repo arbeitest):
openclaw plugins install ./extensions/matrix
Wenn du Matrix während der Konfiguration/Onboarding auswählst und ein Git-Checkout erkannt wird, bietet OpenClaw automatisch den lokalen Installationspfad an.
Details: Plugins
Setup
-
Installiere das Matrix-Plugin:
- Von npm:
openclaw plugins install @openclaw/matrix - Von einem lokalen Checkout:
openclaw plugins install ./extensions/matrix
- Von npm:
-
Erstelle einen Matrix-Account auf einem Homeserver:
- Hosting-Optionen findest du unter https://matrix.org/ecosystem/hosting/
- Oder hoste ihn selbst.
-
Hol dir ein Access Token für den Bot-Account:
- Nutze die Matrix Login API mit
curlauf deinem Homeserver:
curl --request POST \ --url https://matrix.example.org/_matrix/client/v3/login \ --header 'Content-Type: application/json' \ --data '{ "type": "m.login.password", "identifier": { "type": "m.id.user", "user": "your-user-name" }, "password": "your-password" }'- Ersetze
matrix.example.orgdurch deine Homeserver-URL. - Oder setze
channels.matrix.userId+channels.matrix.password: OpenClaw ruft denselben Login-Endpoint auf, speichert das Access Token in~/.openclaw/credentials/matrix/credentials.jsonund verwendet es beim nächsten Start wieder.
- Nutze die Matrix Login API mit
-
Konfiguriere die Credentials:
- Env:
MATRIX_HOMESERVER,MATRIX_ACCESS_TOKEN(oderMATRIX_USER_ID+MATRIX_PASSWORD) - Oder Config:
channels.matrix.* - Wenn beides gesetzt ist, hat die Config Vorrang.
- Mit Access Token: User-ID wird automatisch via
/whoamiabgerufen. - Wenn gesetzt, sollte
channels.matrix.userIddie vollständige Matrix-ID sein (Beispiel:@bot:example.org).
- Env:
-
Starte den Gateway neu (oder schließe das Onboarding ab).
-
Starte einen DM mit dem Bot oder lade ihn in einen Raum ein – von jedem Matrix-Client aus (Element, Beeper, etc.; siehe https://matrix.org/ecosystem/clients/). Beeper erfordert E2EE, also setze
channels.matrix.encryption: trueund verifiziere das Gerät.
Minimale Config (Access Token, User-ID wird automatisch abgerufen):
{
channels: {
matrix: {
enabled: true,
homeserver: "https://matrix.example.org",
accessToken: "syt_***",
dm: { policy: "pairing" },
},
},
}
E2EE-Config (Ende-zu-Ende-Verschlüsselung aktiviert):
{
channels: {
matrix: {
enabled: true,
homeserver: "https://matrix.example.org",
accessToken: "syt_***",
encryption: true,
dm: { policy: "pairing" },
},
},
}
Verschlüsselung (E2EE)
Ende-zu-Ende-Verschlüsselung wird unterstützt via Rust Crypto SDK.
Aktiviere sie mit channels.matrix.encryption: true:
- Wenn das Crypto-Modul lädt, werden verschlüsselte Räume automatisch entschlüsselt.
- Ausgehende Medien werden beim Senden in verschlüsselte Räume verschlüsselt.
- Bei der ersten Verbindung fordert OpenClaw eine Geräteverifizierung von deinen anderen Sessions an.
- Verifiziere das Gerät in einem anderen Matrix-Client (Element, etc.), um Key-Sharing zu aktivieren.
- Wenn das Crypto-Modul nicht geladen werden kann, ist E2EE deaktiviert und verschlüsselte Räume werden nicht entschlüsselt; OpenClaw loggt eine Warnung.
- Wenn du Fehler wegen fehlendem Crypto-Modul siehst (z. B.
@matrix-org/matrix-sdk-crypto-nodejs-*), erlaube Build-Scripts für@matrix-org/matrix-sdk-crypto-nodejsund führepnpm rebuild @matrix-org/matrix-sdk-crypto-nodejsaus oder hole die Binary mitnode node_modules/@matrix-org/matrix-sdk-crypto-nodejs/download-lib.js.
Der Crypto-State wird pro Account + Access Token gespeichert in ~/.openclaw/matrix/accounts/<account>/<homeserver>__<user>/<token-hash>/crypto/ (SQLite-Datenbank). Der Sync-State liegt daneben in bot-storage.json. Wenn sich das Access Token (Gerät) ändert, wird ein neuer Store erstellt und der Bot muss für verschlüsselte Räume neu verifiziert werden.
Geräteverifizierung: Wenn E2EE aktiviert ist, fordert der Bot beim Start eine Verifizierung von deinen anderen Sessions an. Öffne Element (oder einen anderen Client) und bestätige die Verifizierungsanfrage, um Vertrauen herzustellen. Nach der Verifizierung kann der Bot Nachrichten in verschlüsselten Räumen entschlüsseln.
Routing-Modell
- Antworten gehen immer zurück zu Matrix.
- DMs teilen sich die Haupt-Session des Agents; Räume werden auf Group-Sessions gemappt.
Zugriffskontrolle (DMs)
- Standard:
channels.matrix.dm.policy = "pairing". Unbekannte Absender bekommen einen Pairing-Code. - Freigabe via:
openclaw pairing list matrixopenclaw pairing approve matrix <CODE>
- Öffentliche DMs:
channels.matrix.dm.policy="open"pluschannels.matrix.dm.allowFrom=["*"]. channels.matrix.dm.allowFromakzeptiert User-IDs oder Display-Namen. Der Wizard löst Display-Namen zu User-IDs auf, wenn Directory-Search verfügbar ist.
Räume (Gruppen)
- Standard:
channels.matrix.groupPolicy = "allowlist"(Mention-gated). Nutzechannels.defaults.groupPolicy, um den Standard zu überschreiben, wenn nicht gesetzt. - Allowlist-Räume mit
channels.matrix.groups(Raum-IDs, Aliases oder Namen):
{
channels: {
matrix: {
groupPolicy: "allowlist",
groups: {
"!roomId:example.org": { allow: true },
"#alias:example.org": { allow: true },
},
groupAllowFrom: ["@owner:example.org"],
},
},
}
requireMention: falseaktiviert Auto-Reply in diesem Raum.groups."*"kann Defaults für Mention-Gating über alle Räume setzen.groupAllowFrombeschränkt, welche Absender den Bot in Räumen triggern können (optional).- Per-Raum-
users-Allowlists können Absender innerhalb eines bestimmten Raums weiter einschränken. - Der Configure-Wizard fragt nach Raum-Allowlists (Raum-IDs, Aliases oder Namen) und löst Namen auf, wenn möglich.
- Beim Start löst OpenClaw Raum-/User-Namen in Allowlists zu IDs auf und loggt das Mapping; nicht aufgelöste Einträge bleiben wie eingegeben.
- Invites werden standardmäßig automatisch angenommen; steuerbar mit
channels.matrix.autoJoinundchannels.matrix.autoJoinAllowlist. - Um keine Räume zu erlauben, setze
channels.matrix.groupPolicy: "disabled"(oder behalte eine leere Allowlist). - Legacy-Key:
channels.matrix.rooms(gleiche Form wiegroups).
Threads
- Reply-Threading wird unterstützt.
channels.matrix.threadRepliessteuert, ob Antworten in Threads bleiben:off,inbound(Standard),always
channels.matrix.replyToModesteuert Reply-to-Metadaten, wenn nicht in einem Thread geantwortet wird:off(Standard),first,all
Funktionen
| Feature | Status |
|---|---|
| Direct Messages | ✅ Unterstützt |
| Räume | ✅ Unterstützt |
| Threads | ✅ Unterstützt |
| Medien | ✅ Unterstützt |
| E2EE | ✅ Unterstützt (Crypto-Modul erforderlich) |
| Reactions | ✅ Unterstützt (senden/lesen via Tools) |
| Polls | ✅ Senden unterstützt; eingehende Poll-Starts werden zu Text konvertiert (Responses/Ends ignoriert) |
| Standort | ✅ Unterstützt (Geo-URI; Höhe ignoriert) |
| Native Commands | ✅ Unterstützt |
Konfigurationsreferenz (Matrix)
Vollständige Konfiguration: Configuration
Provider-Optionen:
channels.matrix.enabled: Channel-Startup aktivieren/deaktivieren.channels.matrix.homeserver: Homeserver-URL.channels.matrix.userId: Matrix-User-ID (optional mit Access Token).channels.matrix.accessToken: Access Token.channels.matrix.password: Passwort für Login (Token wird gespeichert).channels.matrix.deviceName: Geräteanzeigename.channels.matrix.encryption: E2EE aktivieren (Standard: false).channels.matrix.initialSyncLimit: Initial-Sync-Limit.channels.matrix.threadReplies:off | inbound | always(Standard: inbound).channels.matrix.textChunkLimit: Ausgehende Text-Chunk-Größe (Zeichen).channels.matrix.chunkMode:length(Standard) odernewline, um bei Leerzeilen (Absatzgrenzen) vor Length-Chunking zu splitten.channels.matrix.dm.policy:pairing | allowlist | open | disabled(Standard: pairing).channels.matrix.dm.allowFrom: DM-Allowlist (User-IDs oder Display-Namen).openerfordert"*". Der Wizard löst Namen zu IDs auf, wenn möglich.channels.matrix.groupPolicy:allowlist | open | disabled(Standard: allowlist).channels.matrix.groupAllowFrom: Allowlist-Absender für Gruppennachrichten.channels.matrix.allowlistOnly: Allowlist-Regeln für DMs + Räume erzwingen.channels.matrix.groups: Gruppen-Allowlist + Per-Raum-Einstellungen-Map.channels.matrix.rooms: Legacy-Gruppen-Allowlist/Config.channels.matrix.replyToMode: Reply-to-Modus für Threads/Tags.channels.matrix.mediaMaxMb: Eingehende/ausgehende Medien-Obergrenze (MB).channels.matrix.autoJoin: Invite-Handling (always | allowlist | off, Standard: always).channels.matrix.autoJoinAllowlist: Erlaubte Raum-IDs/Aliases für Auto-Join.channels.matrix.actions: Per-Action-Tool-Gating (reactions/messages/pins/memberInfo/channelInfo).