Governance Gateway

io.github.tanishq-ctrl由 GitHub 账号 tanishq-ctrl 发布v0.1.1更新于 Nov 3, 2026

Deadline-aware governance for AI agents: PII scan always, safety check if it fits the deadline

已验证STDIO仅桌面安全与监控AI 与机器学习

概览

AI 生成的概览

本地 MCP 服务器,在助手发送、存储或执行文本前检查个人数据与有害内容,并在截止时间内返回 allow、redact 或 block 结论。

可以做什么
  • 在行动前检查文本,获得 allow、redact 或 block 结论及原因、脱敏文本和耗时
  • 查看治理统计:结论数量、平均与 p95 延迟、按时比例、跳过的分类器检查
  • 列出最近决策,含结论、发现的个人数据类型和耗时,不含原文
  • 查询决策矩阵,依据截止时间、流量形态、峰值系数、检测召回率和目标给出建议
  • 模拟负载,对比“全部检查”与截止时间感知守卫的表现
适用场景
适合助手处理可能含个人数据或有害文本的消息、邮件、命令或文件内容,并希望在行动前做本地、考虑截止时间的检查。也适合评估流水线是否需要自适应检查或更多容量。
运行要求
以 stdio 本地运行的 Python 包 governance-gateway,需要 Python 3.10 或更高版本及 mcp 包,可用 uvx 或 pip 安装。未声明账号、API 密钥或请求头。可选的 Claude Code 钩子使用仅限 127.0.0.1 的本地端口,并涉及 GSL_HOOK_DEADLINE_MS、GSL_FAIL_OPEN、GSL_ALLOW_EMAIL_DOMAINS、GSL_AUDIT_LOG 等设置。
安装前请注意
个人数据检查基于模式匹配,无法识别姓名和邮寄地址;安全分类器约能识别十之六七的有害消息,且仅以英文训练,只是第一道防线而非完整安全系统。可选钩子会把命令、文件内容和网址文本发送给本地网关,检查无法运行时默认阻止操作,除非设置 GSL_FAIL_OPEN=1。审计日志路径会记录决策。应与组织自身的数据保护措施配合使用,而非替代。

安装

在 SourceWeft 中

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

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

其他 MCP 客户端

参照 仓库 中的启动说明。

README

governance-gateway

Governance checks that an AI agent runs before it acts, built so they keep up with the agent instead of falling behind it.

Every request gets a format check and a personal-data (PII) scan, which never skip. A safety classifier, which flags toxic text and jailbreak attempts, is the slow, optional check: it runs only if a cheap screen finds the text suspicious and it can still finish before the request's deadline. Under load, a guardrail that checks everything falls behind and its checks finish after the agent has already acted; this one stays on time and never drops the privacy check.

It runs locally as an MCP server, so text never leaves your machine, and works with any MCP client: Claude Desktop, Claude Code, Cursor, VS Code, Gemini CLI and others. In Claude Code an optional hook makes the checks compulsory for every command, file write and web request the agent makes.

Install

With uv nothing needs installing in advance:

bash
uvx governance-gateway --version

Or with pip: pip install governance-gateway, then run governance-gateway. Python 3.10 or later; the only dependency is the mcp package.

Add it to your AI tool

Claude Desktop: in claude_desktop_config.json (Settings > Developer > Edit Config):

json
{  "mcpServers": {    "governance-gateway": { "command": "uvx", "args": ["governance-gateway"] }  }}

Cursor: the same block in ~/.cursor/mcp.json (or .cursor/mcp.json in a project).

Gemini CLI: the same block in ~/.gemini/settings.json.

VS Code (Copilot agent mode): in .vscode/mcp.json:

json
{  "servers": {    "governance-gateway": { "type": "stdio", "command": "uvx", "args": ["governance-gateway"] }  }}

Claude Code:

bash
claude mcp add governance-gateway -- uvx governance-gateway

If you installed with pip, use "command": "governance-gateway" and no args.

Tools

ToolWhat it does
check_message(text, deadline_ms=100)Runs the checks. Returns allow, redact (with the personal data masked) or block, the reasons, whether the screen and the classifier ran, and the timing. Never echoes the text back.
governance_status()Requests so far: verdicts, mean and 95th-percentile lag, share on time, share of classifier checks skipped or screened out.
recent_decisions(limit=20)The latest decisions: verdict, kinds of personal data found, timing. No text.
decision_matrix(...)For a pipeline's deadline, traffic shape, peak-hour factor, detector recall, target and cost share: whether checking everything is enough, adaptive checking is needed, or only more capacity helps.
simulate_load(load, deadline_ms, traffic, seconds)Races "check everything" against the deadline-aware guard on a simulated clock with measured check costs.

Resources: governance://status and governance://policy (which checks run, which are mandatory, and how the gateway decides). All tools are read-only.

Make the checks compulsory in Claude Code

