OpenClaw

Canal Nostr de OpenClaw

Descentralizado
Avanzado

Conecta OpenClaw a la red descentralizada Nostr mediante un plugin opcional. Esta integración permite que tu asistente de IA reciba y responda mensajes directos cifrados con NIP-04 a través de cualquier relay de Nostr — sin servidores centralizados, sin cuentas que registrar, solo un par de claves criptográficas y una conexión a un relay. Ideal para despliegues enfocados en la privacidad donde la resistencia a la censura y la soberanía individual son importantes.

Info rápida
DificultadAvanzado
CategoríaDescentralizado
Funciones compatibles2 / 6

Nostr Funciones compatibles

Mensajes de texto

Compatible

Medios y archivos

No compatible

Reacciones

Compatible

Hilos

No compatible

Mensajes de voz

No compatible

Chat grupal

No compatible

Nostr Requisitos previos

  • OpenClaw Gateway instalado y en ejecución
  • Un par de claves Nostr (clave privada en formato nsec o hexadecimal) — genéralo con 'nak key generate'
  • Al menos un relay de Nostr accesible vía WebSocket (por ejemplo, wss://relay.damus.io)
  • Node.js 18+ instalado en tu servidor

Nostr Configuración rápida

1

Instalar el plugin de Nostr

Ejecuta 'openclaw plugins install @openclaw/nostr' para añadir el canal de Nostr. Alternativamente, usa 'openclaw onboard' o 'openclaw channels add' y selecciona Nostr de la lista de plugins. Reinicia el Gateway después de la instalación.

2

Generar un par de claves y configurar

Genera un par de claves Nostr usando 'nak key generate'. Establece la clave privada como variable de entorno (export NOSTR_PRIVATE_KEY="nsec1...") y haz referencia a ella en tu configuración de openclaw.json usando ${NOSTR_PRIVATE_KEY}.

3

Iniciar y enviar un DM de prueba

Reinicia el Gateway con 'openclaw start'. Encuentra la clave pública (npub) de tu bot en los registros de inicio. Abre cualquier cliente de Nostr (por ejemplo, Damus, Amethyst, Primal) y envía un DM cifrado al npub del bot. Si usas la política de emparejamiento por defecto, aprueba al remitente a través del CLI.

Nostr Ejemplo de configuración

config.json
{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}",
      "relays": [
        "wss://relay.damus.io",
        "wss://nos.lol"
      ],
      "dmPolicy": "pairing"
    }
  }
}

Nostr Documentación Detallada

Descripción general de la arquitectura

A diferencia de las plataformas de mensajería centralizadas, Nostr es un protocolo descentralizado donde los mensajes se distribuyen a través de servidores relay independientes. OpenClaw se conecta a uno o más relays vía WebSocket y se suscribe a mensajes directos cifrados con NIP-04 dirigidos a la clave pública del bot. El flujo de mensajes es directo: 1. Un usuario envía un DM cifrado desde cualquier cliente de Nostr (Damus, Amethyst, Primal, etc.) 2. El mensaje se propaga a los relays a los que el usuario publica 3. La suscripción del relay de OpenClaw detecta el evento 4. El Gateway descifra el mensaje, lo procesa a través de tu agente de IA, cifra la respuesta y la publica de vuelta en los relays configurados Dado que Nostr se basa en relays, no existe un punto único de fallo — si un relay se cae, los mensajes pueden seguir fluyendo a través de otros. El bot y sus usuarios no necesitan usar exactamente los mismos relays, ya que los relays suelen intercambiar eventos entre sí.
La clave pública del bot se deriva de la clave privada y se muestra en los registros de inicio del Gateway. Comparte este npub con los usuarios para que puedan encontrar y enviar mensajes a tu bot.
Nostr no tiene concepto de 'estado en línea' — los mensajes se almacenan en los relays y se entregan cuando el cliente se conecta.

Instalación del plugin

