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.
Gateway pairing approval notifications require a running Nostr account. If the account is stopped, approval still succeeds, but the Gateway reports that notification failed.
The CLI's pairing approve nostr ... --notify cannot access the Gateway's Nostr connection, so notification fails even when the account is running. Pairing approval still succeeds; use a Gateway client to request an approval notification.
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.
- With
dmPolicy: "allowlist"and a nonemptyallowFromcontaining only literal hex ornpubpublic keys (optionally prefixed withnostr:), other authors are dropped locally before durable storage and rate accounting. The peer list is not sent to relays. Matching authors still undergo normal authorization. Wildcards, access groups, invalid entries, and other DM policies retain the normal admission path; this does not protect against relay/network flooding or abuse by allowed senders.
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