Withvibe Voter

io.github.withvibe由 GitHub 账号 withvibe 发布v0.1.0更新于 Oct 24, 2026

Vote-gated change control for WithVibe — the agent proposes a change via MCP; team approves first.

已验证STDIO仅桌面效率与工作流开发者工具

概览

AI 生成的概览

一个 WithVibe 插件,把环境变成投票把关的工作区:AI 先提出变更,团队批准后才会执行。

可以做什么
为请求的变更开启提案,而不是直接编辑,并指示智能体先不要改动(提案)。长轮询团队的裁决,直到通过、否决或过期(等待裁决)。在已批准的变更执行后记录结果,或将已批准的变更标记为失败(记录、报告失败)。展示当前看板,包括投票中的提案和最近已解决的提案(状态)。
适用场景
适用于需要多名团队成员在 AI 改动生效前签字确认的 WithVibe 环境,例如共享的应用、文档、场景或配置。它适合友好的团队协作流程,而非强制管控。
运行要求
作为 WithVibe 插件运行,每个环境启动一个容器;需通过 WithVibe 插件或市场流程安装,并在某个环境上启用。需要一个 Postgres 数据库(DATABASE_URL)和一个 schema 名称(PGSCHEMA)来存放其独立的数据表。团队成员在插件自带的网页面板中投票。
安装前请注意
把关依赖智能体配合,通过工具指令实现,不配合的智能体可能绕过。启用后该环境中的每次变更都要经过投票。它会在 Postgres schema 中保存提案、投票和设置,数据库连接串通过 DATABASE_URL 传入。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Withvibe Voter,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

Voter — a WithVibe plugin

Turn any WithVibe env into a team-voted workspace. When this plugin is enabled, the AI doesn't apply a prompt straight away — it opens a proposal the team votes on, and only an approved proposal gets built. Enable it on any env and that env becomes a vote-gated sandbox.

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

It's content-agnostic — it knows nothing about what the env contains. Whatever the env is (an app, a doc, a 3D scene, a config), enabling Voter makes every change go through the team first. Multiple envs = multiple independent boards.

How the gate works (and why it's just a plugin)

WithVibe auto-injects an enabled plugin's MCP tools into the agent's turn. Voter uses that to gate prompts without any change to WithVibe core:

  1. voter_propose_change(prompt) — opens a proposal and tells the agent to not touch anything yet.
  2. voter_await_decision(proposal_id) — long-polls the vote. The platform's MCP bridge caps a single tool call at 60s, so this returns after ~45s with STILL_VOTING and the agent simply calls it again until it's terminal.
  3. On APPROVED, the agent makes the change and calls voter_record_change. On REJECTED / EXPIRED it makes no change.

Meanwhile every teammate votes in the plugin's own UI panel — independent of the agent. The gate is agent-cooperative (enforced via tool instructions), which is the right trade-off for a friendly workflow; hardening it to be unbypassable is a later option that would need a small core hook.

MCP tools

ToolPurpose
voter_propose_changeOpen a proposal for the requested change. Agent must call this instead of editing.
voter_await_decisionLong-poll the team's verdict (APPROVED / REJECTED / EXPIRED / STILL_VOTING).
voter_record_changeRecord what shipped after applying an approved change.
voter_report_failureMark an approved change as failed (e.g. build broke).
voter_statusShow the current board: proposals in voting + recently resolved.

State

Four tables in the plugin's isolated Postgres schema (shared-postgres storage): settings (vote window + thresholds), proposal, vote, feed_event.

Resolution rule: a proposal passes when approvals reach the threshold, fails when rejections reach the threshold, and at the deadline the majority wins (ties expire). Defaults: 600s window, 1 approval / 1 rejection — tune them in the panel.

Architecture

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

Build

bash
docker build -t local/voter:0.1 .

For the marketplace this is published multi-arch as ghcr.io/withvibe/voter:<version>.

Install in WithVibe

  1. Workspace admin → Plugins → Install plugin (or Marketplace once listed).
  2. Paste manifest.yaml (or 1-click install from the catalog).
  3. Open any env → enable Voter → that env is now a vote-gated workspace.

Local development

bash
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

Repository layout

manifest.yaml   WithVibe plugin manifest (install input)Dockerfile      runtime imagepackage.json    deps (express, pg, @modelcontextprotocol/sdk, zod)server.js       express entry — HTTP + MCP routes + vote handlingdb.js           pg pool, schema, proposal/vote/resolution helpersmcp.js          the gate: propose / await / record MCP toolsui.js           htmx voting panel + dark theme

License

Apache License 2.0. See NOTICE for attribution.

来源:README.md,提交 94a2c89

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.1.0最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分