El canal de Nostr se distribuye como un plugin opcional de OpenClaw en lugar de estar integrado en el Gateway base. Esto mantiene la instalación base ligera mientras te permite añadir soporte para Nostr cuando sea necesario. Existen varios métodos de instalación: • **npm (recomendado):** Ejecuta 'openclaw plugins install @openclaw/nostr' para instalar la versión estable. • **Canal beta:** Usa 'openclaw plugins install @openclaw/nostr@beta' para funciones en versión preliminar. • **Desarrollo local:** Clona el repositorio del plugin y usa 'openclaw plugins install --link /path/to/local/checkout' para vincularlo. • **Configuración interactiva:** Ejecuta 'openclaw onboard' o 'openclaw channels add' y selecciona Nostr de la lista. Después de la instalación, reinicia el Gateway para que el plugin surta efecto.
Ejecuta 'openclaw plugins list' para verificar que el plugin de Nostr está instalado y activo.

Generación y gestión de claves

La identidad en Nostr se basa en criptografía de clave pública. La identidad de tu bot es su par de claves — una clave privada (nsec) utilizada para firmar y descifrar, y una clave pública (npub) utilizada como su dirección. Genera un par de claves usando la herramienta CLI 'nak': 1. Instala nak: 'go install github.com/fiatjaf/nak@latest' (o descárgalo desde las versiones publicadas) 2. Genera: 'nak key generate' — esto genera la clave privada en formato hex 3. Deriva la clave pública: 'nak key public <hex-private-key>' — conviértela a npub si es necesario OpenClaw acepta claves privadas tanto en formato nsec (codificado en Bech32) como en formato hexadecimal de 64 caracteres. Las claves públicas en allowFrom pueden usar formato npub o hexadecimal.
openclaw.json
{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}"
    }
  }
}
Nunca escribas tu clave privada directamente en openclaw.json. Siempre usa una variable de entorno (por ejemplo, ${NOSTR_PRIVATE_KEY}) y configúrala mediante 'export NOSTR_PRIVATE_KEY="nsec1..."' en tu terminal o un archivo .env.

Configuración de relays

Los relays son la columna vertebral de Nostr — almacenan y distribuyen eventos. OpenClaw se conecta a tus relays configurados vía WebSocket para enviar y recibir DMs cifrados. La configuración por defecto usa dos relays públicos conocidos: relay.damus.io y nos.lol. Para uso en producción, deberías personalizar esto según tus necesidades. Consejos para la selección de relays: • Usa 2–3 relays para un buen equilibrio entre redundancia y rendimiento • Demasiados relays aumentan la latencia y el uso de ancho de banda • Los relays de pago (por ejemplo, relay.nostr.band) ofrecen mejor fiabilidad y menos spam • Para desarrollo, ejecuta un relay local (por ejemplo, Strfry vía Docker) en ws://localhost:7777
openclaw.json
{
  "channels": {
    "nostr": {
      "relays": [
        "wss://relay.damus.io",
        "wss://nos.lol",
        "wss://relay.nostr.band"
      ]
    }
  }
}
Los relays públicos son gratuitos pero pueden tener límites de velocidad o spam. Los relays de pago generalmente ofrecen mejor rendimiento y filtrado.
Tu bot y sus usuarios no necesitan estar en los mismos relays — la mayoría de los relays intercambian eventos entre sí.

Políticas de DM

Las políticas de DM (mensaje directo) controlan quién puede interactuar con tu asistente de IA a través de Nostr. Dado que Nostr es abierto por diseño, el control de acceso es especialmente importante para prevenir el uso no autorizado de tu cuota de IA. OpenClaw admite cuatro políticas: • **pairing (por defecto)** — Los remitentes desconocidos reciben un código de emparejamiento. Los apruebas o rechazas mediante 'openclaw pairing approve nostr <code>'. Una vez aprobados, pueden chatear libremente. • **allowlist** — Solo las claves públicas (npub o hexadecimal) listadas en allowFrom pueden enviar mensajes al bot. Todos los demás son ignorados silenciosamente. • **open** — Cualquiera puede enviar mensajes al bot. Requiere allowFrom: ["*"] para habilitarse. Úsalo con precaución. • **disabled** — El bot no responde a ningún DM entrante.
openclaw.json
{
  "channels": {
    "nostr": {
      "dmPolicy": "allowlist",
      "allowFrom": [
        "npub1abc...xyz",
        "npub1def...uvw"
      ]
    }
  }
}

