Developer and self-hosted
Nostr
Status: Plugin bawaan opsional (dinonaktifkan secara default hingga dikonfigurasi).
Nostr adalah protokol terdesentralisasi untuk jejaring sosial. Channel ini memungkinkan OpenClaw menerima dan merespons pesan langsung (DM) terenkripsi melalui NIP-04.
Plugin bawaan
Rilis OpenClaw saat ini menyertakan Nostr sebagai Plugin bawaan, sehingga build paket normal tidak memerlukan instalasi terpisah.
Instalasi lama/kustom
- Onboarding (
openclaw onboard) danopenclaw channels addtetap menampilkan Nostr dari katalog channel bersama. - Jika build Anda mengecualikan Nostr bawaan, instal paket npm secara langsung.
openclaw plugins install @openclaw/nostr
Gunakan paket polos untuk mengikuti tag rilis resmi saat ini. Sematkan versi persis hanya saat Anda memerlukan instalasi yang dapat direproduksi.
Gunakan checkout lokal (alur kerja dev):
openclaw plugins install --link <path-to-local-nostr-plugin>
Mulai ulang Gateway setelah menginstal atau mengaktifkan plugin.
Penyiapan noninteraktif
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"
Gunakan --use-env untuk menyimpan NOSTR_PRIVATE_KEY di environment alih-alih menyimpan kunci dalam config.
Penyiapan cepat
- Buat keypair Nostr (jika diperlukan):
# Using nak
nak key generate
- Tambahkan ke config:
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
},
},
}
- Ekspor kunci:
export NOSTR_PRIVATE_KEY="nsec1..."
- Mulai ulang Gateway.
Referensi konfigurasi
| Kunci | Tipe | Default | Deskripsi |
|---|---|---|---|
privateKey |
string | wajib | Kunci privat dalam format nsec atau hex |
relays |
string[] | ['wss://relay.damus.io', 'wss://nos.lol'] |
URL relay (WebSocket) |
dmPolicy |
string | pairing |
Kebijakan akses DM |
allowFrom |
string[] | [] |
Pubkey pengirim yang diizinkan |
enabled |
boolean | true |
Aktifkan/nonaktifkan channel |
name |
string | - | Nama tampilan |
profile |
object | - | Metadata profil NIP-01 |
Metadata profil
Data profil diterbitkan sebagai event NIP-01 kind:0. Anda dapat mengelolanya dari Control UI (Channels -> Nostr -> Profile) atau mengaturnya langsung di config.
Contoh:
{
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]",
},
},
},
}
Catatan:
- URL profil harus menggunakan
https://. - Mengimpor dari relay menggabungkan field dan mempertahankan override lokal.
Kontrol akses
Kebijakan DM
- pairing (default): pengirim tidak dikenal menerima kode pairing.
- allowlist: hanya pubkey di
allowFromyang dapat mengirim DM. - open: DM masuk publik (memerlukan
allowFrom: ["*"]). - disabled: abaikan DM masuk.
Catatan penegakan:
- Tanda tangan event masuk diverifikasi sebelum kebijakan pengirim dan dekripsi NIP-04, sehingga event palsu ditolak sejak awal.
- Balasan pairing dikirim tanpa memproses isi DM asli.
- DM masuk dibatasi lajunya dan payload terlalu besar dibuang sebelum dekripsi.
Contoh allowlist
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
dmPolicy: "allowlist",
allowFrom: ["npub1abc...", "npub1xyz..."],
},
},
}
Format kunci
Format yang diterima:
- Kunci privat:
nsec...atau hex 64 karakter - Pubkey (
allowFrom):npub...atau hex
Relay
Default: relay.damus.io dan nos.lol.
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
relays: ["wss://relay.damus.io", "wss://relay.primal.net", "wss://nostr.wine"],
},
},
}
Tips:
- Gunakan 2-3 relay untuk redundansi.
- Hindari terlalu banyak relay (latensi, duplikasi).
- Relay berbayar dapat meningkatkan keandalan.
- Relay lokal cocok untuk pengujian (
ws://localhost:7777).
Dukungan protokol
| NIP | Status | Deskripsi |
|---|---|---|
| NIP-01 | Didukung | Format event dasar + metadata profil |
| NIP-04 | Didukung | DM terenkripsi (kind:4) |
| NIP-17 | Direncanakan | DM berbungkus hadiah |
| NIP-44 | Direncanakan | Enkripsi berversi |
Pengujian
Relay lokal
# Start strfry
docker run -p 7777:7777 ghcr.io/hoytech/strfry
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
relays: ["ws://localhost:7777"],
},
},
}
Pengujian manual
- Catat pubkey bot (npub) dari log.
- Buka klien Nostr (Damus, Amethyst, dll.).
- Kirim DM ke pubkey bot.
- Verifikasi responsnya.
Pemecahan masalah
Tidak menerima pesan
- Verifikasi kunci privat valid.
- Pastikan URL relay dapat dijangkau dan menggunakan
wss://(atauws://untuk lokal). - Pastikan
enabledbukanfalse. - Periksa log Gateway untuk error koneksi relay.
Tidak mengirim respons
- Periksa apakah relay menerima penulisan.
- Verifikasi konektivitas keluar.
- Perhatikan batas laju relay.
Respons duplikat
- Wajar saat menggunakan beberapa relay.
- Pesan dideduplikasi berdasarkan ID event; hanya pengiriman pertama yang memicu respons.
Keamanan
- Jangan pernah commit kunci privat.
- Gunakan variabel environment untuk kunci.
- Pertimbangkan
allowlistuntuk bot produksi. - Tanda tangan diverifikasi sebelum kebijakan pengirim, dan kebijakan pengirim ditegakkan sebelum dekripsi, sehingga event palsu ditolak sejak awal dan pengirim tidak dikenal tidak dapat memaksa kerja kripto penuh.
Keterbatasan (MVP)
- Hanya pesan langsung (tanpa obrolan grup).
- Tidak ada lampiran media.
- Hanya NIP-04 (gift-wrap NIP-17 direncanakan).
Terkait
- Ikhtisar Channel — semua channel yang didukung
- Pairing — autentikasi DM dan alur pairing
- Grup — perilaku obrolan grup dan gating mention
- Routing Channel — routing sesi untuk pesan
- Keamanan — model akses dan hardening