bkd-dotcom/umbra-plugins
GitHub: bkd-dotcom/umbra-plugins
面向 AI 编程 Agent 的变更治理插件集,在编辑器与 CI 中以确定性代码拦截越权操作并签发变更回执。
Stars: 0 | Forks: 0
# umbra-plugins
**通过签名回执,在编辑器和 CI 中管理 coding-agent 的变更。**
[umbra-core](https://github.com/bkd-dotcom/umbra-core) 的编辑器与 agent 集成:
Umbra 决定 agent 的变更获得了多少权限并进行证明。这些插件将该治理机制*引入到 agent 工作的工具中* —— 由
确定性代码强制执行,而非由模型本身执行(agent 无法批准其自身的变更)。
## Claude Code 插件(最深度的集成)
一个 **`PreToolUse` hook** 会在每次执行 `Edit`/`Write`/`Bash` 之前运行,并使用 `umbra guard`
(确定性,而非模型)**阻止**范围外或被禁止的操作发生。打包了 Umbra **MCP server** 和
一个 **`/umbra:admit`** 技能,用于按需进行完全准入并附带签名回执。
```
/plugin marketplace add bkd-dotcom/umbra-plugins
/plugin install umbra@umbra-plugins
```
或者进行本地测试:`claude --plugin-dir ./claude-code/umbra`
它的作用:
- Agent 尝试编辑 `deploy.yml` / `.env` / 密钥,或运行 `curl … | bash` /
`git push` → **被阻止**,并说明原因(在发生之前)。
- Agent 编辑范围内的文件 → 静默允许。
- `/umbra:admit` → 按需提供完整的流水线 + 获得的权限 + 签名回执。
### Guard 如何工作
```
Claude Code is about to Edit/Write/run Bash
│
▼
PreToolUse hook ──► hooks/umbra-guard.sh
│ │ (passes the tool JSON on stdin)
│ ▼
│ umbra guard ── loads .umbra/admission.yaml,
│ (umbra-core) checks the path/command deterministically
│ │
▼ ▼
deny? ◄──── permissionDecision: "deny" + reason (forbidden / out-of-scope / dangerous)
allow? ◄─── {} (silent → normal permission flow continues)
```
- 该决定由 **`umbra guard` (umbra-core) 做出,而不是模型** —— 因此
agent 无法批准其自身范围外的变更。这就是核心要点:agent 无法
自我管理。
- 在**第一次**工具调用时,一个 `SessionStart` hook 会使用 Python ≥3.11 将 `umbra-core` 配置到一个
插件本地的 venv 中(它会跳过较旧的默认 `python3`)。准备就绪后它会打印出
**`Umbra active: …`**,如果无法运行(例如:没有 Python 3.11+ / 离线),它会打印出醒目的 **`INACTIVE — NOT enforcing`**
(未激活 —— 未在执行)行 —— 因此“已安装”永远不会被
误解为“已保护”。
- 如果 umbra-core 确实无法运行,它会**直接放行**(从不阻止),因此它不会
中断 session;`INACTIVE` 通知会告知你何时会发生
这种情况。
### 无需交互式 session 即可查看
审查者(以及你)可以通过一条命令来验证强制执行情况 —— 它会针对一个临时仓库,
使用 Claude Code 发送的完全相同的工具 JSON 来驱动真实的
hook:
```
bash demos/try-guard.sh
```
预期输出:`deploy.yml`、`curl | bash`、`cat .env` 以及 `.pem` 写入操作会因特定原因被
**BLOCKED** (阻止);而范围内的 `src/app.js` 编辑则会被 **ALLOWED** (允许)。需要
`bash`、`git` 以及 Python ≥3.11(hook 会自动配置 umbra-core)。
## Cursor
MCP server + 一条项目规则。请参阅 [`cursor/`](cursor/)。Cursor 没有确定性的
预写入 hook,因此那里强制执行的关卡是 PR 上的 CI 检查;而 MCP 工具
+ 规则允许 agent 在编辑器内进行自我检查。
## Codex
MCP server (`~/.codex/config.toml`) + 一个生命周期 hook guard。请参阅 [`codex/`](codex/)。
## 通用 guard(任何编辑器 / CI / pre-commit)
[`universal/umbra-guard.sh`](universal/umbra-guard.sh) —— 根据契约检查单个路径/命令或
所有已暂存的文件。将其接入 git pre-commit hook、CI
步骤或 agent 包装器中。同时也作为 `pre-commit` hook 暴露
(`.pre-commit-hooks.yaml`)。
## 强制执行的保障在于 CI
编辑器内的 guard 属于尽力而为的纵深防御。*强制执行*的关卡是
**Umbra Admission GitHub Action** —— 将其设为必需的状态检查,没有签名回执就什么也
无法合并:
.
`auto_merge` 始终为 false —— Umbra 管理 agent;而由人类执行合并。
## 许可证
[MIT](LICENSE) © 2026 bkd-dotcom.
标签:AI代码助手, Cutter, SOC Prime, Streamlit, 代码规范, 开发工具, 插件, 访问控制, 逆向工具