ソーシャルチャンネル
ブロードキャストやソーシャルフィードの統合。これらはチャネルと2つの点で異なります:メッセージは一般的に公開され、エージェントは双方向の応答者ではなく投稿者として機能することが多い。
ビルドに関する注意: ソーシャルチャンネルは、軽量なデフォルトビルドには含まれていません。これらを使用するには、
--features channels-full(すべてのチャンネル)または特定のフィーチャーフラグ(例:--features channel-twitter)を指定してビルドしてください。ビルド済みバイナリには、デフォルトではこれらのチャンネルは含まれていません。ビルドオプションの完全な一覧については、Channels → Overview を参照してください。
Twitch
Twitch チャットは IRC 用の薄いアダプターです。--features channel-twitch でビルドするか、--features channels-full で組み込んでください。軽量なデフォルトビルドには含まれていません。
Twitch エイリアスの下で、enabled、bot_username、oauth_token、および参加するチャンネルを設定します。mention_only はオプションで、デフォルトは false です。最小限のインスタンスは次のようになります:
[channels.twitch.default]
enabled = true
bot_username = "zeroclaw_bot"
oauth_token = "replace-with-twitch-token"
channels = ["zeroclaw_channel"]
mention_only = true
[peer_groups.twitch_default]
channel = "twitch.default"
external_peers = ["zeroclaw_user"]
- 認証: bot アカウント用の Twitch ユーザーアクセストークンを、
chat:readとchat:editとともに使用します。Twitch CLI を設定した後、そのアカウントでサインインした状態でtwitch token -u -s 'chat:read chat:edit'を実行して生成し、保護された設定インターフェースを通じて保存します。ZeroClaw は値をトリミングし、省略されている場合は必須のoauth:プレフィックスを追加します。 - チャンネル:
channelsのエントリには先頭の#を含めることができます。ZeroClaw は不足している場合にこれを追加し、チャンネル名を小文字に正規化します。 - 受信と送信: チャンネルメッセージには同じチャンネルで応答します。
mention_only = trueを設定すると、bot_usernameに言及していないチャンネルメッセージは無視されます。Twitch がボットのログイン名に対してチャンネル宛てではない IRCPRIVMSGを配信した場合、ZeroClaw はその送信者に返信します。アダプターでは別個の whisper トランスポートは設定しません。 - 書式: Twitch の返信はプレーンテキストを使用し、IRC フレームに収まるよう分割されます。Markdown の書式は保持されません。
- レート制限: アダプターは IRC の
PRIVMSGフレームを直接書き込み、Twitch 固有のレートリミッターも HTTP429のバックオフも備えていません。エージェントの投稿頻度を Twitch Chat の制限内に保ち、バーストの多いワークフローはその発生元でスロットリングしてください。
Bluesky (AT プロトコル)
受信側の送信者は、バインドされたエージェントに対して解決されたピアセットに照らして制御されます。これはエージェントが所属する peer_groups 設定から導出されます。照合では先頭の @ を取り除き、チャネルのネイティブな送信者識別子に対して大文字・小文字を区別せずに行われます。空のセットはすべてを拒否し、"*" を含むセットはすべてを受け入れます。それ以外の場合は、リストに記載された外部ピア(およびピアエージェント)のみが受け入れられます。これはゲートウェイのペアリング(gateway.require_pairing)とは別物であり、ペアリングはチャットチャネルの送信者ではなく HTTP/WebSocket クライアントを認証します。
Bluesky 向けのピアグループでは、channel を bluesky に設定し、許可する送信者を external_peers に列挙します(bluesky の場合、送信者のハンドルまたは DID を指定します。DID はハンドル変更後も有効です)。["*"] を指定すると、誰からのメッセージでも受け付けます。必要に応じて、クロスエージェントのディスパッチ用にピアの agents を指定できます。また、ignore ブロックリストと、output_modality(mirror、voice、text のいずれか)を設定できます。フィールドの詳細は Peer Groups を参照してください。
この設定の場所:
- 認証: Bluesky アプリパスワード(実際のパスワードではありません)。設定で生成してください。
- 受信:
mentionおよびreplyの通知。ピアからのものに限ります。 - 送信側: 300文字以内の投稿; より長い応答は自動的にスレッド化されます。
- プロトコル:
atrium-apiクレートを介した AT Protocol。
ピアのエントリには、ハンドルまたは DID のいずれかを指定できます。アカウント自体の名前変更後もエントリを有効に保ちたい場合は、DID を優先してください。
各ポーリングは、未読の通知を末尾まで走査してから、そのいずれも配信しません。そのため、走査の途中で失敗すると何も配信されず、次のポーリングで範囲全体を再試行します。これは、短い遅延と引き換えに、届いていたページを再配信しないことを選ぶ設計です。エージェントがすでに応答済みの通知を受け取るのは、5秒遅れて応答するよりも悪いためです。
Nostr
受信側の送信者は、バインドされたエージェントに対して解決されたピアセットに照らして制御されます。これはエージェントが所属する peer_groups 設定から導出されます。照合では先頭の @ を取り除き、チャネルのネイティブな送信者識別子に対して大文字・小文字を区別せずに行われます。空のセットはすべてを拒否し、"*" を含むセットはすべてを受け入れます。それ以外の場合は、リストに記載された外部ピア(およびピアエージェント)のみが受け入れられます。これはゲートウェイのペアリング(gateway.require_pairing)とは別物であり、ペアリングはチャットチャネルの送信者ではなく HTTP/WebSocket クライアントを認証します。
nostr のピアグループでは、channel に nostr を設定し、許可する送信者を external_peers に列挙します(nostr の場合は送信者の16進公開鍵。["*"] は誰でも受け付けます)。オプションで、エージェント間ディスパッチ用のピア agents、ignore ブロックリスト、output_modality(mirror、voice、または text)を指定できます。フィールドの詳細は Peer Groups を参照してください。
この設定の場所:
- 認証: 生の秘密鍵(
nsecbech32 または16進数)。 - Inbound: kind-1 (テキスト)、kind-4 (DM、NIP-04)、および kind-1059 (ギフトラップ、NIP-17)。
- アウトバウンド: 同じ種類。Zapの処理は実験的です。
- Relays: エージェントは記載されたすべてのリレーに接続します。信頼性のために3〜5個を使用してください。
relaysを省略した場合、ZeroClaw は組み込みの人気のあるパブリックリレーのセットに接続します。
Twitter / X
受信側の送信者は、バインドされたエージェントに対して解決されたピアセットに照らして制御されます。これはエージェントが所属する peer_groups 設定から導出されます。照合では先頭の @ を取り除き、チャネルのネイティブな送信者識別子に対して大文字・小文字を区別せずに行われます。空のセットはすべてを拒否し、"*" を含むセットはすべてを受け入れます。それ以外の場合は、リストに記載された外部ピア(およびピアエージェント)のみが受け入れられます。これはゲートウェイのペアリング(gateway.require_pairing)とは別物であり、ペアリングはチャットチャネルの送信者ではなく HTTP/WebSocket クライアントを認証します。
twitter のピアグループは、channel を twitter に設定し、許可する送信者を external_peers に列挙します(twitter の場合は Twitter/X の @username。["*"] は誰でも受け入れます)。オプションで、エージェント間ディスパッチ用のピア agents、ignore ブロックリスト、output_modality(mirror、voice、または text)を指定できます。フィールドリファレンスについては Peer Groups を参照してください。
この設定の場所:
- 認証: Twitter API v2 OAuth 2.0 Bearer Token のみ。
- インバウンド: フィルタリングストリームエンドポイント経由のメンション。
- 送信: 投稿、返信、スレッド。
- 注意: フリーティアはレート制限が非常に厳しく、実質的に使用できないレベルです。予算を適切に計画してください。
受信側の送信者は、バインドされたエージェントに対して解決されたピアセットに照らして制御されます。これはエージェントが所属する peer_groups 設定から導出されます。照合では先頭の @ を取り除き、チャネルのネイティブな送信者識別子に対して大文字・小文字を区別せずに行われます。空のセットはすべてを拒否し、"*" を含むセットはすべてを受け入れます。それ以外の場合は、リストに記載された外部ピア(およびピアエージェント)のみが受け入れられます。これはゲートウェイのペアリング(gateway.require_pairing)とは別物であり、ペアリングはチャットチャネルの送信者ではなく HTTP/WebSocket クライアントを認証します。
reddit用のピアグループでは、channelにredditを設定し、external_peersに許可する送信者を列挙します(reddit の場合は、u/プレフィックスを除いたRedditのユーザー名(大文字小文字は区別しません)。["*"]は誰からのメッセージも受け付けます)。任意で、クロスエージェントのディスパッチ用にピアのagentsを指定でき、ignoreブロックリストとoutput_modality(mirror、voice、textのいずれか)も設定できます。フィールドの詳細はピアグループを参照してください。
この設定の場所:
- 認証: リフレッシュトークンを使用した OAuth 2.0。スクリプトタイプの Reddit アプリと
passwordまたはcodeフローで生成します。 - 受信: 未読の受信箱です。メンション、コメントへの返信、DM が含まれます。すべての項目はピアからのものである必要があります。
- アウトバウンド: 投稿、コメント、プライベートメッセージ。
subreddits は、アイテムが どこから 来てよいかを絞り込みます。ピアセットは、誰が アイテムを送信してよいかを決めます。両方が適用され、どちらも他方の代わりにはなりません。DM には subreddit が紐づかないため、subreddits では DM を絞り込めず、ピアセットだけが唯一のゲートになります。
ソーシャルチャネルを安全に運用する
パブリックなソーシャルネットワーク上のボットは敵対的な入力を引き寄せます。2つの予防策:
- エージェントの応答対象を制限する。 ピアグループ(上記のチャネル単位)で受信送信者を制御します。ピアのセットが空の場合はすべてを拒否し、
["*"]を指定するとすべてを受け入れます。これはすべてのソーシャルチャネルに適用されるため、有効化されているもののピアグループが設定されていないチャネルは、ピアグループに値を設定するまで誰にも応答しません。 - 自律レベルは
Supervised以下に保ってください。Full自律状態の公開エージェントは、実質的に公開シェルと同じです。公開チャネルの場合は、チャネルごとのtools_allow(そのようなチャネル単位のフィールドは存在しません)に頼るのではなく、グローバルなツールポリシー設定でツールサーフェスを制限してください。
レート制限
レート制限の処理はチャネルごとに異なります。Twitch は IRC の PRIVMSG フレームを直接書き込み、アダプター固有のリミッターはありません。レート制限が継続的に発生する場合は、チャネルごとのストリーミング設定(これらのチャネルはいずれも下書き更新間隔を公開しておらず、スキーマは意図的に最小限です)に依存するのではなく、エージェントの投稿頻度を送信元側で制御してください。