On this page
On this page
Developer and self-hosted
Nostr
Nostr is a downloadable channel plugin (@openclaw/nostr) that lets OpenClaw receive and answer NIP-04 encrypted direct messages over Nostr relays. One account per gateway; DMs only.
Install
Use the bare package spec to follow the current official release tag. Pin an exact version only when you need a reproducible install.
From a local checkout (dev workflows):
Installing or enabling the plugin applies it to a running Gateway; check the application result. Onboarding (openclaw onboard) and openclaw channels add surface Nostr from the shared channel catalog once the plugin is installed.
Non-interactive setup
Use --use-env to keep NOSTR_PRIVATE_KEY in the environment instead of storing the key in config (default account only).
Quick setup
- Generate a Nostr keypair (if needed):
- Add to config:
- Export the key:
- Restart the gateway.
Configuration reference
| Key | Type | Default | Description |
|---|---|---|---|
privateKey |
string | required | Private key in nsec or hex format; secret refs allowed |
relays |
string[] | ['wss://relay.damus.io', 'wss://nos.lol'] |
Relay URLs (WebSocket) |
dmPolicy |
string | pairing |
DM access policy |
allowFrom |
string[] | [] |
Allowed sender pubkeys |
enabled |
boolean | true |
Enable/disable channel |
name |
string | - | Display name |
profile |
object | - | NIP-01 profile metadata |
Profile metadata
Profile data is published as a NIP-01 kind:0 event. You can manage it from the Control UI (Channels -> Nostr -> Profile) or set it directly in config.
Example:
Notes:
- Profile URLs must use
https://. - Importing from relays merges fields and preserves local overrides.
Access control
DM policies
- pairing (default): unknown senders get a pairing code.
- allowlist: only pubkeys in
allowFromcan DM. - open: public inbound DMs (requires
allowFrom: ["*"]). - disabled: ignore inbound DMs.
Enforcement notes:
- Inbound event signatures are verified before sender policy and NIP-04 decryption, so forged events are rejected early.
- Pairing replies are sent without decrypting or processing the original DM body.
- Inbound DMs are rate-limited (globally and per sender) and oversized payloads are dropped before decrypt.
Allowlist example
Key formats
Accepted formats:
- Private key:
nsec...or 64-char hex - Pubkeys (
allowFrom):npub...or hex
Relays
Defaults: relay.damus.io and nos.lol.
Tips:
- Use 2-3 relays for redundancy.
- Avoid too many relays (latency, duplication).
- Paid relays can improve reliability.
- Local relays are fine for testing (
ws://localhost:7777).
Protocol support
| NIP | Status | Description |
|---|---|---|
| NIP-01 | Supported | Basic event format + profile metadata |
| NIP-04 | Supported | Encrypted DMs (kind:4) |
| NIP-17 | Planned | Gift-wrapped DMs |
| NIP-44 | Planned | Versioned encryption |
Testing
Local relay
Manual test
- Note the bot pubkey from gateway logs or
openclaw channels status(hex; convert to npub in your client if needed). - Open a Nostr client (Amethyst, Damus, etc.).
- DM the bot pubkey.
- Verify the response.
Troubleshooting
Not receiving messages
- Verify the private key is valid.
- Check that relay URLs are reachable and use
wss://(orws://for local). - Confirm
enabledis notfalse. - Check gateway logs for relay connection errors.
Not sending responses
- Check relay accepts writes.
- Verify outbound connectivity.
- Watch for relay rate limits.
Duplicate responses
- Expected when using multiple relays.
- Messages are deduplicated by event ID; only the first delivery triggers a response.
Security
- Never commit private keys.
- Use environment variables for keys.
- Consider
allowlistfor production bots. - Signatures are verified before sender policy, and sender policy is enforced before decrypt, so forged events are rejected early and unknown senders cannot force full crypto work.
Limitations (MVP)
- Direct messages only (no group chats).
- No media attachments.
- NIP-04 only (NIP-17 gift-wrap planned).
Related
- Channels Overview — all supported channels
- Pairing — DM authentication and pairing flow
- Groups — group chat behavior and mention gating
- Channel routing — session routing for messages
- Security — access model and hardening