Developer and self-hosted
Nostr
Nostr ist ein herunterladbares Kanal-Plugin (@openclaw/nostr), mit dem OpenClaw über Nostr-Relays NIP-04-verschlüsselte Direktnachrichten empfangen und beantworten kann. Ein Konto pro Gateway; nur Direktnachrichten.
Installation
openclaw plugins install @openclaw/nostrVerwenden Sie die reine Paketangabe, um dem aktuellen offiziellen Release-Tag zu folgen. Legen Sie nur dann eine exakte Version fest, wenn Sie eine reproduzierbare Installation benötigen.
Aus einem lokalen Checkout (Entwicklungsabläufe):
openclaw plugins install --link <path-to-local-nostr-plugin>Starten Sie das Gateway nach der Installation oder Aktivierung von Plugins neu. Das Onboarding (openclaw onboard) und openclaw channels add zeigen Nostr aus dem gemeinsamen Kanalkatalog an, sobald das Plugin installiert ist.
Nicht interaktive Einrichtung
openclaw channels add --channel nostr --private-key "$NOSTR_PRIVATE_KEY"openclaw channels add --channel nostr --private-key "$NOSTR_PRIVATE_KEY" --relay-urls "wss://relay.damus.io,wss://relay.primal.net"Verwenden Sie --use-env, um NOSTR_PRIVATE_KEY in der Umgebung zu belassen, statt den Schlüssel in der Konfiguration zu speichern (nur Standardkonto).
Schnelleinrichtung
- Erzeugen Sie bei Bedarf ein Nostr-Schlüsselpaar:
# Mit naknak key generate- Fügen Sie es der Konfiguration hinzu:
{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", }, },}- Exportieren Sie den Schlüssel:
export NOSTR_PRIVATE_KEY="nsec1..."- Starten Sie das Gateway neu.
Konfigurationsreferenz
| Schlüssel | Typ | Standardwert | Beschreibung |
|---|---|---|---|
privateKey |
string | erforderlich | Privater Schlüssel im nsec- oder Hexadezimalformat; Geheimnisreferenzen zulässig |
relays |
string[] | ['wss://relay.damus.io', 'wss://nos.lol'] |
Relay-URLs (WebSocket) |
dmPolicy |
string | pairing |
Zugriffsrichtlinie für Direktnachrichten |
allowFrom |
string[] | [] |
Zulässige öffentliche Absenderschlüssel |
enabled |
boolean | true |
Kanal aktivieren/deaktivieren |
name |
string | - | Anzeigename |
profile |
object | - | NIP-01-Profilmetadaten |
Profilmetadaten
Profildaten werden als NIP-01-Ereignis des Typs kind:0 veröffentlicht. Sie können sie über die Control UI (Channels -> Nostr -> Profile) verwalten oder direkt in der Konfiguration festlegen.
Beispiel:
{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", profile: { name: "openclaw", displayName: "OpenClaw", about: "Personal assistant DM bot", picture: "https://example.com/avatar.png", banner: "https://example.com/banner.png", website: "https://example.com", nip05: "openclaw@example.com", lud16: "openclaw@example.com", }, }, },}Hinweise:
- Profil-URLs müssen
https://verwenden. - Beim Import aus Relays werden Felder zusammengeführt und lokale Überschreibungen beibehalten.
Zugriffskontrolle
Richtlinien für Direktnachrichten
- pairing (Standard): Unbekannte Absender erhalten einen Kopplungscode.
- allowlist: Nur öffentliche Schlüssel in
allowFromkönnen Direktnachrichten senden. - open: Öffentlich zugängliche eingehende Direktnachrichten (erfordert
allowFrom: ["*"]). - disabled: Eingehende Direktnachrichten ignorieren.
Hinweise zur Durchsetzung:
- Die Signaturen eingehender Ereignisse werden vor der Prüfung der Absenderrichtlinie und der NIP-04-Entschlüsselung verifiziert, sodass gefälschte Ereignisse frühzeitig abgewiesen werden.
- Antworten zur Kopplung werden gesendet, ohne den ursprünglichen Inhalt der Direktnachricht zu entschlüsseln oder zu verarbeiten.
- Eingehende Direktnachrichten unterliegen global und pro Absender einer Ratenbegrenzung; übergroße Nutzdaten werden vor der Entschlüsselung verworfen.
Beispiel für eine Zulassungsliste
{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", dmPolicy: "allowlist", allowFrom: ["npub1abc...", "npub1xyz..."], }, },}Schlüsselformate
Akzeptierte Formate:
- Privater Schlüssel:
nsec...oder 64-stelliges Hexadezimalformat - Öffentliche Schlüssel (
allowFrom):npub...oder Hexadezimalformat
Relays
Standardwerte: relay.damus.io und nos.lol.
{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", relays: ["wss://relay.damus.io", "wss://relay.primal.net", "wss://nostr.wine"], }, },}Tipps:
- Verwenden Sie zur Redundanz 2–3 Relays.
- Vermeiden Sie zu viele Relays (Latenz, Duplikate).
- Kostenpflichtige Relays können die Zuverlässigkeit verbessern.
- Lokale Relays eignen sich für Tests (
ws://localhost:7777).
Protokollunterstützung
| NIP | Status | Beschreibung |
|---|---|---|
| NIP-01 | Unterstützt | Grundlegendes Ereignisformat und Profilmetadaten |
| NIP-04 | Unterstützt | Verschlüsselte Direktnachrichten (kind:4) |
| NIP-17 | Geplant | Verpackte Direktnachrichten |
| NIP-44 | Geplant | Versionierte Verschlüsselung |
Tests
Lokales Relay
# strfry startendocker run -p 7777:7777 ghcr.io/hoytech/strfry{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", relays: ["ws://localhost:7777"], }, },}Manueller Test
- Notieren Sie den öffentlichen Schlüssel des Bots aus den Gateway-Protokollen oder aus
openclaw channels status(Hexadezimalformat; konvertieren Sie ihn bei Bedarf in Ihrem Client innpub). - Öffnen Sie einen Nostr-Client (Amethyst, Damus usw.).
- Senden Sie dem öffentlichen Schlüssel des Bots eine Direktnachricht.
- Überprüfen Sie die Antwort.
Fehlerbehebung
Nachrichten werden nicht empfangen
- Überprüfen Sie, ob der private Schlüssel gültig ist.
- Stellen Sie sicher, dass die Relay-URLs erreichbar sind und
wss://verwenden (oderws://für lokale Relays). - Vergewissern Sie sich, dass
enablednicht auffalsegesetzt ist. - Prüfen Sie die Gateway-Protokolle auf Relay-Verbindungsfehler.
Antworten werden nicht gesendet
- Prüfen Sie, ob das Relay Schreibzugriffe akzeptiert.
- Überprüfen Sie die ausgehende Konnektivität.
- Achten Sie auf Ratenbegrenzungen des Relays.
Doppelte Antworten
- Bei der Verwendung mehrerer Relays ist dies zu erwarten.
- Nachrichten werden anhand der Ereignis-ID dedupliziert; nur die erste Zustellung löst eine Antwort aus.
Sicherheit
- Übertragen Sie private Schlüssel niemals in die Versionsverwaltung.
- Verwenden Sie Umgebungsvariablen für Schlüssel.
- Erwägen Sie für produktiv eingesetzte Bots
allowlist. - Signaturen werden vor der Absenderrichtlinie verifiziert und die Absenderrichtlinie wird vor der Entschlüsselung durchgesetzt. Dadurch werden gefälschte Ereignisse frühzeitig abgewiesen und unbekannte Absender können keine vollständigen kryptografischen Operationen erzwingen.
Einschränkungen (MVP)
- Nur Direktnachrichten (keine Gruppenchats).
- Keine Medienanhänge.
- Nur NIP-04 (NIP-17-Verpackung geplant).
Verwandte Themen
- Kanalübersicht — alle unterstützten Kanäle
- Kopplung — Authentifizierung von Direktnachrichten und Kopplungsablauf
- Gruppen — Verhalten von Gruppenchats und Erwähnungsbeschränkung
- Kanal-Routing — Sitzungs-Routing für Nachrichten
- Sicherheit — Zugriffsmodell und Absicherung