Nostr

Estado: Plugin opcional (desactivado de forma predeterminada).

Nostr es un protocolo descentralizado para redes sociales. Este canal permite a OpenClaw recibir y responder mensajes directos cifrados (DMs) vía NIP-04.

Instalar (bajo demanda)

Onboarding (recomendado)

  • El asistente de onboarding (openclaw onboard) y openclaw channels add listan los plugins de canales opcionales.
  • Al seleccionar Nostr se te solicita instalar el plugin bajo demanda.

Valores predeterminados de instalación:

  • Canal dev + checkout git disponible: usa la ruta local del plugin.
  • Stable/Beta: descarga desde npm.

Siempre puedes modificar la elección en el prompt.

Instalación manual

openclaw plugins install @openclaw/nostr

Usar un checkout local (flujos de desarrollo):

openclaw plugins install --link <path-to-openclaw>/extensions/nostr

Reinicia el Gateway después de instalar o habilitar plugins.

Configuración rápida

  1. Genera un par de claves Nostr (si es necesario):
# Usando nak
nak key generate
  1. Añade a la configuración:
{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}"
    }
  }
}
  1. Exporta la clave:
export NOSTR_PRIVATE_KEY="nsec1..."
  1. Reinicia el Gateway.

Referencia de configuración

ClaveTipoPredeterminadoDescripción
privateKeystringrequeridoClave privada en formato nsec o hex
relaysstring[]['wss://relay.damus.io', 'wss://nos.lol']URLs de relays (WebSocket)
dmPolicystringpairingPolítica de acceso a mensajes directos
allowFromstring[][]Claves públicas de remitentes permitidos
enabledbooleantrueHabilitar/deshabilitar canal
namestring-Nombre para mostrar
profileobject-Metadatos de perfil NIP-01

Metadatos de perfil

Los datos de perfil se publican como un evento NIP-01 kind:0. Puedes gestionarlos desde la interfaz de control (Channels -> Nostr -> Profile) o configurarlos directamente en la configuración.

Ejemplo:

{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}",
      "profile": {
        "name": "openclaw",
        "displayName": "OpenClaw",
        "about": "Bot asistente personal por DM",
        "picture": "https://example.com/avatar.png",
        "banner": "https://example.com/banner.png",
        "website": "https://example.com",
        "nip05": "[email protected]",
        "lud16": "[email protected]"
      }
    }
  }
}

Notas:

  • Las URLs de perfil deben usar https://.
  • La importación desde relays fusiona campos y preserva las configuraciones locales.

Control de acceso

Políticas de mensajes directos

  • pairing (predeterminado): los remitentes desconocidos reciben un código de emparejamiento.
  • allowlist: solo las claves públicas en allowFrom pueden enviar DMs.
  • open: DMs entrantes públicos (requiere allowFrom: ["*"]).
  • disabled: ignorar DMs entrantes.

Ejemplo de lista de acceso

{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}",
      "dmPolicy": "allowlist",
      "allowFrom": ["npub1abc...", "npub1xyz..."]
    }
  }
}

Formatos de clave

Formatos aceptados:

  • Clave privada: nsec... o hex de 64 caracteres
  • Claves públicas (allowFrom): npub... o hex

Relays

Predeterminados: relay.damus.io y nos.lol.

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

Consejos:

  • Usa 2-3 relays para redundancia.
  • Evita demasiados relays (latencia, duplicación).
  • Los relays de pago pueden mejorar la fiabilidad.
  • Los relays locales funcionan para pruebas (ws://localhost:7777).

Soporte de protocolo

NIPEstadoDescripción
NIP-01SoportadoFormato básico de eventos + metadatos
NIP-04SoportadoDMs cifrados (kind:4)
NIP-17PlaneadoDMs con gift-wrap
NIP-44PlaneadoCifrado con versiones

Pruebas

Relay local

# Iniciar strfry
docker run -p 7777:7777 ghcr.io/hoytech/strfry
{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}",
      "relays": ["ws://localhost:7777"]
    }
  }
}

Prueba manual

  1. Anota la clave pública del bot (npub) desde los logs.
  2. Abre un cliente Nostr (Damus, Amethyst, etc.).
  3. Envía un DM a la clave pública del bot.
  4. Verifica la respuesta.

Resolución de problemas

No se reciben mensajes

  • Verifica que la clave privada sea válida.
  • Asegúrate de que las URLs de los relays sean accesibles y usen wss:// (o ws:// para local).
  • Confirma que enabled no sea false.
  • Revisa los logs del Gateway en busca de errores de conexión con los relays.

No se envían respuestas

  • Verifica que el relay acepte escrituras.
  • Verifica la conectividad saliente.
  • Presta atención a los límites de velocidad del relay.

Respuestas duplicadas

  • Es esperable cuando se usan múltiples relays.
  • Los mensajes se deduplicación por ID de evento; solo la primera entrega activa una respuesta.

Seguridad

  • Nunca hagas commit de claves privadas.
  • Usa variables de entorno para las claves.
  • Considera allowlist para bots en producción.

Limitaciones (MVP)

  • Solo mensajes directos (sin chats grupales).
  • Sin archivos adjuntos multimedia.
  • Solo NIP-04 (NIP-17 gift-wrap planeado).