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 分