Nostr

Status: Optionales Plugin (standardmäßig deaktiviert).

Nostr ist ein dezentrales Protokoll für soziale Netzwerke. Dieser Channel ermöglicht es OpenClaw, verschlüsselte Direktnachrichten (DMs) über NIP-04 zu empfangen und zu beantworten.

Installation (on demand)

Onboarding (empfohlen)

  • Der Onboarding-Wizard (openclaw onboard) und openclaw channels add listen optionale Channel-Plugins auf.
  • Wenn du Nostr auswählst, wirst du aufgefordert, das Plugin bei Bedarf zu installieren.

Standard-Installationsverhalten:

  • Dev-Channel + Git-Checkout verfügbar: verwendet den lokalen Plugin-Pfad.
  • Stable/Beta: lädt von npm herunter.

Du kannst die Auswahl im Prompt jederzeit überschreiben.

Manuelle Installation

openclaw plugins install @openclaw/nostr

Lokalen Checkout verwenden (für Dev-Workflows):

openclaw plugins install --link <path-to-openclaw>/extensions/nostr

Starte den Gateway nach der Installation oder Aktivierung von Plugins neu.

Schnellstart

  1. Nostr-Keypair generieren (falls nötig):
# Mit nak
nak key generate
  1. Zur Config hinzufügen:
{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}"
    }
  }
}
  1. Key exportieren:
export NOSTR_PRIVATE_KEY="nsec1..."
  1. Gateway neu starten.

Konfigurationsreferenz

KeyTypStandardBeschreibung
privateKeystringerforderlichPrivate Key im nsec- oder Hex-Format
relaysstring[]['wss://relay.damus.io', 'wss://nos.lol']Relay-URLs (WebSocket)
dmPolicystringpairingDM-Zugriffsrichtlinie
allowFromstring[][]Erlaubte Sender-Pubkeys
enabledbooleantrueChannel aktivieren/deaktivieren
namestring-Anzeigename
profileobject-NIP-01 Profil-Metadaten

Profil-Metadaten

Profildaten werden als NIP-01 kind:0 Event veröffentlicht. Du kannst sie über die Control UI (Channels -> Nostr -> Profile) verwalten oder direkt in der Config setzen.

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": "[email protected]",
        "lud16": "[email protected]"
      }
    }
  }
}

Hinweise:

  • Profil-URLs müssen https:// verwenden.
  • Beim Import von Relays werden Felder zusammengeführt und lokale Überschreibungen bleiben erhalten.

Zugriffskontrolle

DM-Richtlinien

  • pairing (Standard): Unbekannte Absender erhalten einen Pairing-Code.
  • allowlist: Nur Pubkeys in allowFrom können DMs senden.
  • open: Öffentliche eingehende DMs (erfordert allowFrom: ["*"]).
  • disabled: Eingehende DMs ignorieren.

Allowlist-Beispiel

{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}",
      "dmPolicy": "allowlist",
      "allowFrom": ["npub1abc...", "npub1xyz..."]
    }
  }
}

Key-Formate

Akzeptierte Formate:

  • Private Key: nsec... oder 64-Zeichen Hex
  • Pubkeys (allowFrom): npub... oder Hex

Relays

Standard: 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:

  • Verwende 2-3 Relays für Redundanz.
  • Vermeide zu viele Relays (Latenz, Duplikate).
  • Bezahlte Relays können die Zuverlässigkeit verbessern.
  • Lokale Relays sind für Tests in Ordnung (ws://localhost:7777).

Protokoll-Unterstützung

NIPStatusBeschreibung
NIP-01UnterstütztBasis-Event-Format + Profil-Metadaten
NIP-04UnterstütztVerschlüsselte DMs (kind:4)
NIP-17GeplantGift-wrapped DMs
NIP-44GeplantVersionierte Verschlüsselung

Testing

Lokales Relay

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

Manueller Test

  1. Notiere den Bot-Pubkey (npub) aus den Logs.
  2. Öffne einen Nostr-Client (Damus, Amethyst, etc.).
  3. Sende eine DM an den Bot-Pubkey.
  4. Überprüfe die Antwort.

Troubleshooting

Nachrichten werden nicht empfangen

  • Prüfe, ob der Private Key gültig ist.
  • Stelle sicher, dass Relay-URLs erreichbar sind und wss:// verwenden (oder ws:// für lokal).
  • Bestätige, dass enabled nicht auf false steht.
  • Prüfe die Gateway-Logs auf Relay-Verbindungsfehler.

Antworten werden nicht gesendet

  • Prüfe, ob das Relay Schreibzugriffe akzeptiert.
  • Überprüfe die ausgehende Konnektivität.
  • Achte auf Relay-Rate-Limits.

Doppelte Antworten

  • Das ist normal bei mehreren Relays.
  • Nachrichten werden anhand der Event-ID dedupliziert; nur die erste Zustellung löst eine Antwort aus.

Sicherheit

  • Committe niemals Private Keys.
  • Verwende Umgebungsvariablen für Keys.
  • Erwäge allowlist für Produktions-Bots.

Einschränkungen (MVP)

  • Nur Direktnachrichten (keine Gruppenchats).
  • Keine Medien-Anhänge.
  • Nur NIP-04 (NIP-17 Gift-Wrap ist geplant).