mcpField
U
Umbra

Umbra

本地服务
github.com/elberacasa安全012 周前更新

关于 Umbra

Umbra 为 AI 生成的代码提供确定性 0–100 信任评分,并检查漏洞、代码整洁度及运行与声明真实性。它面向 AI 编码工作流,支持扫描仓库,也可在 Agent 写入文件前拦截危险内容。

主要功能

  1. 01确定性代码信任评分
  2. 02静态安全与整洁度扫描
  3. 03Docker 沙箱构建和启动验证
  4. 04重放 Agent 声明并核验
  5. 05安全修复与基线管理
  6. 06写入前文件内容防护

适用场景

  1. 01为 CI 设置评分门槛
  2. 02审查 AI 生成的代码仓库
  3. 03验证 README 中的测试和构建声明
  4. 04阻止 Agent 写入凭据或危险配置

MCP 相关

umbra-mcp 提供 `scan_repo`、`guard_content` 和 `get_score` 工具,供 MCP 客户端扫描仓库、检查待写入内容并获取评分。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"elberacasa-umbra": {
"command": "npx",
"args": [
"-y",
"@elberacasa/umbra"
]
}
}
}
启动命令npx -y @elberacasa/umbra

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@elberacasa/umbra1.2.0

工具

3

收录的工具列表 · 更新于 2 周前

参数类型必填说明
deepboolean否还会在 Docker 沙盒中验证 RUNS 和 HONEST(処理较慢,需要 Docker)
pathstring否(必填)要扫描的代码仓库路径

详细介绍

Umbra:AI 生成代码的信任评分

人人都在 vibe coding,却没人验证。Umbra 为其评分。

Umbra 为 AI 生成的代码提供确定性的信任评分(0–100):这是一款 vibe coding 安全扫描器,用于验证 Agent 实际交付了什么,而不是它声称交付了什么。只需一条命令,即可完全在本地运行,并为每项发现提供证据。

→ umbra-badge.umbrabadge.workers.dev — 产品介绍页、实时徽章和报告页面

npm version npm downloads GitHub stars website: live Glama MCP score MCP registry: listed license: MIT CI rubric v4 node >=20

快速开始 · 演示 · 审计 · 工作原理 · 四个维度 · 常见问题 · 路线图 · 参与贡献 · 网站

Umbra 扫描一款 vibe coding 应用:信任评分 30/100

Umbra 为何而生

研究显示,AI 生成的代码中有 40% 到 60% 存在可利用的漏洞;编码 Agent 也常声称“所有测试都通过了”,但实际上有三个测试失败。用于借助 AI 编写代码的工具,比用于信任代码的工具领先了一年。Umbra 填补了这一差距:针对当下软件编写方式重建的 SAST,再加上沙箱验证,捕获静态规则无法发现的问题。

只需一条命令,即可扫描任何由 Agent 生成的代码库(Claude Code、Cursor、Copilot、Windsurf、Lovable),并返回评分,为每项发现提供文件:行号证据。使用 --deep 可进行更深入的检查:Umbra 会在限制严格的 Docker 沙箱中构建并启动代码库,然后根据实际情况重放 Agent 自己的声明。如果 Agent 谎称测试通过,评分上限将低于通过标准,并附上证据。

审计:扫描 61 个 vibe coding 代码库

我们使用 Umbra 扫描了 61 个公开且持续维护的 AI 构建代码库,并公布了所有结果。Vibe Coding 安全审计:

发现命中的代码库
硬编码密钥(已提交的 .env、源代码中的服务密钥)25%
未进行身份验证检查的 API 路由26%
注入点(SQL 插值、不安全的 HTML 注入)49%
整个数据库 / SQL 转储文件被提交到 git13%
至少有一项严重问题10%
没有评分发现(确实干净)61 个中有 7 个

平均信任评分:74/100。五分之一的代码库未通过。完整报告包含各类别的深入分析、示例代码片段和修复方案、完整的代码库明细表,以及坦诚的方法说明——包括我们在运行审计时发现自身规则中的误报,并已修复(评分标准 v4)。

快速开始

npx umbra-scan            # check — scans the directory you're standing in
npx umbra-scan --fix      # heal — applies provably-safe fixes, shows the score climbing
npx umbra-scan --setup    # protect — pre-commit gate, PR checks, agent guardrails

这就是全部接口。三个动词:检查、修复、保护。

