Developer and self-hosted
Nostr
Nostr ist ein herunterladbares Kanal-Plugin (@openclaw/nostr), mit dem OpenClaw über Nostr-Relays verschlüsselte Direktnachrichten gemäß NIP-04 empfangen und beantworten kann. Ein Konto pro Gateway; nur Direktnachrichten.
Installation
openclaw plugins install @openclaw/nostrVerwenden Sie die reine Paketspezifikation, um dem aktuellen offiziellen Release-Tag zu folgen. Fixieren Sie eine exakte Version nur, 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
- Generieren 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; Secret-Referenzen sind 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-kind:0-Ereignis 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: "Persönlicher Assistent als Direktnachrichten-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
- Kopplung (Standard): Unbekannte Absender erhalten einen Kopplungscode.
- Zulassungsliste: Nur öffentliche Schlüssel in
allowFromkönnen Direktnachrichten senden. - Offen: öffentlich eingehende Direktnachrichten (erfordert
allowFrom: ["*"]). - Deaktiviert: Eingehende Direktnachrichten werden ignoriert.
Hinweise zur Durchsetzung:
- 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.
- Kopplungsantworten 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 Hexadezimalwert mit 64 Zeichen - Öffentliche Schlüssel (
allowFrom):npub...oder Hexadezimalwert
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 2-3 Relays für Redundanz.
- Vermeiden Sie zu viele Relays (Latenz, Duplizierung).
- 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
openclaw channels status(Hexadezimalwert; konvertieren Sie ihn bei Bedarf in Ihrem Client in npub). - Öffnen Sie einen Nostr-Client (Amethyst, Damus usw.).
- Senden Sie eine Direktnachricht an den öffentlichen Schlüssel des Bots.
- Ü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://(oder lokalws://) verwenden. - Vergewissern Sie sich, dass
enablednichtfalseist. - Prüfen Sie die Gateway-Protokolle auf Relay-Verbindungsfehler.
Antworten werden nicht gesendet
- Prüfen Sie, ob das Relay Schreibvorgänge akzeptiert.
- Überprüfen Sie die ausgehende Konnektivität.
- Achten Sie auf Ratenbegrenzungen des Relays.
Doppelte Antworten
- Dies ist bei der Verwendung mehrerer Relays zu erwarten.
- Nachrichten werden anhand der Ereignis-ID dedupliziert; nur die erste Zustellung löst eine Antwort aus.
Sicherheit
- Committen Sie niemals private Schlüssel.
- Verwenden Sie Umgebungsvariablen für Schlüssel.
- Erwägen Sie
allowlistfür produktiv eingesetzte Bots. - Signaturen werden vor der Prüfung 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ändige kryptografische Verarbeitung 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 Härtung