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 を使用します。
クイックセットアップ
- 必要に応じて Nostr キーペアを生成します:
# Using nak
nak key generate
- config に追加します:
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
},
},
}
- キーをエクスポートします:
export NOSTR_PRIVATE_KEY="nsec1..."
- 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.io と nos.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"],
},
},
}
手動テスト
- ログから bot の pubkey(npub)を確認します。
- Nostr クライアント(Damus、Amethyst など)を開きます。
- bot の pubkey に DM します。
- 応答を確認します。
トラブルシューティング
メッセージを受信できない
- 秘密鍵が有効であることを確認します。
- リレー URL に到達可能で、
wss://(またはローカルではws://)を使用していることを確認します。 enabledがfalseではないことを確認します。- リレー接続エラーについて Gateway ログを確認します。
応答を送信できない
- リレーが書き込みを受け入れることを確認します。
- 送信接続を確認します。
- リレーのレート制限に注意します。
重複した応答
- 複数のリレーを使用している場合は想定される動作です。
- メッセージはイベント ID で重複排除され、最初の配信のみが応答をトリガーします。
セキュリティ
- 秘密鍵をコミットしないでください。
- キーには環境変数を使用してください。
- 本番 bot では
allowlistを検討してください。 - 署名は送信者ポリシーの前に検証され、送信者ポリシーは復号前に適用されるため、偽造イベントは早期に拒否され、不明な送信者が完全な暗号処理を強制することはできません。
制限事項(MVP)
- ダイレクトメッセージのみ(グループチャットなし)。
- メディア添付なし。
- NIP-04 のみ(NIP-17 ギフトラップは予定)。
関連
- チャンネル概要 — 対応しているすべてのチャンネル
- ペアリング — DM 認証とペアリングフロー
- グループ — グループチャットの動作とメンションゲート
- チャンネルルーティング — メッセージのセッションルーティング
- セキュリティ — アクセスモデルと強化