Developer and self-hosted
Nostr
Status: Optionele gebundelde Plugin (standaard uitgeschakeld totdat deze is geconfigureerd).
Nostr is een gedecentraliseerd protocol voor sociale netwerken. Dit kanaal stelt OpenClaw in staat versleutelde directe berichten (DM's) te ontvangen en te beantwoorden via NIP-04.
Gebundelde Plugin
Huidige OpenClaw-releases leveren Nostr als gebundelde Plugin, dus normale verpakte builds hebben geen aparte installatie nodig.
Oudere/aangepaste installaties
- Onboarding (
openclaw onboard) enopenclaw channels addtonen Nostr nog steeds vanuit de gedeelde kanaalcatalogus. - Als je build gebundelde Nostr uitsluit, installeer dan het npm-pakket direct.
openclaw plugins install @openclaw/nostr
Gebruik het kale pakket om de huidige officiele release-tag te volgen. Pin alleen een exacte versie wanneer je een reproduceerbare installatie nodig hebt.
Gebruik een lokale checkout (dev-workflows):
openclaw plugins install --link <path-to-local-nostr-plugin>
Herstart de Gateway na het installeren of inschakelen van plugins.
Niet-interactieve configuratie
openclaw channels add --channel nostr --private-key "$NOSTR_PRIVATE_KEY"
openclaw channels add --channel nostr --private-key "$NOSTR_PRIVATE_KEY" --relay-urls "wss://relay.damus.io,wss://relay.primal.net"
Gebruik --use-env om NOSTR_PRIVATE_KEY in de omgeving te houden in plaats van de sleutel in de config op te slaan.
Snelle configuratie
- Genereer een Nostr-sleutelpaar (indien nodig):
# Using nak
nak key generate
- Voeg toe aan config:
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
},
},
}
- Exporteer de sleutel:
export NOSTR_PRIVATE_KEY="nsec1..."
- Herstart de Gateway.
Configuratiereferentie
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
privateKey |
string | vereist | Privesleutel in nsec- of hex-indeling |
relays |
string[] | ['wss://relay.damus.io', 'wss://nos.lol'] |
Relay-URL's (WebSocket) |
dmPolicy |
string | pairing |
Toegangsbeleid voor DM's |
allowFrom |
string[] | [] |
Toegestane pubkeys van afzenders |
enabled |
boolean | true |
Kanaal inschakelen/uitschakelen |
name |
string | - | Weergavenaam |
profile |
object | - | NIP-01-profielmetadata |
Profielmetadata
Profielgegevens worden gepubliceerd als een NIP-01 kind:0-event. Je kunt dit beheren vanuit de Control UI (Channels -> Nostr -> Profile) of direct instellen in config.
Voorbeeld:
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
profile: {
name: "openclaw",
displayName: "OpenClaw",
about: "Personal assistant DM bot",
picture: "https://example.com/avatar.png",
banner: "https://example.com/banner.png",
website: "https://example.com",
nip05: "[email protected]",
lud16: "[email protected]",
},
},
},
}
Opmerkingen:
- Profiel-URL's moeten
https://gebruiken. - Importeren vanuit relays voegt velden samen en behoudt lokale overschrijvingen.
Toegangsbeheer
DM-beleid
- pairing (standaard): onbekende afzenders krijgen een koppelingscode.
- allowlist: alleen pubkeys in
allowFromkunnen DM'en. - open: openbare inkomende DM's (vereist
allowFrom: ["*"]). - disabled: negeer inkomende DM's.
Handhavingsopmerkingen:
- Handtekeningen van inkomende events worden geverifieerd voor afzenderbeleid en NIP-04-ontsleuteling, zodat vervalste events vroeg worden geweigerd.
- Koppelingsantwoorden worden verzonden zonder de oorspronkelijke DM-body te verwerken.
- Inkomende DM's worden rate-limited en te grote payloads worden voor ontsleuteling gedropt.
Voorbeeld van allowlist
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
dmPolicy: "allowlist",
allowFrom: ["npub1abc...", "npub1xyz..."],
},
},
}
Sleutelindelingen
Geaccepteerde indelingen:
- Privesleutel:
nsec...of 64-tekens hex - Pubkeys (
allowFrom):npub...of hex
Relays
Standaarden: relay.damus.io en nos.lol.
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
relays: ["wss://relay.damus.io", "wss://relay.primal.net", "wss://nostr.wine"],
},
},
}
Tips:
- Gebruik 2-3 relays voor redundantie.
- Vermijd te veel relays (latentie, duplicatie).
- Betaalde relays kunnen de betrouwbaarheid verbeteren.
- Lokale relays zijn prima voor testen (
ws://localhost:7777).
Protocolondersteuning
| NIP | Status | Beschrijving |
|---|---|---|
| NIP-01 | Ondersteund | Basis-eventindeling + profielmetadata |
| NIP-04 | Ondersteund | Versleutelde DM's (kind:4) |
| NIP-17 | Gepland | Gift-wrapped DM's |
| NIP-44 | Gepland | Versleuteling met versies |
Testen
Lokale relay
# Start strfry
docker run -p 7777:7777 ghcr.io/hoytech/strfry
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
relays: ["ws://localhost:7777"],
},
},
}
Handmatige test
- Noteer de bot-pubkey (npub) uit de logs.
- Open een Nostr-client (Damus, Amethyst, enz.).
- Stuur een DM naar de bot-pubkey.
- Controleer het antwoord.
Problemen oplossen
Ontvangt geen berichten
- Controleer of de privesleutel geldig is.
- Zorg dat relay-URL's bereikbaar zijn en
wss://gebruiken (ofws://voor lokaal). - Bevestig dat
enablednietfalseis. - Controleer Gateway-logs op relay-verbindingsfouten.
Verstuurt geen antwoorden
- Controleer of de relay schrijfbewerkingen accepteert.
- Controleer uitgaande connectiviteit.
- Let op rate limits van relays.
Dubbele antwoorden
- Verwacht bij gebruik van meerdere relays.
- Berichten worden ontdubbeld op event-ID; alleen de eerste levering triggert een antwoord.
Beveiliging
- Commit nooit privesleutels.
- Gebruik omgevingsvariabelen voor sleutels.
- Overweeg
allowlistvoor productiebots. - Handtekeningen worden geverifieerd voor afzenderbeleid, en afzenderbeleid wordt afgedwongen voor ontsleuteling, zodat vervalste events vroeg worden geweigerd en onbekende afzenders geen volledig cryptografisch werk kunnen afdwingen.
Beperkingen (MVP)
- Alleen directe berichten (geen groepschats).
- Geen mediabijlagen.
- Alleen NIP-04 (NIP-17 gift-wrap gepland).
Gerelateerd
- Kanalenoverzicht — alle ondersteunde kanalen
- Koppeling — DM-authenticatie en koppelingsflow
- Groepen — gedrag van groepschats en mention-gating
- Kanaalroutering — sessieroutering voor berichten
- Beveiliging — toegangsmodel en hardening