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

bash
openclaw plugins install @openclaw/nostr

Verwenden 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):

bash
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

bash
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

  1. Erzeugen Sie bei Bedarf ein Nostr-Schlüsselpaar:
bash
# Mit naknak key generate
  1. Fügen Sie es der Konfiguration hinzu:
json5
{  channels: {    nostr: {      privateKey: "${NOSTR_PRIVATE_KEY}",    },  },}
  1. Exportieren Sie den Schlüssel:
bash
export NOSTR_PRIVATE_KEY="nsec1..."
  1. 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:

json5
{  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 allowFrom kö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

json5
{  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.

json5
{  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

bash
# strfry startendocker run -p 7777:7777 ghcr.io/hoytech/strfry
json5
{  channels: {    nostr: {      privateKey: "${NOSTR_PRIVATE_KEY}",      relays: ["ws://localhost:7777"],    },  },}

Manueller Test

  1. 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 in npub).
  2. Öffnen Sie einen Nostr-Client (Amethyst, Damus usw.).
  3. Senden Sie dem öffentlichen Schlüssel des Bots eine Direktnachricht.
  4. Ü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 (oder ws:// für lokale Relays).
  • Vergewissern Sie sich, dass enabled nicht auf false gesetzt 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
Was this useful?
On this page

On this page