Developer and self-hosted
Nostr
Status: Optionales gebündeltes Plugin (standardmäßig deaktiviert, bis es konfiguriert wurde).
Nostr ist ein dezentrales Protokoll für soziale Netzwerke. Dieser Kanal ermöglicht OpenClaw, verschlüsselte Direktnachrichten (DMs) über NIP-04 zu empfangen und zu beantworten.
Gebündeltes Plugin
Aktuelle OpenClaw-Versionen liefern Nostr als gebündeltes Plugin aus, sodass normale paketierte Builds keine separate Installation benötigen.
Ältere/benutzerdefinierte Installationen
- Onboarding (
openclaw onboard) undopenclaw channels addzeigen Nostr weiterhin aus dem gemeinsamen Kanalkatalog an. - Wenn Ihr Build gebündeltes Nostr ausschließt, installieren Sie das npm-Paket direkt.
openclaw plugins install @openclaw/nostr
Verwenden Sie das reine Paket, um dem aktuellen offiziellen Release-Tag zu folgen. Pinnen Sie eine exakte Version nur, wenn Sie eine reproduzierbare Installation benötigen.
Verwenden Sie einen lokalen Checkout (Dev-Workflows):
openclaw plugins install --link <path-to-local-nostr-plugin>
Starten Sie den Gateway nach dem Installieren oder Aktivieren von Plugins neu.
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 behalten, statt den Schlüssel in der Konfiguration zu speichern.
Schnelle Einrichtung
- Generieren Sie bei Bedarf ein Nostr-Schlüsselpaar:
# Using nak
nak key generate
- Zur Konfiguration hinzufügen:
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
},
},
}
- Exportieren Sie den Schlüssel:
export NOSTR_PRIVATE_KEY="nsec1..."
- Starten Sie den Gateway neu.
Konfigurationsreferenz
| Schlüssel | Typ | Standard | Beschreibung |
|---|---|---|---|
privateKey |
string | erforderlich | Privater Schlüssel im nsec- oder Hex-Format |
relays |
string[] | ['wss://relay.damus.io', 'wss://nos.lol'] |
Relay-URLs (WebSocket) |
dmPolicy |
string | pairing |
DM-Zugriffsrichtlinie |
allowFrom |
string[] | [] |
Erlaubte Sender-pubkeys |
enabled |
boolean | true |
Kanal aktivieren/deaktivieren |
name |
string | - | Anzeigename |
profile |
object | - | NIP-01-Profilmetadaten |
Profilmetadaten
Profildaten werden als NIP-01-Event 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: "[email protected]",
lud16: "[email protected]",
},
},
},
}
Hinweise:
- Profil-URLs müssen
https://verwenden. - Beim Importieren von Relays werden Felder zusammengeführt und lokale Überschreibungen beibehalten.
Zugriffskontrolle
DM-Richtlinien
- pairing (Standard): Unbekannte Sender erhalten einen Pairing-Code.
- allowlist: Nur pubkeys in
allowFromkönnen DMs senden. - open: Öffentliche eingehende DMs (erfordert
allowFrom: ["*"]). - disabled: Eingehende DMs ignorieren.
Hinweise zur Durchsetzung:
- Signaturen eingehender Events werden vor der Senderrichtlinie und NIP-04-Entschlüsselung geprüft, sodass gefälschte Events früh abgelehnt werden.
- Pairing-Antworten werden gesendet, ohne den ursprünglichen DM-Text zu verarbeiten.
- Eingehende DMs werden ratenbegrenzt, und übergroße Payloads werden vor der Entschlüsselung verworfen.
Allowlist-Beispiel
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
dmPolicy: "allowlist",
allowFrom: ["npub1abc...", "npub1xyz..."],
},
},
}
Schlüsselformate
Akzeptierte Formate:
- Privater Schlüssel:
nsec...oder 64-Zeichen-Hex - Pubkeys (
allowFrom):npub...oder Hex
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, Duplikate).
- Bezahlte Relays können die Zuverlässigkeit verbessern.
- Lokale Relays eignen sich gut zum Testen (
ws://localhost:7777).
Protokollunterstützung
| NIP | Status | Beschreibung |
|---|---|---|
| NIP-01 | Unterstützt | Grundlegendes Event-Format + Profilmetadaten |
| NIP-04 | Unterstützt | Verschlüsselte DMs (kind:4) |
| NIP-17 | Geplant | Geschenkverpackte DMs |
| NIP-44 | Geplant | Versionierte Verschlüsselung |
Testen
Lokales Relay
# Start strfry
docker run -p 7777:7777 ghcr.io/hoytech/strfry
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
relays: ["ws://localhost:7777"],
},
},
}
Manueller Test
- Notieren Sie den Bot-pubkey (npub) aus den Logs.
- Öffnen Sie einen Nostr-Client (Damus, Amethyst usw.).
- Senden Sie dem Bot-pubkey eine DM.
- Prüfen Sie die Antwort.
Fehlerbehebung
Nachrichten werden nicht empfangen
- Prüfen Sie, ob der private Schlüssel gültig ist.
- Stellen Sie sicher, dass Relay-URLs erreichbar sind und
wss://verwenden (oderws://für lokale Relays). - Bestätigen Sie, dass
enablednichtfalseist. - Prüfen Sie die Gateway-Logs auf Relay-Verbindungsfehler.
Antworten werden nicht gesendet
- Prüfen Sie, ob das Relay Schreibvorgänge akzeptiert.
- Prüfen Sie die ausgehende Konnektivität.
- Achten Sie auf Relay-Rate-Limits.
Doppelte Antworten
- Erwartet, wenn mehrere Relays verwendet werden.
- Nachrichten werden anhand der Event-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.
- Ziehen Sie
allowlistfür Produktions-Bots in Betracht. - Signaturen werden vor der Senderrichtlinie geprüft, und die Senderrichtlinie wird vor der Entschlüsselung durchgesetzt, sodass gefälschte Events früh abgelehnt werden und unbekannte Sender keine vollständige Kryptografiearbeit erzwingen können.
Einschränkungen (MVP)
- Nur Direktnachrichten (keine Gruppenchats).
- Keine Medienanhänge.
- Nur NIP-04 (NIP-17-Gift-Wrap geplant).
Verwandte Themen
- Kanalübersicht — alle unterstützten Kanäle
- Pairing — DM-Authentifizierung und Pairing-Ablauf
- Gruppen — Gruppenchateverhalten und Erwähnungs-Gating
- Kanal-Routing — Sitzungs-Routing für Nachrichten
- Sicherheit — Zugriffsmodell und Härtung