正在使用 AI 编码 Agent? Umbra 专为 Agent 驱动而构建,而不只是供人手动运行:

  • 任何 Agent — 它会读取此仓库的 AGENTS.md / llms.txt,并知道该做什么。或者告诉你的 Agent:“用 umbra 检查这个仓库。”
  • Claude Code / Kimi Code — --setup 会安装 PreToolUse 钩子,确保 Agent 写入的每个文件在落盘前都受到保护。
  • Claude Code、Cursor、Copilot、Windsurf — trust-review 技能会让 Agent 在宣布完成前扫描自己的工作。
  • 原生支持 MCP 的 Agent — 添加 umbra-mcp(npx --yes -p @elberacasa/umbra umbra-mcp),Agent 就能将 scan_repo、guard_content 和 get_score 用作工具。

扫描一个典型的氛围编程 Next.js 应用时的实际输出 (本仓库中的 fixtures/bad-app,信任评分为 30/100):

$ npx umbra-scan ./fixtures/bad-app

UMBRA TRUST SCORE: 30/100  🔴

SAFE   🔴 5/100 — 14 findings
CLEAN  ✅ 87/100 — 10 findings
RUNS   — not measured — run with --deep
HONEST — not measured — run with --deep

Score computed over measured axes only (full rubric: SAFE 35%, RUNS 25%, HONEST 25%, CLEAN 15%). Rubric v4.
…plus 7 further findings beyond the per-rule cap (see report)

Top findings:
  [safe/hardcoded-secrets] Hardcoded Supabase service_role JWT — bypasses all row level security — .env:2
  [safe/hardcoded-secrets] Hardcoded Supabase service_role JWT — bypasses all row level security — lib/supabase.ts:5
  [safe/supabase-antipatterns] Supabase service_role key reachable from client-side code — full database bypass for anyone who opens the bundle — .env:2
  [safe/supabase-antipatterns] Supabase service_role key reachable from client-side code — full database bypass for anyone who opens the bundle — app/components/UserList.tsx:10
  [safe/hardcoded-secrets] Committed environment file with secret values: .env — .env:1

Notes (low confidence — not scored):
  [safe/missing-rate-limit] Auth endpoint with no rate-limiting signal in the repo — brute-force / credential-stuffing exposure (heuristic) — app/api/login/route.ts:3

