OpenClaw

OpenClaw Nostr チャンネル

分散型
上級

オプションプラグインを通じて、OpenClaw を Nostr 分散型ネットワークに接続します。この統合により、AI アシスタントが任意の Nostr relay を介して NIP-04 暗号化ダイレクトメッセージを受信し、応答できるようになります。中央集権型サーバーもアカウント登録も不要で、暗号鍵ペアと relay 接続だけで利用できます。検閲耐性と自己主権を重視するプライバシー志向のデプロイに最適です。

基本情報
難易度上級
カテゴリ分散型
対応機能数2 / 6

Nostr 対応機能

テキストメッセージ

対応

メディア・ファイル

非対応

リアクション

対応

スレッド

非対応

音声メッセージ

非対応

グループチャット

非対応

Nostr 前提条件

  • OpenClaw Gateway がインストールされ、実行されていること
  • Nostr 鍵ペア(nsec または hex 形式の秘密鍵)— 'nak key generate' で生成できます
  • WebSocket 経由でアクセス可能な Nostr relay が少なくとも1つあること(例: wss://relay.damus.io)
  • サーバーに Node.js 18 以上がインストールされていること

Nostr クイックセットアップ

1

Nostr プラグインのインストール

'openclaw plugins install @openclaw/nostr' を実行して Nostr チャネルを追加します。または、'openclaw onboard' や 'openclaw channels add' を使用し、プラグイン一覧から Nostr を選択することもできます。インストール後に Gateway を再起動してください。

2

鍵ペアの生成と設定

'nak key generate' を使用して Nostr 鍵ペアを生成します。秘密鍵を環境変数として設定し(export NOSTR_PRIVATE_KEY="nsec1...")、openclaw.json の設定で ${NOSTR_PRIVATE_KEY} として参照します。

3

起動とテスト DM の送信

'openclaw start' で Gateway を再起動します。起動ログでボットの公開鍵(npub)を確認してください。任意の Nostr クライアント(例: Damus、Amethyst、Primal)を開き、ボットの npub に暗号化 DM を送信します。デフォルトのペアリングポリシーを使用している場合は、CLI で送信者を承認してください。

Nostr 設定例

config.json
{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}",
      "relays": [
        "wss://relay.damus.io",
        "wss://nos.lol"
      ],
      "dmPolicy": "pairing"
    }
  }
}

Nostr 詳細ドキュメント

アーキテクチャの概要

中央集権型メッセージングプラットフォームとは異なり、Nostr は独立した relay サーバーを通じてメッセージが配信される分散型プロトコルです。OpenClaw は WebSocket 経由で1つ以上の relay に接続し、ボットの公開鍵宛ての NIP-04 暗号化ダイレクトメッセージを購読します。 メッセージの流れはシンプルです: 1. ユーザーが任意の Nostr クライアント(Damus、Amethyst、Primal など)から暗号化 DM を送信します 2. メッセージはユーザーが公開している relay に伝播します 3. OpenClaw の relay 購読がイベントを検知します 4. Gateway がメッセージを復号し、AI エージェントで処理した後、応答を暗号化して設定済みの relay に公開します Nostr は relay ベースのため、単一障害点がありません。1つの relay がダウンしても、他の relay を通じてメッセージは流れ続けます。ボットとユーザーがまったく同じ relay を使用する必要はなく、relay 同士がイベントを交換することが一般的です。
ボットの公開鍵は秘密鍵から導出され、Gateway の起動ログに表示されます。この npub をユーザーに共有して、ボットにメッセージを送信できるようにしてください。
Nostr には「オンラインステータス」の概念がありません。メッセージは relay に保存され、クライアントが接続した際に配信されます。

プラグインのインストール

Nostr チャネルは、コア Gateway に組み込まれているのではなく、オプションの OpenClaw プラグインとして配布されます。これにより、基本インストールを軽量に保ちつつ、必要に応じて Nostr サポートを追加できます。 インストール方法はいくつかあります: • **npm(推奨):** 'openclaw plugins install @openclaw/nostr' を実行して安定版をインストールします。 • **ベータチャネル:** 'openclaw plugins install @openclaw/nostr@beta' でプレリリース機能を利用できます。 • **ローカル開発:** プラグインリポジトリをクローンし、'openclaw plugins install --link /path/to/local/checkout' でリンクします。 • **対話型セットアップ:** 'openclaw onboard' または 'openclaw channels add' を実行し、一覧から Nostr を選択します。 インストール後、プラグインを有効にするために Gateway を再起動してください。
'openclaw plugins list' を実行して、Nostr プラグインがインストールされ、有効になっていることを確認してください。

鍵の生成と管理

