English | 简体中文
AI Agent(Claude Code、Cursor、Zed、MCP 客户端、浏览器助手)会代你调用工具、读文件、请求 API、往网页里粘贴。这种能力很有用 —— 也有风险。Vigils 位于你的 Agent 与它们所触及的 工具/数据之间,且是 本地优先 的:你的 prompt、密钥与审计记录永不离开本机。
AI agent ──▶ ┌─────────────────── Vigils ───────────────────┐ ──▶ tools / data
(MCP client) │ redact → firewall → approve → sandbox → audit │ (MCP servers,
└───────────────────────────────────────────────┘ files, APIs, web)
四项保证,全部在本地强制执行:
| 保证 | 如何实现 |
|---|---|
| 看见 Agent 做了什么 | 每次工具调用都记入防篡改的 SHA-256 哈希链账本,支持全文检索。 |
| 高危动作先审批 | 破坏性 / 敏感调用在 Approval Queue 暂停,交人工审核,支持按 Agent 策略与范围化授权。 |
| 凭据不进 prompt / 日志 / UI | 脱敏引擎在文本抵达模型、日志或屏幕之前,剥离密钥与 PII(硬指纹规则 + 可选 ML 集成)。 |
| 隔离与回滚 | 账本端到端可追溯,沙箱 runner 默认 fail-closed(Wasm + native + Linux Landlock)。 |
env_clear,子进程不继承你的环境。默认 fail-closed。npx/node/python)在沙箱化前经
宿主 PATH 解析。Vigils 是一个由聚焦单一职责的 crate 组成的 Rust workspace,外加三个 app。每一层都可独立 测试,由 Hub(MCP 网关)组合。
| 层 | Crate | 职责 |
|---|---|---|
| 审计 | vigil-audit |
SQLite 账本、SHA-256 哈希链、FTS5 检索、脱敏扫描记录 |
| 策略 | vigil-policy |
Rust 策略 DSL + 规则引擎(默认拒绝) |
| 防火墙 | vigil-firewall |
工具门禁、按 Agent 规则、OAuth scope 白名单 |
| 审批 | vigil-mcp(broker) |
人在回路、范围化授权、跨进程解析 |
| 脱敏 | vigil-redaction |
密钥/PII 检测(硬指纹 + ML 集成)、fail-closed 合并 |
| 租约 | vigil-lease |
短时凭据租约、预备子进程环境(RAII 撤销) |
| Runner | vigil-runner / vigil-runner-types |
Native + Wasm 执行、环境策略、fail-closed |
| 沙箱 | vigil-sandbox-linux |
Linux Landlock LSM 文件系统隔离 |
| 网关 | vigil-mcp |
MCP Hub:stdio + HTTP upstream、descriptor pinning + 漂移 |
| 远程鉴权 | vigil-http-auth / vigil-http-transport |
OAuth(JWT + opaque)、token 刷新(singleflight)、真 TLS |
| UI 协议 | vigil-ui-protocol |
桌面 UI 的强类型命令/响应契约 |
| 浏览器 | vigil-browser |
扩展桥接的脱敏分类器 + 审计 |
| SDK | vigil-sdk |
引擎之上的瘦封装、SemVer 稳定。crates.io 上的发布是独立节奏的早期预览版,落后于本仓库;要用最新 API 请从源码构建 |
App 与二进制:
| 二进制 | Crate | 它是什么 |
|---|---|---|
vigil-hub |
vigil-hub-cli |
CLI MCP 网关:vigil-hub serve --stdio、add-remote-mcp、inspect、… |
gui |
apps/desktop |
Tauri 2 桌面应用(内嵌 Vue 3 UI + 进程内 Hub) |
vigil-native-host |
apps/native-host |
Chrome 扩展的 native-messaging 桥 |
| — | extensions/chrome-mv3 |
Chrome MV3 扩展(纯 vanilla JS,零 npm 依赖) |
新手?→ 安装指南:下载哪个文件 + 首次运行步骤(English)—— 1 分钟、按系统手把手(含 Windows/macOS 的未签名 App 放行提示)。
最快 —— 一行装好 CLI,然后直接看快速开始:
curl -fsSL https://vigils.ai/install.sh | sh # macOS / Linux
irm https://vigils.ai/install.ps1 | iex # Windows(PowerShell)
或从任一 GitHub Release 手动获取 Windows、macOS、 Linux 的预构建安装包与二进制:
| 平台 | 桌面应用 | CLI |
|---|---|---|
| Windows | .exe(NSIS)/ .msi |
vigil-hub.exe(在 vigils-cli-windows-x64.zip 内) |
| macOS | .dmg |
vigil-hub(在 vigils-cli-macos-arm64.tar.gz 内) |
| Linux | .AppImage / .deb / .rpm |
vigil-hub(在 vigils-cli-linux-x64.tar.gz 内) |
两个 CLI 构建跑的是完全相同的防火墙 / 审计 / 审批内核 —— 唯一区别在于文本抵达模型、日志或屏幕之前剥离密钥与 PII 的脱敏引擎:
| 构建 | Release 资产 | 脱敏 | 首跑成本 |
|---|---|---|---|
| 默认 —— 硬指纹 | vigils-cli-<plat> |
13+ 类结构化凭据与 PII,固定模式规则 —— 确定性、即时、零模型 | 无 |
| ML | vigils-cli-ml-<plat> |
在上述基础上外加 OpenAI PII NER 模型 + DeBERTa 提示注入分类器 —— 更广的语义 PII(人名、地址、日期)与软注入信号 | 捆 ONNX Runtime dylib;首次 --engine ml 运行按需下载 ~0.8–1.5 GB 模型 |
二者并存 —— 引擎按启动选择,单个 ML 构建即可服务任意模式:
vigil-hub serve --engine hardfp # 仅硬指纹规则(默认构建的行为)
vigil-hub serve --engine ml # 严格 ML:首跑下载模型,不可用则 fail-closed 拒启
vigil-hub serve --engine auto # 仅当模型已缓存且 dylib 就位才启用 ML;否则降级硬指纹,绝不下载
模型从 Hugging Face(主源)拉取,带 vigils.ai 镜像 fallback,逐文件 SHA-256 校验(fail-closed)。ML 构建把 ONNX Runtime 1.24 捆在 vigil-hub 同目录。ML 构建的平台地板:Linux glibc ≥ 2.28、macOS ≥ 14 —— 默认硬指纹构建则没有。(ML 构建自 v0.4.0 起随每个 release 发布 —— 认准 vigils-cli-ml-* 资产。)
早期版本未签名;首次运行时系统可能弹出 Gatekeeper / SmartScreen 提示。
Chrome 扩展(Vigils Browser Guard)
已上架 Chrome 应用商店,一键安装 —— 普通模式在浏览器内检测、开箱即用;配合 vigil-native-host
可解锁深度脱敏。源码在 extensions/chrome-mv3/(开发版经 chrome://extensions → 开发者模式 →
加载已解压的扩展程序 载入)。
curl -fsSL https://vigils.ai/install.sh | sh # macOS / Linux
irm https://vigils.ai/install.ps1 | iex # Windows(PowerShell)
把 vigil-hub CLI 装到磁盘(macOS/Linux 到 ~/.local/bin,Windows 到 %LOCALAPPDATA%\Vigils\bin)。
它只把二进制放到磁盘 —— 不改 shell/PATH、不自动 setup、不碰任何 agent 配置 —— 并打印接下来该做
什么,你始终掌控。解压前会对 release 发布的 SHA-256 校验(fail-closed)。想先读再 pipe?脚本在
install.sh / install.ps1。想手动下载?见安装。
下载 release 后,只跑一条命令即全面受保护。无需手动改配置——你既有的设置会被备份,只新增 Vigils 自己的条目(完全可逆):
vigil-hub setup --all # 一步全保护
setup --all 同时接入两层保护:
PreToolUse hook,于是每一次工具调用(Bash、Edit、
Write、Read、MCP 工具……)在执行前都先被检查:真实凭据流入工具会被 fail-closed 拦截,记入
防篡改审计账本。--enforce 升级为 default-deny 硬拦。vigil-hub setup --mcp --doctor # 接入前预检:每个被包裹的 MCP server 真能启动吗?(PATH 检查,只读)
vigil-hub inspect protection # 用过 agent 后:一眼看清 Vigils 拦了什么(裸 secret 拦截、泄漏脱敏、链完整)
vigil-hub setup --all --uninstall # 干净移除全部(只删 Vigils 自己的条目;你的配置如实还原)
重启 Claude Code(或开新会话)即受保护。这是从 GitHub 下载到真实防护的最快路径。
vigil-hub demo # 默认拒绝 → 占位符往返 → 真值只到本地工具 → 审计零明文
vigil-hub demo --tamper # 另演示:篡改账本一行,看 verify-chain 检测到(可证伪)
你会看到(真实输出,节选):
A demo secret — freshly generated locally for this run (never leaves this process):
github_pat = ghp_c7da264c45f58cd89aaa12cde5b8c69883e6
[1] default-deny: agent puts the RAW secret in the tool call
tool=github.create_issue -> Vigil firewall: DENY (rule=github_token)
[2] the Vigil way: the agent passes a PLACEHOLDER instead
What the REMOTE MODEL saw: {"token":"secret://github_pat"} plaintext secret? NO
What the LOCAL TOOL received: {"token":"ghp_c7da264c45f58cd89aaa12c..."} contains real value? YES
The tool's result LEAKED a credential; Vigil re-redacted it:
{"debug_trace":"authenticated with [REDACTED github_token] ...","ok":true} secret back to model? NO
[3] tamper-evident audit ledger (no plaintext secrets stored)
0002 sha256:947ce1fe0d30 raw_secret_attempt_detected
0008 sha256:17e875d2e47e secret.leak_detected
hash chain valid: YES plaintext secret in audit: NO
关键洞察: agent 用真实密钥完成了有用的工作 —— 而模型、日志、审计从未拿到真值。这是一个预置场景 + 本地现生成的 fixture;防火墙、脱敏、审计都是 Vigils 的真实代码,只有模型/工具 provider 是模拟的。
把 Vigils 放在你的 MCP server 前面,让每次工具调用都经过防火墙、审批与审计:
# 作为 MCP endpoint 供你的 agent 连接(stdio)
vigil-hub serve --stdio --upstream-config ./upstreams.json
# upstreams.json —— 裸命令自动经 PATH 解析
# { "upstreams": [ { "name": "fs", "argv": ["npx", "-y", "@modelcontextprotocol/server-filesystem", "/data"] } ] }
# 注册一个远程(HTTP)MCP server 并完成 OAuth onboarding
vigil-hub add-remote-mcp https://mcp.example.com/
# 从命令行查询本地审计账本(stdout 为单行 JSON,便于 | jq)
vigil-hub inspect --db-path ./vigil.db activity --limit 20
把你的 agent(Claude Code / Cursor / Zed)指向 vigil-hub 而非原始 MCP server 即可。各 agent 配置
与"如何验证它在管控"见 Agent 接入与测试指南。
启动桌面应用,实时观察与控制 agent:审批队列(批准 / 拒绝 / 批量)、活动流(实时审计 流)、服务器注册、会话回放、隐私发现。
要求:近期的 stable Rust 工具链(见 rust-toolchain.toml)与用于桌面 UI 的 Node.js 20+。
在 Linux 上,Tauri 需要 GTK/WebKit dev 包。
# workspace 测试 / lint(默认不含 GPU 或模型依赖)
cargo test --workspace
cargo clippy --workspace --all-targets -- -D warnings
cargo fmt --all -- --check
# CLI 网关
cargo build --release -p vigil-hub-cli --bin vigil-hub
# 桌面 UI + 应用(`gui` feature 内嵌已构建的 UI)
cd apps/desktop/ui && npm ci && npm run build && cd -
cargo build --release -p vigil-desktop --features gui --bin gui
crate 名沿用历史
vigil-*前缀;产品与项目名为 Vigils。
发现漏洞?请私下上报 —— 见 SECURITY.md。请勿用公开 issue 提交安全报告。
crates/ # 15 个库 crate(audit、policy、firewall、mcp、redaction、runner、
# lease、sandbox-linux、http-auth/transport、ui-protocol、browser、sdk、types)
apps/
desktop/ # Tauri 2 + Vue 3 桌面应用(bin: gui)
native-host/ # Chrome native-messaging 桥(bin: vigil-native-host)
vigil-hub-cli/ # CLI MCP 网关(bin: vigil-hub)
extensions/
chrome-mv3/ # Chrome MV3 扩展(vanilla JS)
docs/
adr/ # 架构决策记录(ADR)
book/ # 用户指南(mdBook)
threat-model/ # 安全威胁模型
docs/book/docs/adr/docs/threat-model/docs/sdk-shallow-api.md欢迎 issue 与 pull request。提交前请确保:
cargo fmt --all -- --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace
每次 PR,CI 都会在 Linux 上跑同样的门禁,并构建 UI。
Vigils 同时服务中文社区与国际社区,因此面向用户的文档采用双语。新增或修改指南 / 教程 / 说明类
文档时,评估是否需要双语——需要则写一份英文页 + 一份独立中文页(绝不逐句中英交错),如
foo.md + foo.zh-CN.md,顶部互链。参考 / ADR / 内部文档可只保留英文。
Apache-2.0 © Vigils Authors · vigils.ai
$ claude mcp add vigils \
-- python -m otcore.mcp_server <graph>