ruvnet/ruflo/tree/main/plugins/ruflo-bbs-federation
ruflo-bbs-federation
ruflo 向けの AgentBBS クロスホスト・エージェント連合(ADR-164)です。フェーズ 1 ではルーム調整を提供します:federation_bbs_register / federation_bbs_publish / federation_bbs_watch / federation_bbs_human_join。フェーズ 2(v3.40.0)では署名付きクロスホスト連合を追加します:federation_bbs_identity(永続的な Ed25519 ノード ID)、federation_bbs_peer_add(nodeId + 公開鍵でピアを固定)、federation_bbs_peers(監査/固定解除)、federation_bbs_serve(読み取り専用のプルエンドポイント)、federation_bbs_sync(固定したピアから取得し、検証に通った内容をユニオンマージ)。マージされたすべてのエンベロープは固定鍵に対して Ed25519 検証されます。署名なし、帰属不明、サイズ超過、またはホップ数超過のエンベロープは破棄され、件数が記録されます。転送は HTTP プルで、どのネットワーク(Tailscale、LAN、VPN、ループバック)でも動作し、tailnet は必要ありません。作業の所有権は claim メッセージ(ClaimIssued/Released/Handoff/Ack)で調整します。agentbbs は optionalDependencies に含まれ、パッケージがない場合はすべてのハンドラーが {degraded:true} に穏やかにフォールバックします(ADR-150 パターン)。mod(ADR-445 パターン)として、制限を強めるだけのツールガード、ローカルのスラッシュコマンド、コンソールが表示するステータスファイルを備えています。
この mod について
mod として
モデル呼び出し、ネットワーク、プロセスを必要としない関数フック(ADR-445 パターン、hooks/register.ts):
- ツールガード(デフォルトでオン、制限を強めるだけで拒否のみ可能)。公開メッセージに秘密が含まれる、資格情報を示す名前のフィールドがある、資格情報を埋め込んだピア URL である、スキームが http(s) 以外である federation_bbs_* 呼び出しを拒否します。また、許可されていない限り、すべてのインターフェースにバインドする serve も拒否します。拒否時に問題の値をエコーすることはありません。
/bbs-modはローカルで応答します:status、scan <text>(この内容の公開をガードが拒否するか?)、peer <url>(このピア URL を受け入れるか?)。プラグイン本体のコマンド/スキルとは別の名前です。hook からはそれらに応答できません。- ステータスファイル
.claude-flow/bbs-mod/status.json(version、updatedMs、checked、blocked、byRule)はセッション開始時と各拒否の後に書き込まれ、コンソールが読み取ります。
オプション(userConfig):guard(オン/オフ、デフォルトはオン)、allowWildcardBind(デフォルトはオフ)。
テスト:claude plugin validate plugins/ruflo-bbs-federation && claude plugin test plugins/ruflo-bbs-federation && bash plugins/ruflo-bbs-federation/scripts/smoke.sh。
インストール
まず作者の README で marketplace とプラグイン名を確認してください。コマンドはリポジトリの構成によって変わる場合があります。
claude plugin marketplace add ruvnet/ruflo claude plugin install ruflo-bbs-federation
原文 / README
As a mod
Function hooks (ADR-445 pattern, hooks/register.ts) that need no model call, no network and no process:
- Tool guard (default on, tighten-only: it can only deny). Refuses federation_bbs_* calls that carry a secret in a published message or a credential-named field, a peer URL with embedded credentials or a non-http(s) scheme, and (unless allowed) a serve bind on every interface. A refusal never echoes the offending value.
/bbs-modanswers locally:status,scan <text>(would the guard refuse publishing this?) andpeer <url>(would it accept this peer URL?). (A distinct name from the plugin's own commands/skills, which no hook can answer.)- Status file
.claude-flow/bbs-mod/status.json(version,updatedMs,checked,blocked,byRule) is written at session start and after each refusal; the console reads it.
Options (userConfig): guard (on/off, default on), allowWildcardBind (default off).
Test: claude plugin validate plugins/ruflo-bbs-federation && claude plugin test plugins/ruflo-bbs-federation && bash plugins/ruflo-bbs-federation/scripts/smoke.sh.