Nostr のアイデンティティは公開鍵暗号に基づいています。ボットのアイデンティティはその鍵ペアです。秘密鍵(nsec)は署名と復号に使用され、公開鍵(npub)はアドレスとして使用されます。 'nak' CLI ツールを使用して鍵ペアを生成します: 1. nak のインストール: 'go install github.com/fiatjaf/nak@latest'(またはリリースページからダウンロード) 2. 生成: 'nak key generate' — hex 形式で秘密鍵が出力されます 3. 公開鍵の導出: 'nak key public <hex-private-key>' — 必要に応じて npub に変換します OpenClaw は nsec(Bech32 エンコード)と 64 文字の hex 形式の両方の秘密鍵を受け付けます。allowFrom の公開鍵は npub または hex 形式で指定できます。
openclaw.json
{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}"
    }
  }
}
秘密鍵を openclaw.json に直接ハードコードしないでください。必ず環境変数(例: ${NOSTR_PRIVATE_KEY})を使用し、シェルまたは .env ファイルで 'export NOSTR_PRIVATE_KEY="nsec1..."' のように設定してください。

relay の設定

relay は Nostr の基盤であり、イベントを保存・配信します。OpenClaw は WebSocket 経由で設定済みの relay に接続し、暗号化 DM の送受信を行います。 デフォルト設定では、よく知られた2つのパブリック relay(relay.damus.io と nos.lol)を使用します。本番環境では、ニーズに合わせてカスタマイズすることをお勧めします。 relay 選択のヒント: • 冗長性とパフォーマンスのバランスを取るため、2〜3 つの relay を使用してください • relay が多すぎると、レイテンシと帯域幅の使用量が増加します • 有料 relay(例: relay.nostr.band)は、より高い信頼性と少ないスパムを提供します • 開発時は、ローカル relay(例: Docker 経由の Strfry)を ws://localhost:7777 で実行できます
openclaw.json
{
  "channels": {
    "nostr": {
      "relays": [
        "wss://relay.damus.io",
        "wss://nos.lol",
        "wss://relay.nostr.band"
      ]
    }
  }
}
パブリック relay は無料ですが、レート制限やスパムの影響を受ける場合があります。有料 relay は一般的により良いパフォーマンスとフィルタリングを提供します。
ボットとユーザーが同じ relay を使用する必要はありません。ほとんどの relay はイベントを互いに交換しています。

DM ポリシー

DM(ダイレクトメッセージ)ポリシーは、Nostr 上で AI アシスタントと対話できるユーザーを制御します。Nostr はオープンな設計のため、AI クォータの不正使用を防ぐためにアクセス制御が特に重要です。 OpenClaw は4つのポリシーをサポートしています: • **pairing(デフォルト)** — 未知の送信者にはペアリングコードが送信されます。'openclaw pairing approve nostr <code>' で承認または拒否します。承認後は自由にチャットできるようになります。 • **allowlist** — allowFrom に記載された公開鍵(npub または hex)のみがボットにメッセージを送信できます。それ以外はすべて無視されます。 • **open** — 誰でもボットにメッセージを送信できます。有効にするには allowFrom: ["*"] の設定が必要です。注意して使用してください。 • **disabled** — ボットは受信 DM に一切応答しません。
openclaw.json
{
  "channels": {
    "nostr": {
      "dmPolicy": "allowlist",
      "allowFrom": [
        "npub1abc...xyz",
        "npub1def...uvw"
      ]
    }
  }
}

プロフィールメタデータ(NIP-01)

NIP-01 の kind:0 メタデータイベントを使用して、Nostr ネットワーク上にボットのプロフィールを公開できます。これにより、Nostr クライアントでボットが検索可能になり、ユーザーがボットの npub を検索すると名前、アバター、自己紹介などの詳細が表示されます。 設定可能なプロフィールフィールド: • **name** — ユーザー名(例: "openclaw-bot") • **display_name** — 表示名 • **about** — 自己紹介 / 説明文 • **picture** — アバター URL(HTTPS 必須) • **banner** — バナー画像 URL(HTTPS 必須) • **website** — ボットまたはプロジェクトの Web サイト • **nip05** — NIP-05 検証識別子(例: "bot@yourdomain.com") • **lud16** — zap 受信用の Lightning アドレス
openclaw.json
{
  "channels": {
    "nostr": {
      "profile": {
        "name": "openclaw-bot",
        "display_name": "OpenClaw AI Assistant",
        "about": "AI-powered assistant on Nostr. DM me!",
        "picture": "https://example.com/bot-avatar.png",
        "nip05": "bot@yourdomain.com"
      }
    }
  }
}
NIP-05 検証(bot@yourdomain.com)により、ほとんどの Nostr クライアントでチェックマークが表示され、ユーザーがボットの身元を確認するのに役立ちます。
すべての画像 URL(picture、banner)は HTTPS を使用する必要があります。

暗号化とプロトコルサポート

