Code Pluginsource linkedVerified

Nostrv2026.5.28

OpenClaw Nostr channel plugin for NIP-04 encrypted direct messages.

@openclaw/nostr·runtime nostr·by @openclaw
openclaw plugins install clawhub:@openclaw/nostr
Latest release: v2026.5.28Download zip

Capabilities

Channels
nostr
configSchema
Yes
Executes code
Yes
HTTP routes
0
Runtime ID
nostr
Setup entry
Yes

Compatibility

Built With Open Claw Version
2026.5.28
Min Gateway Version
>=2026.4.10
Plugin Api Range
>=2026.5.28
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
The package consistently implements a Nostr NIP-04 direct-message channel, including relay connectivity, encrypted DM send/receive, sender policy checks, and optional Nostr profile publishing.
Instruction Scope
Runtime behavior is scoped to Nostr channel setup, messaging, pairing/allowlist policy, and profile operations; no hidden prompt manipulation, unrelated command execution, or deceptive instructions were found.
Install Mechanism
The artifact is a normal @openclaw npm-pack style plugin with shrinkwrapped dependencies and no install scripts or automatic privileged installation behavior identified.
Credentials
Use of Nostr relays, local gateway APIs, and a Nostr private key is proportionate to the channel purpose; profile mutation routes are protected by gateway auth, operator.admin scope, loopback checks, validation, and rate limiting.
Persistence & Privilege
The plugin can persist a directly supplied Nostr private key in configuration and writes local state files for processed events/profile publish state; this is purpose-aligned but sensitive.
Scan Findings in Context
[SQP-2] expected: Confirmed: setup can write a provided privateKey value into channel configuration. This is sensitive, but it is disclosed by the config surface and directly supports Nostr signing/decryption; no evidence showed exfiltration or deceptive use.
Assessment
Prefer using NOSTR_PRIVATE_KEY or another secret reference instead of placing the raw key in config. Use a dedicated Nostr key for the bot, protect backups and support bundles that may include configuration, and rotate the key if local config is exposed.
dist/channel-UK7t4qb8.js:1194
File appears to expose a hardcoded API secret or token.
dist/config-schema-DIiXiBKr.js:52
File appears to expose a hardcoded API secret or token.
dist/setup-adapter-DEU3o8MF.js:45
File appears to expose a hardcoded API secret or token.
dist/setup-surface-CVEYWXAG.js:88
File appears to expose a hardcoded API secret or token.
Patterns worth reviewing
These patterns may indicate risky behavior. Check the VirusTotal and OpenClaw results above for context-aware analysis before installing.

Verification

Tier
source linked
Scope
artifact only
Summary
Validated package structure and linked the release to source metadata.
Commit
e93216080aa1
Tag
refs/heads/release/2026.5.28
Provenance
No
Scan status
clean

Tags

alpha
2026.5.19-alpha.1
beta
2026.6.1-beta.1
latest
2026.5.28

@openclaw/nostr

Nostr DM channel plugin for OpenClaw using NIP-04 encrypted direct messages.

Overview

This extension adds Nostr as a messaging channel to OpenClaw. It enables your bot to:

  • Receive encrypted DMs from Nostr users
  • Send encrypted responses back
  • Work with any NIP-04 compatible Nostr client (Damus, Amethyst, etc.)

Installation

openclaw plugins install @openclaw/nostr

Quick Setup

  1. Generate a Nostr keypair (if you don't have one):

    # Using nak CLI
    nak key generate
    
    # Or use any Nostr key generator
    
  2. Add to your config:

    {
      "channels": {
        "nostr": {
          "privateKey": "${NOSTR_PRIVATE_KEY}",
          "relays": ["wss://relay.damus.io", "wss://nos.lol"]
        }
      }
    }
    
  3. Set the environment variable:

    export NOSTR_PRIVATE_KEY="nsec1..."  # or hex format
    
  4. Restart the gateway

Configuration

KeyTypeDefaultDescription
privateKeystringrequiredBot's private key (nsec or hex format)
relaysstring[]["wss://relay.damus.io", "wss://nos.lol"]WebSocket relay URLs
dmPolicystring"pairing"Access control: pairing, allowlist, open, disabled
allowFromstring[][]Allowed sender pubkeys (npub or hex)
enabledbooleantrueEnable/disable the channel
namestring-Display name for the account

Access Control

DM Policies

  • pairing (default): Unknown senders receive a pairing code to request access
  • allowlist: Only pubkeys in allowFrom can message the bot
  • open: Anyone can message the bot (use with caution)
  • disabled: DMs are disabled

Inbound event signatures are verified before policy enforcement and NIP-04 decryption. Unknown senders in pairing mode can receive a pairing reply, but their original DM body is not processed unless approved.

Example: Allowlist Mode

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

Testing

Local Relay (Recommended)

# Using strfry
docker run -p 7777:7777 ghcr.io/hoytech/strfry

# Configure openclaw to use local relay
"relays": ["ws://localhost:7777"]

Manual Test

  1. Start the gateway with Nostr configured
  2. Open Damus, Amethyst, or another Nostr client
  3. Send a DM to your bot's npub
  4. Verify the bot responds

Protocol Support

NIPStatusNotes
NIP-01SupportedBasic event structure
NIP-04SupportedEncrypted DMs (kind:4)
NIP-17PlannedGift-wrapped DMs (v2)

Security Notes

  • Private keys are never logged
  • Event signatures are verified before processing
  • Sender policy is checked before expensive crypto work
  • Inbound DMs are rate-limited and oversized payloads are dropped before decrypt
  • Use environment variables for keys, never commit to config files
  • Consider using allowlist mode in production

Troubleshooting

Bot not receiving messages

  1. Verify private key is correctly configured
  2. Check relay connectivity
  3. Ensure enabled is not set to false
  4. Check the bot's public key matches what you're sending to

Messages not being delivered

  1. Check relay URLs are correct (must use wss://)
  2. Verify relays are online and accepting connections
  3. Check for rate limiting (reduce message frequency)

License

MIT