Developer and self-hosted

Nostr

ステータス: 任意のバンドル Plugin(設定されるまでデフォルトでは無効)。

Nostr はソーシャルネットワーキング向けの分散プロトコルです。このチャンネルにより、OpenClaw は NIP-04 経由で暗号化されたダイレクトメッセージ(DM)を受信し、返信できます。

バンドル Plugin

現在の OpenClaw リリースでは Nostr がバンドル Plugin として同梱されるため、通常のパッケージ済みビルドでは別途インストールする必要はありません。

古いインストール/カスタムインストール

  • オンボーディング(openclaw onboard)と openclaw channels add は、引き続き共有チャンネルカタログから Nostr を表示します。
  • ビルドからバンドルされた Nostr が除外されている場合は、npm パッケージを直接インストールしてください。
openclaw plugins install @openclaw/nostr

現在の公式リリースタグに追従するには、素のパッケージを使用します。再現可能なインストールが必要な場合にのみ、正確なバージョンを固定してください。

ローカルチェックアウトを使用する場合(開発ワークフロー):

openclaw plugins install --link <path-to-local-nostr-plugin>

Plugin のインストール後、または有効化後に Gateway を再起動してください。

非対話型セットアップ

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"

キーを config に保存する代わりに NOSTR_PRIVATE_KEY を環境に保持するには、--use-env を使用します。

クイックセットアップ

  1. 必要に応じて Nostr キーペアを生成します:
# Using nak
nak key generate
  1. config に追加します:
{
  channels: {
    nostr: {
      privateKey: "${NOSTR_PRIVATE_KEY}",
    },
  },
}
  1. キーをエクスポートします:
export NOSTR_PRIVATE_KEY="nsec1..."
  1. Gateway を再起動します。

設定リファレンス

キー デフォルト 説明
privateKey string 必須 nsec または hex 形式の秘密鍵
relays string[] ['wss://relay.damus.io', 'wss://nos.lol'] リレー URL(WebSocket)
dmPolicy string pairing DM アクセスポリシー
allowFrom string[] [] 許可された送信者 pubkey
enabled boolean true チャンネルを有効化/無効化
name string - 表示名
profile object - NIP-01 プロファイルメタデータ

プロファイルメタデータ

プロファイルデータは NIP-01 kind:0 イベントとして公開されます。Control UI(チャンネル -> Nostr -> プロファイル)から管理するか、config で直接設定できます。

例:

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

注意:

  • プロファイル URL は https:// を使用する必要があります。
  • リレーからインポートすると、フィールドがマージされ、ローカルの上書き設定は保持されます。

アクセス制御

DM ポリシー

  • pairing(デフォルト): 不明な送信者にはペアリングコードが送信されます。
  • allowlist: allowFrom 内の pubkey のみが DM できます。
  • open: 公開の受信 DM(allowFrom: ["*"] が必要)。
  • disabled: 受信 DM を無視します。

適用に関する注意:

  • 受信イベントの署名は送信者ポリシーと NIP-04 復号の前に検証されるため、偽造イベントは早期に拒否されます。
  • ペアリング返信は元の DM 本文を処理せずに送信されます。
  • 受信 DM はレート制限され、サイズが大きすぎるペイロードは復号前に破棄されます。

許可リストの例

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

キー形式

受け入れられる形式:

  • 秘密鍵: nsec... または 64 文字の hex
  • Pubkey(allowFrom): npub... または hex

リレー

デフォルト: relay.damus.ionos.lol

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

ヒント:

  • 冗長性のために 2〜3 個のリレーを使用します。
  • 多すぎるリレーは避けてください(レイテンシ、重複)。
  • 有料リレーは信頼性を向上できる場合があります。
  • ローカルリレーはテストに適しています(ws://localhost:7777)。

プロトコル対応

NIP ステータス 説明
NIP-01 対応 基本イベント形式 + プロファイルメタデータ
NIP-04 対応 暗号化 DM(kind:4
NIP-17 予定 ギフトラップ DM
NIP-44 予定 バージョン付き暗号化

テスト

ローカルリレー

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

手動テスト

  1. ログから bot の pubkey(npub)を確認します。
  2. Nostr クライアント(Damus、Amethyst など)を開きます。
  3. bot の pubkey に DM します。
  4. 応答を確認します。

トラブルシューティング

メッセージを受信できない

  • 秘密鍵が有効であることを確認します。
  • リレー URL に到達可能で、wss://(またはローカルでは ws://)を使用していることを確認します。
  • enabledfalse ではないことを確認します。
  • リレー接続エラーについて Gateway ログを確認します。

応答を送信できない

  • リレーが書き込みを受け入れることを確認します。
  • 送信接続を確認します。
  • リレーのレート制限に注意します。

重複した応答

  • 複数のリレーを使用している場合は想定される動作です。
  • メッセージはイベント ID で重複排除され、最初の配信のみが応答をトリガーします。

セキュリティ

  • 秘密鍵をコミットしないでください。
  • キーには環境変数を使用してください。
  • 本番 bot では allowlist を検討してください。
  • 署名は送信者ポリシーの前に検証され、送信者ポリシーは復号前に適用されるため、偽造イベントは早期に拒否され、不明な送信者が完全な暗号処理を強制することはできません。

制限事項(MVP)

  • ダイレクトメッセージのみ(グループチャットなし)。
  • メディア添付なし。
  • NIP-04 のみ(NIP-17 ギフトラップは予定)。

関連