OpenClaw の Nostr 統合におけるすべてのダイレクトメッセージは NIP-04 暗号化を使用しています。メッセージは、送信者と受信者の鍵ペアから ECDH(楕円曲線ディフィー・ヘルマン)により導出された共有秘密で暗号化されます。 現在サポートされている NIP: • **NIP-01** — 基本プロトコル:イベント、購読、メタデータ(kind:0) • **NIP-04** — 暗号化ダイレクトメッセージ(kind:4) 今後サポート予定: • **NIP-17** — ギフトラップ型プライベートメッセージ(メタデータプライバシーの向上) • **NIP-44** — バージョン管理された暗号化(より強力な暗号プリミティブ) NIP-04 はすべての Nostr クライアントで広くサポートされていますが、既知のメタデータ漏洩があります(relay オペレーターは誰が誰にメッセージを送っているか確認できますが、内容は見えません)。NIP-17 と NIP-44 は普及次第、これらの制限に対処する予定です。
NIP-04 はメッセージの内容を暗号化しますが、メタデータは暗号化しません。relay オペレーターは送信者/受信者の公開鍵とタイムスタンプを確認できます。
最大限のプライバシーを確保するには、ボット専用の鍵ペアを使用し、有料またはセルフホストの relay 経由で接続してください。

ローカル relay でのテスト

開発およびテスト用に、パブリック relay に接続する代わりにローカルの Nostr relay を実行できます。推奨される方法は、Docker で簡単に実行できる高性能 relay である Strfry を使用することです。 セットアップ手順: 1. relay を実行: 'docker run -p 7777:7777 hoytech/strfry' 2. OpenClaw をローカル relay に接続するよう設定: ws://localhost:7777 3. Gateway を起動 4. ローカル relay に接続するよう設定した Nostr クライアントを使用してテスト DM を送信 これにより、テストがパブリック Nostr ネットワークから分離され、より速いイテレーションサイクルが可能になります。
openclaw.json (development)
{
  "channels": {
    "nostr": {
      "relays": ["ws://localhost:7777"],
      "dmPolicy": "open",
      "allowFrom": ["*"]
    }
  }
}
ローカルテスト時は dmPolicy: 'open' と allowFrom: ['*'] を使用して、ペアリングフローをスキップしてください。

Nostr 設定リファレンス

privateKey
Type: stringDefault: (required)

nsec(Bech32)または 64 文字の hex 形式の Nostr 秘密鍵。環境変数の参照を使用してください。

relays
Type: string[]Default: ["wss://relay.damus.io", "wss://nos.lol"]

接続する Nostr relay の WebSocket URL リスト

dmPolicy
Type: stringDefault: "pairing"

DM アクセス制御ポリシー: 'pairing'、'allowlist'、'open'、または 'disabled'

allowFrom
Type: string[]Default: []

ボットへのメッセージ送信を許可する公開鍵(npub または hex)(dmPolicy が 'allowlist' の場合)

enabled
Type: booleanDefault: true

Nostr チャネルの有効/無効を切り替えます

name
Type: stringDefault: ""

このチャネルインスタンスの表示名

profile.name
Type: stringDefault: ""

NIP-01 メタデータとして公開されるボットのユーザー名

profile.display_name
Type: stringDefault: ""

NIP-01 メタデータとして公開される表示名

profile.about
Type: stringDefault: ""

NIP-01 メタデータとして公開されるボットの自己紹介 / 説明文

profile.picture
Type: stringDefault: ""

NIP-01 メタデータとして公開されるアバター画像 URL(HTTPS 必須)

profile.banner
Type: stringDefault: ""

NIP-01 メタデータとして公開されるバナー画像 URL(HTTPS 必須)

profile.website
Type: stringDefault: ""

NIP-01 メタデータとして公開される Web サイト URL

profile.nip05
Type: stringDefault: ""

NIP-05 検証識別子(例: 'bot@yourdomain.com')

profile.lud16
Type: stringDefault: ""

zap 受信用の Lightning アドレス

Nostr よくある質問

Nostr トラブルシューティング

ボットは起動するがメッセージを受信しない

relay への接続が失敗したか、送信者がボットの購読先とは異なる relay に公開している可能性があります。

Gateway のログで WebSocket 接続エラーを確認してください。relay の URL が正しくアクセス可能であることを確認してください。送信者も使用している一般的なパブリック relay(例: wss://relay.damus.io)を追加してみてください。秘密鍵が正しく設定されていることを確認してください。
エラー: invalid private key format

秘密鍵が有効な nsec(Bech32)または 64 文字の hex 形式ではないか、環境変数が設定されていません。

環境変数が正しくエクスポートされていることを確認してください: 'echo $NOSTR_PRIVATE_KEY'。鍵が 'nsec1' で始まる(Bech32 形式)か、正確に 64 文字の hex であることを確認してください。必要に応じて 'nak key generate' で再生成してください。
メッセージは送信されるが受信者に届かない

ボットの設定済み relay と受信者のクライアント relay が重複していないため、イベントが伝播できません。

受信者の Nostr クライアントも使用している relay を少なくとも1つ追加してください。relay.damus.io や nos.lol などの一般的なパブリック relay はほとんどのクライアントで使用されています。受信者の Nostr クライアントプロフィールの relay リストを確認してください。
インストール後にプラグインが見つからない

プラグインのインストール後に Gateway が再起動されていないか、インストールがサイレントに失敗しています。

'openclaw plugins list' を実行して Nostr プラグインがインストールされていることを確認してください。一覧にない場合は、'openclaw plugins install @openclaw/nostr' を再実行してください。インストール後に 'openclaw start' で Gateway を再起動してください。