Aller au contenu

Nostr

Statut : Plugin optionnel (désactivé par défaut).

Nostr est un protocole décentralisé pour les réseaux sociaux. Ce canal permet à OpenClaw de recevoir et de répondre aux messages directs (DMs) chiffrés via NIP-04.

  • Onboarding (openclaw onboard) et openclaw channels add listent les plugins de canal optionnels.
  • Sélectionner Nostr vous invite à installer le plugin à la demande.

Paramètres d’installation par défaut :

  • Canal Dev + git checkout disponible : utilise le chemin du plugin local.
  • Stable/Bêta : télécharge depuis npm.

Vous pouvez toujours remplacer le choix dans l’invite.

Fenêtre de terminal
openclaw plugins install @openclaw/nostr

Utiliser un checkout local (flux de travail dev) :

Fenêtre de terminal
openclaw plugins install --link <path-to-local-nostr-plugin>

Redémarrez la passerelle après avoir installé ou activé les plugins.

Fenêtre de terminal
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"

Utilisez --use-env pour conserver NOSTR_PRIVATE_KEY dans l’environnement au lieu de stocker la clé dans la configuration.

  1. Générer une paire de clés Nostr (si nécessaire) :
Fenêtre de terminal
# Using nak
nak key generate
  1. Ajouter à la configuration :
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
},
},
}
  1. Exporter la clé :
Fenêtre de terminal
export NOSTR_PRIVATE_KEY="nsec1..."
  1. Redémarrez le Gateway.
CléTypePar défautDescription
privateKeystringrequisClé privée au format nsec ou hexadécimal
relaysstring[]['wss://relay.damus.io', 'wss://nos.lol']URLs de relais (WebSocket)
dmPolicystringpairingPolitique d’accès DM
allowFromstring[][]Clés publiques d’expéditeurs autorisées
enabledbooleantrueActiver/désactiver le canal
namestring-Nom d’affichage
profileobject-Métadonnées de profil NIP-01

Les données du profil sont publiées en tant qu’événement NIP-01 kind:0. Vous pouvez les gérer depuis l’interface de contrôle (Canaux -> Nostr -> Profil) ou les définir directement dans la configuration.

Exemple :

{
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",
},
},
},
}

Notes :

  • Les URLs de profil doivent utiliser https://.
  • L’importation depuis les relais fusionne les champs et conserve les substitutions locales.
  • pairing (par défaut) : les expéditeurs inconnus reçoivent un code d’appariement.
  • allowlist : seules les clés publiques dans allowFrom peuvent envoyer des DMs.
  • open : DMs entrants publics (nécessite allowFrom: ["*"]).
  • disabled : ignorer les DMs entrants.

Notes sur l’application :

  • La stratégie de l’expéditeur est vérifiée avant la vérification de la signature et le déchiffrement NIP-04.
  • Les réponses d’appariement sont envoyées sans traiter le corps du DM d’origine.
  • Les DM entrants sont soumis à une limitation de débit et les charges utiles trop volumineuses sont supprimées avant le déchiffrement.
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
dmPolicy: "allowlist",
allowFrom: ["npub1abc...", "npub1xyz..."],
},
},
}

Formats acceptés :

  • Clé privée : nsec... ou hexadécimal de 64 caractères
  • Clés publiques (allowFrom) : npub... ou hexadécimal

Par défaut : relay.damus.io et nos.lol.

{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
relays: ["wss://relay.damus.io", "wss://relay.primal.net", "wss://nostr.wine"],
},
},
}

Conseils :

  • Utilisez 2 à 3 relais pour la redondance.
  • Évitez d’utiliser trop de relais (latence, duplication).
  • Les relais payants peuvent améliorer la fiabilité.
  • Les relais locaux conviennent pour les tests (ws://localhost:7777).
NIPStatutDescription
NIP-01Pris en chargeFormat d’événement de base + métadonnées de profil
NIP-04Pris en chargeDM chiffrés (kind:4)
NIP-17PrévuDM emballés (gift-wrapped)
NIP-44PrévuChiffrement versionné
Fenêtre de terminal
# Start strfry
docker run -p 7777:7777 ghcr.io/hoytech/strfry
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
relays: ["ws://localhost:7777"],
},
},
}
  1. Notez la clé publique du bot (npub) dans les journaux.
  2. Ouvrez un client Nostr (Damus, Amethyst, etc.).
  3. Envoyez un DM à la clé publique du bot.
  4. Vérifiez la réponse.
  • Vérifiez que la clé privée est valide.
  • Assurez-vous que les URL des relais sont accessibles et utilisent wss:// (ou ws:// en local).
  • Confirmez que enabled n’est pas false.
  • Vérifiez les journaux du Gateway pour les erreurs de connexion aux relais.
  • Vérifiez que le relais accepte les écritures.
  • Vérifiez la connectivité sortante.
  • Surveillez les limites de débit des relais.
  • Attendu lors de l’utilisation de plusieurs relais.
  • Les messages sont dédoublonnés par ID d’événement ; seule la première livraison déclenche une réponse.
  • Ne commettez jamais de clés privées.
  • Utilisez des variables d’environnement pour les clés.
  • Envisagez allowlist pour les bots de production.
  • La stratégie d’appariement et de liste d’autorisation est appliquée avant le déchiffrement, les expéditeurs inconnus ne peuvent donc pas forcer une charge cryptographique complète.
  • Messages directs uniquement (pas de discussions de groupe).
  • Pas de pièces jointes multimédias.
  • NIP-04 uniquement (NIP-17 gift-wrap prévu).