Nostr

Status: Opcjonalny plugin (domyslnie wylaczony).

Nostr to zdecentralizowany protokol do sieci spolecznosciowych. Ten kanal umozliwia OpenClaw odbieranie i odpowiadanie na zaszyfrowane wiadomosci bezposrednie (DM) przez NIP-04.

Instalacja (na zadanie)

Onboarding (zalecany)

  • Kreator onboardingu (openclaw onboard) i openclaw channels add wyswietlaja opcjonalne pluginy kanalow.
  • Wybranie Nostr powoduje monit o instalacje pluginu na zadanie.

Domyslne instalacji:

  • Kanal dev + dostepny checkout git: uzywa lokalnej sciezki pluginu.
  • Stable/Beta: pobiera z npm.

Mozesz zawsze nadpisac wybor w monicie.

Instalacja reczna

openclaw plugins install @openclaw/nostr

Uzyj lokalnego checkoutu (workflow dev):

openclaw plugins install --link <path-to-openclaw>/extensions/nostr

Zrestartuj Gateway po zainstalowaniu lub wlaczeniu pluginow.

Szybka konfiguracja

  1. Wygeneruj pare kluczy Nostr (jesli potrzeba):
# Uzywajac nak
nak key generate
  1. Dodaj do konfiguracji:
{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}"
    }
  }
}
  1. Eksportuj klucz:
export NOSTR_PRIVATE_KEY="nsec1..."
  1. Zrestartuj Gateway.

Referencja konfiguracji

KluczTypDomyslnieOpis
privateKeystringwymaganyKlucz prywatny w formacie nsec lub hex
relaysstring[]['wss://relay.damus.io', 'wss://nos.lol']Adresy URL przekaznikow (WebSocket)
dmPolicystringpairingPolityka dostepu DM
allowFromstring[][]Dozwolone klucze publiczne nadawcow
enabledbooleantrueWlacz/wylacz kanal
namestring-Nazwa wyswietlana
profileobject-Metadane profilu NIP-01

Metadane profilu

Dane profilu sa publikowane jako zdarzenie NIP-01 kind:0. Mozesz nimi zarzadzac z interfejsu sterowania (Channels -> Nostr -> Profile) lub ustawic bezposrednio w konfiguracji.

Przyklad:

{
  "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]"
      }
    }
  }
}

Uwagi:

  • Adresy URL profilu musza uzywac https://.
  • Importowanie z przekaznikow laczy pola i zachowuje lokalne nadpisania.

Kontrola dostepu

Polityki DM

  • pairing (domyslnie): nieznani nadawcy otrzymuja kod parowania.
  • allowlist: tylko klucze publiczne w allowFrom moga pisac DM.
  • open: publiczne przychodzace DM (wymaga allowFrom: ["*"]).
  • disabled: ignoruj przychodzace DM.

Przyklad listy dozwolonych

{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}",
      "dmPolicy": "allowlist",
      "allowFrom": ["npub1abc...", "npub1xyz..."]
    }
  }
}

Formaty kluczy

Akceptowane formaty:

  • Klucz prywatny: nsec... lub 64-znakowy hex
  • Klucze publiczne (allowFrom): npub... lub hex

Przekazniki

Domyslne: relay.damus.io i nos.lol.

{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}",
      "relays": ["wss://relay.damus.io", "wss://relay.primal.net", "wss://nostr.wine"]
    }
  }
}

Wskazowki:

  • Uzyj 2-3 przekaznikow dla redundancji.
  • Unikaj zbyt wielu przekaznikow (opoznienie, duplikacja).
  • Platne przekazniki moga poprawic niezawodnosc.
  • Lokalne przekazniki sa odpowiednie do testow (ws://localhost:7777).

Obsluga protokolu

NIPStatusOpis
NIP-01ObslugiwanyPodstawowy format zdarzen + metadane profilu
NIP-04ObslugiwanyZaszyfrowane DM (kind:4)
NIP-17PlanowanyDM w opakowaniu prezentowym
NIP-44PlanowanyWersjonowane szyfrowanie

Testowanie

Lokalny przekaznik

# Uruchom strfry
docker run -p 7777:7777 ghcr.io/hoytech/strfry
{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}",
      "relays": ["ws://localhost:7777"]
    }
  }
}

Test reczny

  1. Zanotuj klucz publiczny bota (npub) z logow.
  2. Otworz klienta Nostr (Damus, Amethyst itp.).
  3. Wyslij DM na klucz publiczny bota.
  4. Zweryfikuj odpowiedz.

Rozwiazywanie problemow

Brak odbierania wiadomosci

  • Zweryfikuj, czy klucz prywatny jest prawidlowy.
  • Upewnij sie, ze adresy URL przekaznikow sa osiagalne i uzywaja wss:// (lub ws:// dla lokalnych).
  • Potwierdz, ze enabled nie jest ustawione na false.
  • Sprawdz logi Gateway pod katem bledow polaczenia z przekaznikiem.

Brak wysylania odpowiedzi

  • Sprawdz, czy przekaznik akceptuje zapisy.
  • Zweryfikuj lacznosc wychodzaca.
  • Obserwuj limity szybkosci przekaznikow.

Zduplikowane odpowiedzi

  • Oczekiwane przy uzywaniu wielu przekaznikow.
  • Wiadomosci sa deduplikowane wedlug ID zdarzenia; tylko pierwsze dostarczenie wyzwala odpowiedz.

Bezpieczenstwo

  • Nigdy nie commituj kluczy prywatnych.
  • Uzywaj zmiennych srodowiskowych dla kluczy.
  • Rozważ allowlist dla botow produkcyjnych.

Ograniczenia (MVP)

  • Tylko wiadomosci bezposrednie (brak czatow grupowych).
  • Brak zalacznikow mediow.
  • Tylko NIP-04 (NIP-17 gift-wrap planowany).