关于 withvibe-voter
withvibe-voter 是面向 WithVibe 团队的插件,可在 Agent 修改工作区前发起提案并由团队投票。它记录获批变更或失败结果。
主要功能
- 01发起变更提案
- 02等待团队决策
- 03记录已应用变更
- 04报告变更失败
- 05查看提案看板
适用场景
- 01在编辑工作区前要求团队审批
- 02跟踪获批变更和构建失败
MCP 相关
提供五个 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 工具注入 Agent 的当前轮次。 Voter 利用这一点来约束提示词,无需对 WithVibe 核心进行任何更改:
voter_propose_change(prompt)— 创建一个提案,并告知 Agent 暂时不要进行任何更改。voter_await_decision(proposal_id)— 长轮询投票结果。平台的 MCP 桥接层将单次工具调用限制为 60s,因此此工具会在约 45s 后返回STILL_VOTING,Agent 只需再次调用,直到投票结束。- 投票结果为
APPROVED时,Agent 执行更改并调用voter_record_change。结果为REJECTED/EXPIRED时,不进行任何更改。
与此同时,每位队友都可以在插件自己的 UI 面板中投票,与 Agent 无关。此门槛由 Agent 配合执行(通过工具说明约束),这对于轻松协作的工作流来说是恰当的权衡;以后也可以通过添加一个小型核心钩子来加固,使其无法绕过。
MCP 工具
| 工具 | 用途 |
|---|---|
voter_propose_change | 为请求的更改创建提案。Agent 必须调用此工具,而不是直接编辑。 |
voter_await_decision | 长轮询团队的裁决结果(APPROVED / REJECTED / EXPIRED / STILL_VOTING)。 |
voter_record_change | 应用获批的更改后,记录已交付的内容。 |
voter_report_failure | 将获批的更改标记为失败(例如,构建失败)。 |
voter_status | 显示当前投票板:正在投票的提案和最近已处理的提案。 |
状态
插件隔离的 Postgres 架构(shared-postgres 存储)中有四张表:
settings(投票时限和阈值)、proposal、vote、feed_event。
决议规则:赞成票达到阈值时提案通过,反对票达到阈值时提案失败;截止时间到达时由多数票决定(平票则过期)。默认值:600s 投票时限、赞成票阈值 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 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。