Badge: [![Umbra Trust Score](https://img.shields.io/badge/Umbra_Trust_Score-30-red)](https://github.com/elberacasa/umbra)

评分低于 50 时,退出代码为 1,因此 CI 可以据此设置门禁。

所有命令和标志(专家层——大多数用户用不到)
umbra [path]               # path defaults to the current directory
umbra [path] --json        # machine-readable output
umbra [path] --offline     # skip npm registry checks, fully local
umbra [path] --deep        # verify RUNS and HONEST in a Docker sandbox
umbra [path] --report      # write UMBRA.md: an agent-actionable task list
umbra [path] --fix         # apply provably-safe fixes and re-scan (score before → after)
umbra [path] --dry-run     # preview --fix without writing anything
umbra [path] --baseline-write  # write .umbra-baseline.json: grandfather current findings, gate only on new ones
umbra [path] --baseline <path> # use an explicit baseline file ("write" is shorthand for --baseline-write)
umbra [path] --publish     # self-report the score to the hosted badge service (live README badge)
umbra setup                # install everything (hooks + Action + agent guards)
umbra init                 # only the pre-commit hook + GitHub Action
umbra protect              # only the agent PreToolUse hooks (--remove uninstalls)
umbra guard --stdin        # hook entrypoint (agents call this, not humans)
umbra mcp                  # run the MCP server (bin: umbra-mcp)

规范包是 @elberacasa/umbra;umbra-scan 是它的简短别名。两者使用相同的引擎。

工作原理

repo in
   │
   ▼  Layer 0 · static rules (17 SAFE + CLEAN rules, 0 tokens, <1s)
   ▼  Layer 1 · evidence gating (confidence-scored, low never moves the score)
   ▼  Layer 2 · --deep sandbox (Docker: build, boot, HTTP probe, claim replay)
   │
   ▼  deterministic Trust Score + verdict + badge

每项发现都包含置信度级别以及文件和行号证据。只有高置信度和中置信度的发现会影响评分;推测则会列入备注部分。评分规则采用版本管理(当前为 v3),因此同一个仓库始终会得到相同的评分。完整计算方法见 RUBRIC.md。

免疫层:保护写入操作,而不只是扫描仓库

扫描会在问题落盘后才发现它们。免疫层会在 Agent 写入的每个文件落盘前进行检查。umbra protect 会在 Claude Code 和 Kimi Code 中安装 PreToolUse 钩子(自动检测,一条命令即可);umbra-mcp 服务也使用相同的引擎,为原生支持 MCP 的 Agent 提供支持。

Umbra 阻止 Agent 将有效密钥写入 .env 的尝试

flowchart LR
    CC[Claude Code hook] --> E
    KC[Kimi Code hook] --> E
    MCP["umbra-mcp: guard_content"] --> E
    E{"guardContent(file, content)<br/>file rules + path guard"} -->|allow / warn| W[write lands]
    E -->|"block (exit 2)"| B["reason fed back:<br/>agent fixes the root cause"]
npx umbra-scan protect   # install the hooks; --remove uninstalls cleanly

泄露的 Stripe 密钥或 alg: none JWT 永远不会写入文件。路径防护会硬性阻止 Agent 向 .git/hooks 和 .git/config 写入内容 (CVE-2026-26268,即 Agent 植入 Git 钩子以逃逸沙箱),也会阻止有效凭据写入 .env。只有高置信度的严重/高危发现才会触发阻止;其他情况都会发出警告,而且任何故障都会采取放行策略。判定约需 0.2 ms,因此防护不会拖慢 Agent。完整介绍见: docs/immune-layer.md。

--deep:验证 AI 代码,而不是盲目信任

快速扫描是静态扫描。--deep 使用大模型验证代码,并提供证据。Umbra 会将仓库复制到一次性 Docker 容器中(运行时无网络,512 MB / 1 CPU 硬性限制,120 秒后强制终止),构建并启动应用,通过 HTTP 探测其端点,再根据实际运行情况重放 README 和 Agent 产物中发现的每项声明。速度较慢(以分钟计,而非秒),并且需要正在运行的 Docker 守护进程。如果没有 Docker,则会跳过沙箱执行的评估维度,并将其排除在评分之外;无法验证不会受到惩罚。

深度扫描 README 撒谎的仓库时的实际输出 (fixtures/claims-app,因撒谎上限而最高为 49/100):

$ npx @elberacasa/umbra ./fixtures/claims-app --deep

UMBRA TRUST SCORE: 49/100  🔴

SAFE   ✅ 100/100 — 0 findings
CLEAN  ✅ 100/100 — 2 findings
RUNS   — not measured — No detectable run path (no Dockerfile, no package.json start script or main entry)
HONEST ⚠️ 50/100 — 2 claims failed, 2 verified, 1 unverifiable

Score computed over measured axes only (full rubric: SAFE 35%, RUNS 25%, HONEST 25%, CLEAN 15%). Rubric v4.
Score capped below passing: a documented claim was verified false. Trust is the product.

Claim receipts:
  CLAIM FAILED: "14 tests pass" — README.md:7 — actually 3 tests pass, 0 fail
  CLAIM FAILED: "build passes" — README.md:9 — actually build exits 1
  CLAIM VERIFIED: "All tests pass" — CLAUDE.md:3 — 3 tests pass
  CLAIM VERIFIED: "All tests are passing" — README.md:8 — 3 tests pass

任何经验证为假的声明都会将总分限制在 49:被发现撒谎的仓库无法获得及格的信任评分。相比之下,真正可运行的应用 (fixtures/runnable-app)在 --deep 下的评分为 100/100。

四个维度

维度问题衡量方式
SAFE (35%)是否存在漏洞?13 条确定性静态规则,每次扫描都会运行,完全离线。
RUNS (25%)是否确实能构建并启动?Docker 沙盒:安装、构建、启动、HTTP 探测。(--deep)
HONEST (25%)Agent 是否在测试或构建方面说谎?从 README 和 Agent 文件中提取声明,在沙盒中对照实际情况重新验证,并生成凭据。(--deep)
CLEAN (15%)有多少冗余内容?静态规则:无用导出、未使用的依赖、超大文件、重复内容。

SAFE 规则涵盖了 AI 生成代码在实际应用中常见的安全问题: 硬编码密钥(Stripe 密钥、JWT、连接字符串)、在客户端暴露 Supabase service-role 密钥,以及缺少 Supabase RLS;API 路由缺少身份验证、注入点、速率限制提示、虚构和仿冒依赖、携带凭据的 CORS 通配符、JWT 配置错误 (alg: none、无过期时间、将解码结果视为已授权)、调试标志和 堆栈跟踪泄漏、提交了敏感文件(.pem、id_rsa、SQL 转储), 以及默认凭据。

它还会检查 Agent 自身的配置——其他工具都未覆盖的攻击面: 指令文件(CLAUDE.md、.cursor/rules)和技能中的提示词注入载荷(零宽 Unicode、HTML 注释中的覆盖指令),以及危险的 MCP 配置(.mcp.json 中的明文 API 密钥、未固定版本的 npx -y 服务、 curl | sh 安装程序)。这些检查也会在 guard 中运行,因此 Agent 编辑自身配置时也会在写入过程中接受检查。

Umbra 与现有工具的对比

Umbra传统 SAST(Semgrep、Snyk Code)密钥扫描器(trufflehog、Gitleaks)Agent 审查机器人
专为 AI 生成代码打造✅通用规则集仅扫描密钥✅
验证应用能否构建、启动并响应 HTTP✅(沙盒)———
重新验证 Agent 声明,并将说谎者的分数限制在及格线以下✅———
确定性评分、版本化评分标准✅问题列表问题列表文本审查
原生支持 Agent 的使用场景(技能、Action、MCP)✅——部分支持

现有工具会回答“这种代码模式是否危险?”。Umbra 回答的是氛围编程实际引发的问题:“这是 AI 写的,我能信任它吗?”

徽章

每次扫描都会打印徽章 Markdown。将它粘贴到 README 中,让仓库展示自身的可信度评分:

[![Umbra Trust Score](https://img.shields.io/badge/Umbra_Trust_Score-30-red)](https://github.com/elberacasa/umbra)

Umbra 可信度评分

实时徽章只需启用一个标志:使用 --publish 运行(或将 Action 的 publish: true),评分就会提交到托管徽章服务,因此 README 始终显示当前分数,点击后还可查看完整报告页面——由你的 CI 自行报告,并明确标注:

[![Umbra Trust Score](https://umbra-badge.umbrabadge.workers.dev/badge/OWNER/REPO.svg)](https://umbra-badge.umbrabadge.workers.dev/OWNER/REPO)

一个引擎,覆盖所有使用场景

  • CLI(npx @elberacasa/umbra):核心功能,现已可用。简短别名: npx umbra-scan。
  • Agent 技能:信任审查技能,可安装到 Claude Code、Cursor、Copilot 和 Windsurf 中,让 Agent 在你检查之前先检查自己的工作。在 Agent 内部进行 Claude Code / Cursor / Copilot 安全审查。
  • GitHub Action:uses: elberacasa/umbra@v1 会在每个 PR 下评论信任评分。在 CI 中进行信任门控,无需本地设置。
  • umbra setup:一键安装程序——包含 pre-commit 门控、PR 评分评论,以及为检测到的 Agent 配置 PreToolUse 守卫钩子;所有操作都可幂等执行,且不会覆盖现有内容。(init 和 protect 仍可用于分步安装。)
  • umbra protect:将 PreToolUse 钩子安装到 Claude Code 和 Kimi Code 中(自动检测、幂等执行,可通过 --remove 卸载),让 Umbra 在 Agent 写入过程中审查每次写入,并在危险内容落地前将其拦截。
  • MCP 服务(umbra-mcp):Agent 可在运行过程中调用 Umbra,在代码落地前发现自身错误。使用 npx --yes -p @elberacasa/umbra umbra-mcp 添加。

日常使用方法(CI 门控、JSON 解析、钩子):docs/daily-use.md。

路线图

  • v0.1 (已发布):CLI、SAFE + CLEAN 静态维度、确定性评分、判定结果输出、徽章 Markdown。
  • v0.2 (已发布):各种使用入口。Agent 技能、GitHub Action、umbra init。
  • v0.3 (已发布,当前版本):RUNS 维度(沙箱构建、启动、HTTP 探测)和 HONEST 维度(声明凭证及说谎者上限)。
  • v1.0 (已发布):免疫层。Umbra 位于 Agent 与你的代码库之间,在写入过程中拦截并评分,然后才让写入落地。完整介绍见 docs/immune-layer.md。
  • 未来规划:跨依赖树的攻击图;对应用进行安全镜像并加以探测,避免生产环境受到探测;每个徽章背后都提供可托管的报告永久链接。

切入点是评分。最终目标是为每个 AI 构建的代码仓库提供一层验证机制。

常见问题

如何在已有检查结果的仓库中采用 Umbra? 运行一次 npx umbra-scan --baseline-write。Umbra 会将 .umbra-baseline.json 写入仓库根目录。从此之后,门禁只会拦截新问题 — 已有检查结果会被视为既有问题(判定结果会显示 baseline: N existing findings grandfathered (M new)),因此你可以逐步修复, 而不用试图一次解决所有问题。提交基线文件,让整个团队和 CI 共用它。

Umbra 与 Semgrep、Snyk 或 trufflehog 有何不同? 它们扫描代码模式;Umbra 验证实际结果。静态规则是 SAFE 轴的一个输入。 Umbra 还会在沙箱中启动应用,验证它确实能运行,并重放 Agent 文档中记录的声明,验证它没有说谎。 “README 说 14 项测试通过,实际只有 3 项通过”会导致仓库无法通过评估。

Umbra 会把我的代码发送到其他地方吗? 不会。扫描完全在本地进行;--offline 甚至会跳过 npm registry 检查。 --deep 会在本地 Docker 容器中运行你的仓库,运行时不会联网。 任何内容都不会离开你的机器。

需要 Docker 吗? 只有 --deep(RUNS 和 HONEST)需要。默认的快速扫描完全基于静态分析。 没有 Docker 时,会跳过沙箱检测的各个轴,并将其排除在评分之外,不会因此扣分。

支持哪些语言? 目前对 JavaScript 和 TypeScript(包括 Next.js 和 Supabase 应用)的覆盖最深入,这也是大多数通过 vibe coding 编写的仓库所用的语言。规则引擎可扩展;新增规则需要提供 fixture 和测试。

评分可复现吗? 可以。相同的仓库、相同的评分标准版本,每次都会得到相同的分数。评分标准经过版本管理(v2),并会显示在每份报告中;低置信度的检查结果不会影响评分。跳过的检测轴会被排除,并在其余部分中重新归一化,不会因此扣分。

它能发现哪些 AI Agent 不会提到的问题? AI 生成代码中的典型问题:将 Supabase service_role JWT 放到浏览器端(绕过所有行级安全策略)、.env 中的 Stripe 有效密钥、没有身份验证检查的 API 路由、alg: none JWT、不安全的带凭据 CORS *、npm 上不存在的幻觉依赖项,以及 Agent 自己关于测试和构建的声明是否属实。

Umbra 能在我的 Agent 写入过程中将其拦截吗? 可以,通过钩子实现。运行 npx @elberacasa/umbra protect,Umbra 会在 Claude Code 和/或 Kimi Code 中安装 PreToolUse 钩子,在每次 Write/Edit/MultiEdit 写入生效前进行检查。只有置信度高的严重和高危问题才会阻止操作(错误拦截会导致工具被卸载,因此有疑问时 Umbra 会发出警告);.git/hooks 路径防护会直接阻止植入 git 钩子(CVE-2026-26268);防护机制自身发生错误时会默认放行,因此绝不会中断你的工作流。钩子是安全护栏,不是沙箱;详情请参阅 docs/immune-layer.md。

我的 AI 编码 Agent 能直接使用 Umbra 吗? 可以,这正是它的设计方式。仓库附带 AGENTS.md 和 llms.txt,让助手准确了解何时以及如何运行它;而 Agent 技能 会让 Claude Code、Cursor、Copilot 和 Windsurf 在宣告任务完成前扫描自己的工作。

参与贡献

欢迎提交问题和 PR。请参阅 CONTRIBUTING.md。目前最有价值的贡献包括:附带 fixture 和测试的新 SAFE/CLEAN 规则、误报报告(这里严重程度为一级的问题会被视为 bug)、针对真实 AI 生成仓库的渲染测试,以及用于 umbra protect 的新执行环境适配器。

提交前请先构建并测试:

npm install
npm run build
npm test

合乎伦理地使用

Umbra 是一款防御性工具。请扫描你拥有的仓库、即将依赖的仓库,或你获准审计的仓库。检查结果指出的是弱点,并非漏洞利用;公开他人的低分来羞辱他们,也不是本工具的目的。本工具旨在让“这是 AI 写的”不再成为验证讨论的终点。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。