OpenClawSkills
GitHub
Canales • 5 min de lectura

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.

Tutorial.step

Installation (Optional)

#

Tutorial.step

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.

#

Tutorial.step

Manual Installation

Bash
openclaw plugins install @openclaw/nostr

Local installation (dev workflow):

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

After installing or enabling the plugin, restart Gateway.

Tutorial.step

Configuración Rápida

1. Generar par de claves Nostr (si es necesario):

Bash
nak key generate

2. Escribir configuración:

Json
{
  "channels": {
    "nostr": {
      "privateKey": "\${NOSTR_PRIVATE_KEY}"
    }
  }
}

3. Establecer variable de entorno:

Bash
export NOSTR_PRIVATE_KEY="nsec1..."

4. Reiniciar Gateway.

Tutorial.step

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 |

Tutorial.step

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:

Json
{
  "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.

Tutorial.step

Control de Acceso

#

Tutorial.step

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: [&quot;*&quot;]</code>).

- <strong>disabled</strong>: Ignorar DMs entrantes.

#

Tutorial.step

Ejemplo de Allowlist

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

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

Tutorial.step

Relays

Predeterminado: <code>relay.damus.io</code> y <code>nos.lol</code>.

Json
{
  "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>).

Tutorial.step

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 |

Tutorial.step

Pruebas

#

Tutorial.step

Relay local

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

#

Tutorial.step

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.

Tutorial.step

Troubleshooting

#

Tutorial.step

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.

#

Tutorial.step

Not sending replies

- Confirm relay allows writes.

- Confirm outbound network connectivity.

- Watch for relay rate limits.

#

Tutorial.step

Duplicate replies

- Expected behavior when using multiple relays.