withvibe-voter について
withvibe-voterは、Agentによる変更適用前にチームの承認を求めるWithVibeプラグインです。提案への投票を行い、承認済みの変更や失敗を記録します。
主な機能
- 01変更提案の作成
- 02チーム決定の確認
- 03適用済み変更の記録
- 04変更失敗の報告
- 05提案ボードの表示
活用シーン
- 01ワークスペース編集前のチーム承認
- 02承認済み変更とビルド失敗の追跡
MCP 対応
提案、決定のポーリング、結果記録、失敗報告、提案状況の確認を行う5つのMCPツールを提供します。承認ゲートはAgentがツールの指示に従うことを前提とします。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Voter — WithVibe プラグイン
あらゆる WithVibe 環境をチーム投票制のワークスペースに変えます。このプラグインを有効にすると、AI はプロンプトをすぐに適用するのではなく、チームが投票する提案を作成し、承認された提案だけが実装されます。どの環境でも有効にすれば、その環境は投票制のサンドボックスになります。
You (in chat): "add a dark-mode toggle"
│
▼
voter_propose_change ──────► Proposal #7 opens (10-min vote)
│ 👍 👎 team votes in the panel
voter_await_decision ◄─────── APPROVED ✅ / REJECTED ✗
│
▼ (only if approved)
agent makes the change ──► voter_record_change ──► shows up in History
環境の内容に依存しません。環境に何が含まれているかは問いません。 環境がアプリ、ドキュメント、3D シーン、設定のいずれであっても、Voter を有効にすると、あらゆる変更がまずチームの確認を経るようになります。複数の環境があれば、独立したボードも複数作成されます。
ゲートの仕組み(そして、なぜ単なるプラグインなのか)
WithVibe は、有効なプラグインの MCP ツールをエージェントのターンに自動で組み込みます。 Voter はこれを利用して、WithVibe のコアを変更することなくプロンプトを制御します。
voter_propose_change(prompt)— 提案を作成し、エージェントにまだ何も変更しないよう伝えます。voter_await_decision(proposal_id)— 投票結果をロングポーリングします。プラットフォームの MCP ブリッジでは、1 回のツール呼び出しが 60 秒に制限されているため、約 45 秒後にSTILL_VOTINGを返します。エージェントは結果が確定するまで、これを再度呼び出します。APPROVEDの場合、エージェントは変更を行い、voter_record_changeを呼び出します。REJECTED/EXPIREDの場合、変更は行いません。
その間、チームメンバーはそれぞれ、エージェントとは独立してプラグインの UI パネルから投票します。このゲートはエージェントの協力に依存します(ツールの指示によって適用されます)。これは使いやすいワークフローに適したトレードオフです。回避不能な仕組みに強化することもできますが、その場合は後々、小規模なコアフックが必要になります。
MCP ツール
| ツール | 目的 |
|---|---|
voter_propose_change | 要求された変更の提案を作成します。エージェントは編集の代わりにこれを呼び出す必要があります。 |
voter_await_decision | チームの判定(APPROVED/REJECTED/EXPIRED/STILL_VOTING)をロングポーリングします。 |
voter_record_change | 承認された変更を適用した後、実際に反映された内容を記録します。 |
voter_report_failure | 承認された変更が失敗した場合(例:ビルドが壊れた場合)に記録します。 |
voter_status | 現在のボードを表示します。投票中の提案と、最近解決された提案が表示されます。 |
状態
プラグイン専用の Postgres スキーマ(shared-postgres ストレージ)に 4 つのテーブルがあります。
settings(投票期間としきい値)、proposal、vote、feed_event。
解決ルール:賛成票がしきい値に達すると提案は可決され、反対票がしきい値に達すると否決されます。期限に達した時点では多数決で決定し、同数の場合は期限切れになります。デフォルトは、投票期間 600 秒、賛成 1 票/反対 1 票です。パネルで調整できます。
アーキテクチャ
manifest.yaml ──► WithVibe spawns one container per env (scope: env)
│
server.js (express)
├── /health platform health probe
├── /mcp agent's MCP endpoint ─► mcp.js (the gate)
├── /ui htmx voting panel ─► ui.js
└── /ui/version cheap freshness check (live updates)
│
db.js (pg) ─► shared-postgres, per-env schema
ビルド
docker build -t local/voter:0.1 .
マーケットプレイス向けには、ghcr.io/withvibe/voter:<version> としてマルチアーキテクチャ対応で公開されます。
WithVibe にインストールする
- ワークスペース管理者 → プラグイン → プラグインをインストール(一覧掲載後は マーケットプレイス)。
- manifest.yaml を貼り付けます(またはカタログからワンクリックでインストールします)。
- 任意の環境を開き、Voter を有効にします。その環境が投票制のワークスペースになります。
ローカル開発
docker build -t local/voter:0.1 .
docker run --rm -p 8080:8080 \
-e DATABASE_URL="postgres://user:[email protected]:5432/withvibe_plugins" \
-e PGSCHEMA="voter_dev" \
local/voter:0.1
# open http://localhost:8080/ui — two browsers = two voters
リポジトリ構成
manifest.yaml WithVibe plugin manifest (install input)
Dockerfile runtime image
package.json deps (express, pg, @modelcontextprotocol/sdk, zod)
server.js express entry — HTTP + MCP routes + vote handling
db.js pg pool, schema, proposal/vote/resolution helpers
mcp.js the gate: propose / await / record MCP tools
ui.js htmx voting panel + dark theme
ライセンス
Apache License 2.0。帰属表示については NOTICE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。