Metadatos de perfil (NIP-01)

Puedes publicar un perfil para tu bot en la red Nostr usando eventos de metadatos kind:0 de NIP-01. Esto hace que tu bot sea descubrible en los clientes de Nostr — los usuarios verán su nombre, avatar, biografía y otros detalles cuando busquen el npub del bot. Los campos de perfil configurables incluyen: • **name** — Nombre de usuario corto (por ejemplo, "openclaw-bot") • **display_name** — Nombre para mostrar completo • **about** — Biografía / descripción • **picture** — URL del avatar (debe ser HTTPS) • **banner** — URL de la imagen de banner (debe ser HTTPS) • **website** — Sitio web del bot o proyecto • **nip05** — Identificador de verificación NIP-05 (por ejemplo, "bot@yourdomain.com") • **lud16** — Dirección Lightning para zaps
openclaw.json
{
  "channels": {
    "nostr": {
      "profile": {
        "name": "openclaw-bot",
        "display_name": "OpenClaw AI Assistant",
        "about": "AI-powered assistant on Nostr. DM me!",
        "picture": "https://example.com/bot-avatar.png",
        "nip05": "bot@yourdomain.com"
      }
    }
  }
}
La verificación NIP-05 (bot@yourdomain.com) añade una marca de verificación en la mayoría de los clientes de Nostr y ayuda a los usuarios a verificar la identidad de tu bot.
Todas las URLs de imágenes (picture, banner) deben usar HTTPS.

Cifrado y soporte de protocolo

Todos los mensajes directos en la integración de Nostr de OpenClaw utilizan cifrado NIP-04 — los mensajes se cifran con un secreto compartido derivado de los pares de claves del remitente y el destinatario usando ECDH (Elliptic Curve Diffie-Hellman). NIPs actualmente soportados: • **NIP-01** — Protocolo básico: eventos, suscripciones, metadatos (kind:0) • **NIP-04** — Mensajes directos cifrados (kind:4) Soporte futuro planificado: • **NIP-17** — Mensajes privados con envoltura de regalo (privacidad de metadatos mejorada) • **NIP-44** — Cifrado versionado (primitivas criptográficas más robustas) Aunque NIP-04 es ampliamente soportado en todos los clientes de Nostr, tiene fugas de metadatos conocidas (los operadores de relays pueden ver quién está enviando mensajes a quién, aunque no el contenido). NIP-17 y NIP-44 abordarán estas limitaciones una vez que sean adoptados.
NIP-04 cifra el contenido del mensaje pero no los metadatos. Los operadores de relays pueden ver las claves públicas del remitente/destinatario y las marcas de tiempo.
Para máxima privacidad, usa un par de claves dedicado para tu bot y conéctate a través de un relay de pago o autoalojado.

Pruebas con un relay local

Para desarrollo y pruebas, puedes ejecutar un relay de Nostr local en lugar de conectarte a relays públicos. El enfoque recomendado usa Strfry, un relay de alto rendimiento que se ejecuta fácilmente mediante Docker. Pasos de configuración: 1. Ejecuta el relay: 'docker run -p 7777:7777 hoytech/strfry' 2. Configura OpenClaw para usar el relay local: ws://localhost:7777 3. Inicia el Gateway 4. Usa un cliente de Nostr configurado para conectarse a tu relay local para enviar DMs de prueba Esto aísla tus pruebas de la red pública de Nostr y proporciona ciclos de iteración más rápidos.
openclaw.json (development)
{
  "channels": {
    "nostr": {
      "relays": ["ws://localhost:7777"],
      "dmPolicy": "open",
      "allowFrom": ["*"]
    }
  }
}
Usa dmPolicy: 'open' con allowFrom: ['*'] durante las pruebas locales para omitir el flujo de emparejamiento.

