Developer and self-hosted
Nostr
État : Plugin groupé facultatif (désactivé par défaut jusqu’à configuration).
Nostr est un protocole décentralisé de réseau social. Ce canal permet à OpenClaw de recevoir des messages directs (DM) chiffrés et d’y répondre via NIP-04.
Plugin groupé
Les versions actuelles d’OpenClaw fournissent Nostr comme Plugin groupé ; les builds packagés normaux n’ont donc pas besoin d’une installation séparée.
Installations anciennes/personnalisées
- L’onboarding (
openclaw onboard) etopenclaw channels addprésentent toujours Nostr depuis le catalogue de canaux partagé. - Si votre build exclut Nostr groupé, installez directement le package npm.
openclaw plugins install @openclaw/nostr
Utilisez le package nu pour suivre le tag de publication officiel actuel. Épinglez une version exacte uniquement lorsque vous avez besoin d’une installation reproductible.
Utilisez un checkout local (workflows de développement) :
openclaw plugins install --link <path-to-local-nostr-plugin>
Redémarrez le Gateway après avoir installé ou activé des plugins.
Configuration non interactive
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.
Configuration rapide
- Générez une paire de clés Nostr (si nécessaire) :
# Using nak
nak key generate
- Ajoutez-la à la configuration :
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
},
},
}
- Exportez la clé :
export NOSTR_PRIVATE_KEY="nsec1..."
- Redémarrez le Gateway.
Référence de configuration
| Clé | Type | Par défaut | Description |
|---|---|---|---|
privateKey |
string | obligatoire | Clé privée au format nsec ou hex |
relays |
string[] | ['wss://relay.damus.io', 'wss://nos.lol'] |
URL de relais (WebSocket) |
dmPolicy |
string | pairing |
Politique d’accès aux DM |
allowFrom |
string[] | [] |
Pubkeys d’expéditeurs autorisées |
enabled |
boolean | true |
Activer/désactiver le canal |
name |
string | - | Nom d’affichage |
profile |
object | - | Métadonnées de profil NIP-01 |
Métadonnées de profil
Les données de profil sont publiées comme événement NIP-01 kind:0. Vous pouvez les gérer depuis l’interface de contrôle (Channels -> Nostr -> Profile) 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",
nip05: "[email protected]",
lud16: "[email protected]",
},
},
},
}
Remarques :
- Les URL de profil doivent utiliser
https://. - L’importation depuis des relais fusionne les champs et préserve les substitutions locales.
Contrôle d’accès
Politiques de DM
- pairing (par défaut) : les expéditeurs inconnus reçoivent un code d’appairage.
- allowlist : seules les pubkeys dans
allowFrompeuvent envoyer des DM. - open : DM entrants publics (requiert
allowFrom: ["*"]). - disabled : ignorer les DM entrants.
Remarques d’application :
- Les signatures des événements entrants sont vérifiées avant la politique d’expéditeur et le déchiffrement NIP-04, ce qui permet de rejeter tôt les événements falsifiés.
- Les réponses d’appairage sont envoyées sans traiter le corps du DM d’origine.
- Les DM entrants sont limités en débit, et les charges utiles surdimensionnées sont supprimées avant le déchiffrement.
Exemple d’allowlist
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
dmPolicy: "allowlist",
allowFrom: ["npub1abc...", "npub1xyz..."],
},
},
}
Formats de clés
Formats acceptés :
- Clé privée :
nsec...ou hex de 64 caractères - Pubkeys (
allowFrom) :npub...ou hex
Relais
Valeurs 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 un trop grand nombre de relais (latence, duplication).
- Les relais payants peuvent améliorer la fiabilité.
- Les relais locaux conviennent aux tests (
ws://localhost:7777).
Prise en charge du protocole
| NIP | État | Description |
|---|---|---|
| NIP-01 | Pris en charge | Format d’événement de base + métadonnées profil |
| NIP-04 | Pris en charge | DM chiffrés (kind:4) |
| NIP-17 | Prévu | DM emballés |
| NIP-44 | Prévu | Chiffrement versionné |
Tests
Relais local
# Start strfry
docker run -p 7777:7777 ghcr.io/hoytech/strfry
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
relays: ["ws://localhost:7777"],
},
},
}
Test manuel
- Notez la pubkey du bot (npub) depuis les journaux.
- Ouvrez un client Nostr (Damus, Amethyst, etc.).
- Envoyez un DM à la pubkey du bot.
- Vérifiez la réponse.
Dépannage
Messages non reçus
- Vérifiez que la clé privée est valide.
- Assurez-vous que les URL de relais sont joignables et utilisent
wss://(ouws://en local). - Confirmez que
enabledn’est pasfalse. - Consultez les journaux du Gateway pour les erreurs de connexion aux relais.
Réponses non envoyées
- Vérifiez que le relais accepte les écritures.
- Vérifiez la connectivité sortante.
- Surveillez les limites de débit des relais.
Réponses en double
- 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.
Sécurité
- Ne commitez jamais de clés privées.
- Utilisez des variables d’environnement pour les clés.
- Envisagez
allowlistpour les bots en production. - Les signatures sont vérifiées avant la politique d’expéditeur, et la politique d’expéditeur est appliquée avant le déchiffrement ; les événements falsifiés sont donc rejetés tôt et les expéditeurs inconnus ne peuvent pas forcer l’exécution complète du travail cryptographique.
Limitations (MVP)
- Messages directs uniquement (pas de conversations de groupe).
- Pas de pièces jointes multimédias.
- NIP-04 uniquement (emballage cadeau NIP-17 prévu).
Connexe
- Vue d’ensemble des canaux — tous les canaux pris en charge
- Appairage — authentification DM et flux d’appairage
- Groupes — comportement des conversations de groupe et filtrage des mentions
- Routage des canaux — routage de session pour les messages
- Sécurité — modèle d’accès et durcissement