> ## Documentation Index
> Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 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`) dan `openclaw channels add` tetap menampilkan Nostr dari katalog channel bersama.
* Jika build Anda mengecualikan Nostr bawaan, instal paket npm secara langsung.

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
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):

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw plugins install --link <path-to-local-nostr-plugin>
```

Mulai ulang Gateway setelah menginstal atau mengaktifkan plugin.

### Penyiapan noninteraktif

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
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

1. Buat keypair Nostr (jika diperlukan):

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
# Using nak
nak key generate
```

2. Tambahkan ke config:

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  channels: {
    nostr: {
      privateKey: "${NOSTR_PRIVATE_KEY}",
    },
  },
}
```

3. Ekspor kunci:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
export NOSTR_PRIVATE_KEY="nsec1..."
```

4. 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:

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  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: "openclaw@example.com",
        lud16: "openclaw@example.com",
      },
    },
  },
}
```

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 `allowFrom` yang 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

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  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`.

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  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

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
# Start strfry
docker run -p 7777:7777 ghcr.io/hoytech/strfry
```

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  channels: {
    nostr: {
      privateKey: "${NOSTR_PRIVATE_KEY}",
      relays: ["ws://localhost:7777"],
    },
  },
}
```

### Pengujian manual

1. Catat pubkey bot (npub) dari log.
2. Buka klien Nostr (Damus, Amethyst, dll.).
3. Kirim DM ke pubkey bot.
4. Verifikasi responsnya.

## Pemecahan masalah

### Tidak menerima pesan

* Verifikasi kunci privat valid.
* Pastikan URL relay dapat dijangkau dan menggunakan `wss://` (atau `ws://` untuk lokal).
* Pastikan `enabled` bukan `false`.
* 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 `allowlist` untuk 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](/id/channels) — semua channel yang didukung
* [Pairing](/id/channels/pairing) — autentikasi DM dan alur pairing
* [Grup](/id/channels/groups) — perilaku obrolan grup dan gating mention
* [Routing Channel](/id/channels/channel-routing) — routing sesi untuk pesan
* [Keamanan](/id/gateway/security) — model akses dan hardening
