Aller au contenu

Nostr

Statut : Plugin groupé facultatif (désactivé par défaut jusqu’à ce qu’il soit configuré).

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

Les versions actuelles de OpenClaw incluent Nostr en tant que plugin groupé, les builds empaquetés normaux n’ont donc pas besoin d’une installation séparée.

  • Onboarding (openclaw onboard) et openclaw channels add affichent toujours Nostr à partir du catalogue de canaux partagés.
  • Si votre build exclut Nostr groupé, installez directement le paquet npm.
Fenêtre de terminal
openclaw plugins install @openclaw/nostr

Utilisez le paquet brut pour suivre l’étiquette de publication officielle actuelle. Épinglez une version exacte uniquement lorsque vous avez besoin d’une installation reproductible.

Utilisez une extraction locale (flux de travail de développement) :

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

Redémarrez la Gateway après avoir installé ou activé des 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érez 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 la Gateway.
CléTypePar défautDescription
privateKeychaînerequisClé privée au format nsec ou hexadécimal
relayschaîne[]['wss://relay.damus.io', 'wss://nos.lol']URL de relais (WebSocket)
dmPolicychaînepairingStratégie d’accès DM
allowFromchaîne[][]Clés publiques des expéditeurs autorisés
enabledbooléentrueActiver/désactiver le canal
namechaîne-Nom d’affichage
profileobjet-Métadonnées de profil NIP-01

Les données du profil sont publiées sous forme d’é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 URL de profil doivent utiliser https://.
  • L’importation depuis les relais fusionne les champs et conserve les remplacements locaux.
  • 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 DM.
  • open : DM entrants publics (nécessite allowFrom: ["*"]).
  • disabled : ignorer les DM entrants.

Notes sur l’application :

  • Les signatures des événements entrants sont vérifiées avant la stratégie de l’expéditeur et le déchiffrement NIP-04, les événements falsifiés sont donc rejetés tôt.
  • Les réponses d’appariement sont envoyées sans traiter le corps du DM d’origine.
  • Les DM entrants sont limités par 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 hex de 64 caractères
  • Clés publiques (allowFrom) : npub... ou hex

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 enveloppé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 (logs).
  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:// pour le local).
  • Confirmez que enabled n’est pas false.
  • Consultez 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édupliqué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.
  • Les signatures sont vérifiées avant la stratégie de l’expéditeur, et la stratégie de l’expéditeur est appliquée avant le déchiffrement, de sorte que les événements falsifiés sont rejetés tôt et les expéditeurs inconnus ne peuvent pas forcer le travail cryptographique complet.
  • Messages directs uniquement (pas de chats de groupe).
  • Pas de pièces jointes multimédias.
  • NIP-04 uniquement (NIP-17 gift-wrap prévu).