Nostr
Connect to Nostr via NIP-04 encrypted DMs.
Status: Optional plugin (disabled by default).
Nostr is a decentralized social/messaging protocol. This channel allows OpenClaw to receive and reply to encrypted direct messages (DMs) via NIP-04.
Installation (Optional)
#
Onboarding (Recommended)
- The onboarding wizard (<code>openclaw onboard</code>) and <code>openclaw channels add</code> will list available channel plugins.
- After selecting Nostr, you will be prompted to install the plugin as needed.
Installation default policy:
- <strong>Dev channel + git checkout present:</strong> Use local plugin path
- <strong>Stable/Beta:</strong> Download from npm
Puedes anular la elección predeterminada en el prompt.
#
Manual Installation
openclaw plugins install @openclaw/nostr
Local installation (dev workflow):
openclaw plugins install --link '<path-to-openclaw>'/extensions/nostr
After installing or enabling the plugin, restart Gateway.
Configuración Rápida
1. Generar par de claves Nostr (si es necesario):
nak key generate
2. Escribir configuración:
{
"channels": {
"nostr": {
"privateKey": "\${NOSTR_PRIVATE_KEY}"
}
}
}3. Establecer variable de entorno:
export NOSTR_PRIVATE_KEY="nsec1..."
4. Reiniciar Gateway.
Referencia de Configuración
| Clave | Tipo | Predeterminado | Descripción |
| | -- | - | |
| privateKey | string | requerido | Clave privada (nsec o formato hex) |
| relays | string[] | ['wss://relay.damus.io', 'wss://nos.lol'] | URLs de relay (WebSocket) |
| dmPolicy | string | pairing | Política de acceso DM |
| allowFrom | string[] | [] | Pubkeys de remitentes permitidos (allowlist) |
| enabled | boolean | true | Habilitar/deshabilitar canal |
| name | string | - | Nombre para mostrar |
| profile | object | - | Metadatos de perfil NIP-01 |
Metadatos de perfil
Los datos del perfil se publican como un evento <code>kind:0</code> NIP-01. Puedes gestionarlo en el UI de Control (Canales → Nostr → Perfil), o escribirlo directamente en la configuración.
Ejemplo:
{
"channels": {
"nostr": {
"privateKey": "\${NOSTR_PRIVATE_KEY}",
"profile": {
"name": "openclaw",
"displayName": "OpenClaw",
"about": "Bot de asistente personal 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 <code>https://</code>.
- Los campos se fusionan al importar desde relays, con valores de override local preservados.
Control de Acceso
#
Política DM
- <strong>pairing</strong> (predeterminado): Remitentes desconocidos reciben un código de emparejamiento.
- <strong>allowlist</strong>: Solo pubkeys en <code>allowFrom</code> pueden enviar DM.
- <strong>open</strong>: DMs entrantes públicos (requiere <code>allowFrom: ["*"]</code>).
- <strong>disabled</strong>: Ignorar DMs entrantes.
#
Ejemplo de Allowlist
{
"channels": {
"nostr": {
"privateKey": "\${NOSTR_PRIVATE_KEY}",
"dmPolicy": "allowlist",
"allowFrom": ["npub1abc...", "npub1xyz..."]
}
}
}Formatos de Clave
Formatos soportados:
- <strong>Clave privada:</strong> <code>nsec...</code> o hex de 64 caracteres
- <strong>Clave pública (<code>allowFrom</code>):</strong> <code>npub...</code> o hex
Relays
Predeterminado: <code>relay.damus.io</code> y <code>nos.lol</code>.
{
"channels": {
"nostr": {
"privateKey": "\${NOSTR_PRIVATE_KEY}",
"relays": ["wss://relay.damus.io", "wss://relay.primal.net", "wss://nostr.wine"]
}
}
}Recomendaciones:
- Usa 2–3 relays para redundancia.
- Evita demasiados relays (latencia, mensajes duplicados).
- Los relays pagos suelen ser más estables.
- Un relay local es bueno para pruebas (<code>ws://localhost:7777</code>).
Soporte de Protocolo
| NIP | Estado | Descripción |
| | - |
| NIP-01 | Soportado | Formato de evento básico + metadatos de perfil |
| NIP-04 | Soportado | DMs encriptados (kind:4) |
| NIP-17 | Planificado | DMs gift-wrapped |
| NIP-44 | Planificado | Encriptación versionada |
Pruebas
#
Relay local
docker run -p 7777:7777 ghcr.io/hoytech/strfry
{
"channels": {
"nostr": {
"privateKey": "\${NOSTR_PRIVATE_KEY}",
"relays": ["ws://localhost:7777"]
}
}
}#
Manual Testing
1. Record bot's pubkey (npub) from logs.
2. Open a Nostr client (Damus, Amethyst, etc.).
3. DM bot's pubkey.
4. Verify bot replies.
Troubleshooting
#
Not receiving messages
- Confirm private key is valid.
- Confirm relay URLs are reachable and use <code>wss://</code> (or local <code>ws://</code>).
- Confirm <code>enabled</code> is not <code>false</code>.
- Check gateway logs for relay connection errors.
#
Not sending replies
- Confirm relay allows writes.
- Confirm outbound network connectivity.
- Watch for relay rate limits.
#
Duplicate replies
- Expected behavior when using multiple relays.