Developer and self-hosted
Nostr
Nostr es un plugin de canal descargable (@openclaw/nostr) que permite a OpenClaw recibir y responder mensajes directos cifrados con NIP-04 mediante relés de Nostr. Una cuenta por gateway; solo mensajes directos.
Instalación
openclaw plugins install @openclaw/nostrUse la especificación del paquete sin versión para seguir la etiqueta de la versión oficial actual. Fije una versión exacta solo cuando necesite una instalación reproducible.
Desde un checkout local (flujos de trabajo de desarrollo):
openclaw plugins install --link <path-to-local-nostr-plugin>Reinicie el gateway después de instalar o habilitar plugins. La incorporación (openclaw onboard) y openclaw channels add muestran Nostr desde el catálogo compartido de canales una vez instalado el plugin.
Configuración no interactiva
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"Use --use-env para mantener NOSTR_PRIVATE_KEY en el entorno en lugar de almacenar la clave en la configuración (solo para la cuenta predeterminada).
Configuración rápida
- Genere un par de claves de Nostr (si es necesario):
# Mediante naknak key generate- Añádalo a la configuración:
{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", }, },}- Exporte la clave:
export NOSTR_PRIVATE_KEY="nsec1..."- Reinicie el gateway.
Referencia de configuración
| Clave | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
privateKey |
string | obligatorio | Clave privada en formato nsec o hexadecimal; se permiten referencias a secretos |
relays |
string[] | ['wss://relay.damus.io', 'wss://nos.lol'] |
URL de relés (WebSocket) |
dmPolicy |
string | pairing |
Política de acceso a mensajes directos |
allowFrom |
string[] | [] |
Claves públicas de remitentes permitidos |
enabled |
boolean | true |
Habilitar o deshabilitar el canal |
name |
string | - | Nombre para mostrar |
profile |
object | - | Metadatos del perfil NIP-01 |
Metadatos del perfil
Los datos del perfil se publican como un evento NIP-01 kind:0. Se pueden administrar desde la interfaz de control (Canales -> Nostr -> Perfil) o definir directamente en la configuración.
Ejemplo:
{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", profile: { name: "openclaw", displayName: "OpenClaw", about: "Bot asistente personal para mensajes directos", picture: "https://example.com/avatar.png", banner: "https://example.com/banner.png", website: "https://example.com", nip05: "openclaw@example.com", lud16: "openclaw@example.com", }, }, },}Notas:
- Las URL del perfil deben usar
https://. - Al importar desde relés, se combinan los campos y se conservan las anulaciones locales.
Control de acceso
Políticas de mensajes directos
- emparejamiento (predeterminado): los remitentes desconocidos reciben un código de emparejamiento.
- lista de permitidos: solo las claves públicas incluidas en
allowFrompueden enviar mensajes directos. - abierta: mensajes directos entrantes públicos (requiere
allowFrom: ["*"]). - deshabilitada: se ignoran los mensajes directos entrantes.
Notas sobre la aplicación:
- Las firmas de los eventos entrantes se verifican antes de aplicar la política de remitentes y descifrar mediante NIP-04, por lo que los eventos falsificados se rechazan de inmediato.
- Las respuestas de emparejamiento se envían sin descifrar ni procesar el cuerpo del mensaje directo original.
- Se limita la frecuencia de los mensajes directos entrantes (globalmente y por remitente), y las cargas útiles demasiado grandes se descartan antes de descifrarlas.
Ejemplo de lista de permitidos
{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", dmPolicy: "allowlist", allowFrom: ["npub1abc...", "npub1xyz..."], }, },}Formatos de clave
Formatos aceptados:
- Clave privada:
nsec...o una cadena hexadecimal de 64 caracteres - Claves públicas (
allowFrom):npub...o formato hexadecimal
Relés
Valores 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:
- Use entre 2 y 3 relés para obtener redundancia.
- Evite usar demasiados relés (latencia y duplicación).
- Los relés de pago pueden mejorar la fiabilidad.
- Los relés locales son adecuados para las pruebas (
ws://localhost:7777).
Compatibilidad con protocolos
| NIP | Estado | Descripción |
|---|---|---|
| NIP-01 | Compatible | Formato básico de eventos y metadatos del perfil |
| NIP-04 | Compatible | Mensajes directos cifrados (kind:4) |
| NIP-17 | Planificado | Mensajes directos envueltos como regalo |
| NIP-44 | Planificado | Cifrado con control de versiones |
Pruebas
Relé local
# Iniciar strfrydocker run -p 7777:7777 ghcr.io/hoytech/strfry{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", relays: ["ws://localhost:7777"], }, },}Prueba manual
- Anote la clave pública del bot que aparece en los registros del gateway o en
openclaw channels status(hexadecimal; conviértala a npub en su cliente si es necesario). - Abra un cliente de Nostr (Amethyst, Damus, etc.).
- Envíe un mensaje directo a la clave pública del bot.
- Verifique la respuesta.
Solución de problemas
No se reciben mensajes
- Verifique que la clave privada sea válida.
- Asegúrese de que las URL de los relés sean accesibles y usen
wss://(ows://para conexiones locales). - Confirme que
enabledno seafalse. - Compruebe si hay errores de conexión con los relés en los registros del gateway.
No se envían respuestas
- Compruebe que el relé acepte escrituras.
- Verifique la conectividad saliente.
- Compruebe si se alcanzan los límites de frecuencia del relé.
Respuestas duplicadas
- Es algo esperado cuando se usan varios relés.
- Los mensajes se deduplican mediante el identificador del evento; solo la primera entrega desencadena una respuesta.
Seguridad
- Nunca confirme claves privadas en el repositorio.
- Use variables de entorno para las claves.
- Considere
allowlistpara bots de producción. - Las firmas se verifican antes de aplicar la política de remitentes, y esta se aplica antes de descifrar, por lo que los eventos falsificados se rechazan de inmediato y los remitentes desconocidos no pueden forzar la ejecución completa de las operaciones criptográficas.
Limitaciones (MVP)
- Solo mensajes directos (sin chats grupales).
- Sin archivos multimedia adjuntos.
- Solo NIP-04 (se prevé la envoltura de regalo de NIP-17).
Contenido relacionado
- Descripción general de los canales — todos los canales compatibles
- Emparejamiento — autenticación de mensajes directos y flujo de emparejamiento
- Grupos — comportamiento de los chats grupales y restricción mediante menciones
- Enrutamiento de canales — enrutamiento de sesiones para los mensajes
- Seguridad — modelo de acceso y refuerzo de la seguridad