An MCP tool is only called when the agent decides to call it. In Claude Code a PreToolUse hook can run the check before every action instead. The easiest way is the governance-guard plugin, which adds both the server and the hook:

/plugin marketplace add tanishq-ctrl/governance-gateway/plugin install governance-guard@governance-gateway

Or add the hook yourself to ~/.claude/settings.json (or a project's .claude/settings.json):

json
{  "hooks": {    "PreToolUse": [      {        "matcher": "Bash|Write|Edit|MultiEdit|NotebookEdit|WebFetch",        "hooks": [          {            "type": "command",            "command": "uvx",            "args": ["--from", "governance-gateway", "governance-gateway-hook"],            "timeout": 10,            "onFailure": "block"          }        ]      }    ]  }}

The hook sends the text of each action (the command, the file content, the URL) to the running gateway, with a budget of GSL_HOOK_DEADLINE_MS (default 200 ms):

  • harmful or malformed: the action is refused and the agent is told why;
  • personal data found: you are asked whether to allow it;
  • otherwise: nothing changes, and your normal permissions apply.

If the gateway is not running, the hook still runs the personal-data scan itself. If the check cannot run at all, the action is blocked (set GSL_FAIL_OPEN=1 to allow it instead). Addresses at GSL_ALLOW_EMAIL_DOMAINS (default anthropic.com, users.noreply.github.com, example.com) are ignored, so commit trailers pass.

Settings

OptionEnvironmentDefaultMeaning
--cascade on/offGSL_CASCADEonRun the suspicion screen before the classifier
--estimator p90/meanGSL_ESTIMATORp90How the classifier's cost is estimated from recent checks
--workers NGSL_GATEWAY_WORKERS1Workers serving the queue
--audit-log PATHGSL_AUDIT_LOGnoneAppend one JSON line per decision (no text)
--port NGSL_GATEWAY_PORT8737Local port for the hook (127.0.0.1 only)
--no-hook-endpointDo not open the local port

What it detects, and what it does not

  • Personal data: e-mail addresses, telephone numbers and US-style national ID numbers, by pattern. Names, postal addresses and other identifiers are not detected.
  • Harmful text: a TF-IDF and logistic-regression classifier trained on ToxicChat, real prompts to a public chatbot labelled by people. On held-out ToxicChat messages it catches about 6 in 10 harmful messages with a precision of about 0.78; it is a light first line of defence, not a complete safety system, and it was trained on English.
  • The screen passes on 95% of harmful messages in validation and sends about 31% of ordinary traffic to the classifier.

Use it alongside, not instead of, your organisation's own data-protection controls.

Background

The gateway comes from an MSc project that measured how far governance checks fall behind fast automated decisions as load grows. Checking everything collapses at full capacity: on real chatbot traffic it stopped meeting its target at 77% of capacity. The deadline rule held to 1.06, and the screen plus the deadline rule to 1.44, while keeping the privacy check on time.

Prabhu, T. S. (2026). Quantifying "Governance Speed Lag" (GSL) in Agentic AI Ecosystems: A simulation-based framework for self-adaptive real-time data compliance. MSc Data Science project, VIT.

Source and issues

https://github.com/tanishq-ctrl/governance-gateway

Licence

Code: MIT. The bundled models and workload data are derived from ToxicChat and are for non-commercial use only (CC BY-NC 4.0); see LICENSE-DATA.md.

来源:README.md,提交 16b8067

工具

5

check_message

Check a text before acting on it: format, personal data (always) and safety (if time allows). Returns the verdict ('allow', 'redact' or 'block'), the reasons, the redacted text when personal data was found, whether the safety classifier ran, and the timing against the deadline. The original text is never echoed back.

输入参数text必填deadline_ms

governance_status

Requests handled so far: verdicts, lag (mean, p95), share on time, share skipped.

无需输入参数。

decision_matrix

Which checking policy a pipeline needs at a given mean load (the project's decision matrix). traffic: 'even', 'random' or 'bursty'. peak_factor: busiest-hour ratio q (1 = steady). recall: the detector's recall with no queue; target: required share caught in time; cost_share: the detector's share of checking cost; load: mean arrivals ÷ capacity.

输入参数loadrecalltargettrafficcost_sharedeadline_mspeak_factor

simulate_load

Race 'check everything' against the deadline-aware guard with measured check costs. traffic: 'steady', 'rush_hour' or 'real_chatbot' (real WildChat timings). Returns, for each guard, the final lag, harmful messages caught in time, the share of PII checks on time and the share of classifier checks skipped.

输入参数loadseedsecondstrafficdeadline_ms

recent_decisions

The latest governance decisions, newest last: source, verdict, kinds of personal data found, whether the classifier ran, and timing. The checked text is never included.

输入参数limit

版本历史

1
  1. v0.1.1最新Oct 29, 2026

评分

已满足适用检查项的 80%

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

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

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

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

    请在仓库或注册中心条目中声明许可证。