Nostr Referencia de Configuración

privateKey
Type: stringDefault: (requerido)

Clave privada de Nostr en formato nsec (Bech32) o hexadecimal de 64 caracteres. Usa una referencia a variable de entorno.

relays
Type: string[]Default: ["wss://relay.damus.io", "wss://nos.lol"]

Lista de URLs WebSocket de relays de Nostr a los que conectarse

dmPolicy
Type: stringDefault: "pairing"

Política de control de acceso de DM: 'pairing', 'allowlist', 'open' o 'disabled'

allowFrom
Type: string[]Default: []

Claves públicas (npub o hexadecimal) permitidas para enviar mensajes al bot (cuando dmPolicy es 'allowlist')

enabled
Type: booleanDefault: true

Habilitar o deshabilitar el canal de Nostr

name
Type: stringDefault: ""

Nombre para mostrar de esta instancia de canal

profile.name
Type: stringDefault: ""

Nombre de usuario del bot publicado como metadatos NIP-01

profile.display_name
Type: stringDefault: ""

Nombre para mostrar completo publicado como metadatos NIP-01

profile.about
Type: stringDefault: ""

Biografía / descripción del bot publicada como metadatos NIP-01

profile.picture
Type: stringDefault: ""

URL de imagen de avatar (se requiere HTTPS) publicada como metadatos NIP-01

profile.banner
Type: stringDefault: ""

URL de imagen de banner (se requiere HTTPS) publicada como metadatos NIP-01

profile.website
Type: stringDefault: ""

URL del sitio web publicada como metadatos NIP-01

profile.nip05
Type: stringDefault: ""

Identificador de verificación NIP-05 (por ejemplo, 'bot@yourdomain.com')

profile.lud16
Type: stringDefault: ""

Dirección Lightning para recibir zaps

Nostr Preguntas Frecuentes

Nostr Solución de Problemas

El bot se inicia pero no recibe ningún mensaje

La conexión al relay pudo haber fallado, o el remitente está publicando en relays diferentes a los que el bot está suscrito.

Revisa los registros del Gateway en busca de errores de conexión WebSocket. Verifica que las URLs de tus relays sean correctas y estén accesibles. Intenta añadir un relay público común (por ejemplo, wss://relay.damus.io) que el remitente también use. Asegúrate de que la clave privada esté configurada correctamente.
Error: formato de clave privada inválido

La clave privada no está en un formato nsec (Bech32) válido o en formato hexadecimal de 64 caracteres, o la variable de entorno no está configurada.

Verifica que la variable de entorno esté exportada correctamente: 'echo $NOSTR_PRIVATE_KEY'. Asegúrate de que la clave comience con 'nsec1' (formato Bech32) o tenga exactamente 64 caracteres hexadecimales. Regénérala con 'nak key generate' si es necesario.
Los mensajes se envían pero nunca se entregan al destinatario

Los relays configurados del bot y los relays del cliente del destinatario no coinciden, por lo que los eventos no pueden propagarse.

Añade al menos un relay que el cliente de Nostr del destinatario también use. Los relays públicos comunes como relay.damus.io y nos.lol están conectados por la mayoría de los clientes. Revisa la lista de relays en el perfil del cliente de Nostr del destinatario.
Plugin no encontrado después de la instalación

El Gateway no se reinició después de la instalación del plugin, o la instalación falló silenciosamente.

Ejecuta 'openclaw plugins list' para verificar que el plugin de Nostr está instalado. Si no aparece en la lista, vuelve a ejecutar 'openclaw plugins install @openclaw/nostr'. Reinicia el Gateway con 'openclaw start' después de la instalación.