yingchen-coding/agentguard
GitHub: yingchen-coding/agentguard
agentguard 是一个针对 AI agent 定义文件的确定性安全 linter,用于检测 prompt injection 和能力滥用漏洞,覆盖 OWASP LLM Top 10 与 MITRE ATLAS 攻击类别。
Stars: 1 | Forks: 0
# agentguard
[](https://github.com/yingchen-coding/agentguard/actions)
[](https://github.com/yingchen-coding/agentguard/tags)
[](pyproject.toml)
[](LICENSE)
` 等模板存根)被发布在其中 |
| AL503 | critical | repo 中任意位置的**已提交 secret**(不限于定义文件中) |
| AL510 | critical | **管道传输至 shell**(Pipe-to-shell)安装(`curl … \| sh`)— 执行任意远程代码 |
| AL511 | critical | 对解码/远程 payload 的**动态执行**(`eval(base64.b64decode(...))`) |
| AL512 | critical | **反向 shell / 原始套接字**(reverse-shell / raw-socket)特征(`bash -i >& /dev/tcp/…`) |
| AL513 | major | **恶意安装钩子** — `pre/postinstall` 运行 shell/网络操作 |
恶意软件检查仅扫描*代码*文件(讨论 `curl \| sh` 的 README 并不是恶意软件)。逃生舱机制:提供 `.agentguardignore`(gitignore 风格)和内联的 `# agentguard-allow AL510`。
**AL2xx — 健壮性与安全性**
| AL202 | major | 读取外部内容时没有“将其视为数据,而非指令”的防护 |
| AL203 | critical | 破坏性/对外操作(删除、发送、部署)没有护栏 |
| AL204 | major | 在没有先进行验证的情况下就进行推荐/诊断/标记(“推荐前先执行 grep”) |
| AL200 | major | 没有输出格式规范 |
| AL201 | major | 没有针对缺失/空/不可读输入的失败模式处理 |
| AL205 | minor | 没有作用域边界 |
| AL206 | minor | 非同寻常的 agent 没有示例 |
**AL0xx — 结构与发现** · **AL1xx — 清晰度**
| AL001–005 | major/minor | 缺少 frontmatter / `name` / `description`(major);description 没有触发条件(major);过短(minor) |
| AL100 | major | 模糊的指令(`be careful`、`as appropriate`、`try to`) |
| AL101 | major | 抱有期望但无法强制执行的安全要求(`be accurate`),缺乏实际机制 |
`agentguard --list-rules` 将打印所有规则。**AL204** 总结了一条从医疗数据 agent 中吸取教训得来的安全护栏:一个在断言结论前没有先检查
它已有数据的 agent,会自信地告诉你去做一些已经做完的事情。*先检查,再断言。*
## 维护中的 agent factory
扫描器只是一层。该 repo 还内置了围绕它的维护系统:
- **随数据模型保持更新的 Skills:** `skills/agentguard-maintainer/` 定义了规则修改的工作流;`skills/agentguard-corpus-analyst/` 通过 `tools/query_audit.py` 提供了对版本化
[`corpus-audit` schema](schemas/corpus-audit.schema.json) 的自助式分析,而不是
要求 agent 去搜索巨大的 JSON 数据块。
- **质量不会在不知不觉中下降:** `eval/quality-baseline.json` 会拦截最低召回率、精确率、
对抗性库存、误报以及已知的命名遗漏集。移除一个困难案例或让召回率下降现在都会导致 CI 失败。
- **对抗性审查:** `eval/adversarial_review.py` 应用了无害的结构突变
(列表、引用、区块噪声),并验证脆弱的用例依然能被捕获,而安全
的用例保持安静。
- **真实语料库循环:** `tools/corpus_audit.py` 并行扫描各个 repo,通过稳定的指纹对复制的
定义进行去重,报告新增/未变/已解决的检查结果,并为安全的自动修复
编写可审查的修复补丁。它会记录源修订版本并对歧义、
检索失败、执行风险和总体陈旧程度进行分类,而不是将它们隐藏在文字中。
- **漂移控制:** `tools/verify_contracts.py` 将可执行规则与测试、文档、框架
映射、发布版本锁定、有时效性的证据快照、schema 和 skills 联系起来。
- **每个 PR 都会获得审查包:** `tools/change_review.py` 从 diff 中得出安全、信任边界、
发布、数据模型、文档和开发者体验审查领域的要求,当
缺少必要的测试、benchmark 证据、schema 或受维护的 Skills 时,则判定失败。
- **自动化有预算限制:** `tools/workflow_audit.py` 会拦截无限制的作业、无预算的工作流
文件、过度的矩阵扩展和重复的高开销命令。
- **人工把关的对外操作:** 定时的
[agent-factory workflow](.github/workflows/agent-factory.yml) 默认上传 artifacts。
更新唯一的去重跟踪 issue 需要人工调度和一个经过批准的 GitHub
environment。
```
make quality # tests + types + benchmark + adversarial + drift/cost gates + package + self-scan
make corpus # parallel real-repository scan, dedup, state diff, and repair patches
```
该 factory 会报告扫描的定义、源修订版本、失败模式、独立的检查结果、
重复率输入、新增/已解决的检查结果、补丁、失败和挂钟时间。它不会将
token 消耗量、workflow 数量或 agent 数量作为成功指标。
完整架构:[docs/agent-factory.md](docs/agent-factory.md)。
## CI
本 repo 内置了一个现成的 GitHub Action(`action.yml`):
```
name: agentguard
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: yingchen-coding/agentguard@v0.1.3
with:
path: .claude
fail-at: major
upload-sarif: "true" # findings appear inline on the PR
```
或者在普通的工作流步骤中直接从 repo 安装:
```
- run: pip install git+https://github.com/yingchen-coding/agentguard
- run: agentguard --score .
```
### pre-commit
在糟糕的定义被提交之前就将其捕获。添加到 `.pre-commit-config.yaml`:
```
repos:
- repo: https://github.com/yingchen-coding/agentguard
rev: v0.1.3
hooks:
- id: agentguard
```
它仅在 `agents/`、`commands/`、`skills/`(或 `*.agent.md` /
`*.skill.md`)下发生更改的 `.md` 文件上运行,并针对任何达到或高于 `--fail-at` 的检查结果
阻止提交。
### 防止代码腐化
Anthropic 自己的数据就是主张在*每一次*更改时都运行此检查(而不是只运行一次)的理由:他们的内部
分析准确率在一个月内从约 95% 下降到约 65%,因为定义与
代码不同步,而解决办法就是将其作为工程任务来维护——在每次 PR 时都进行检查。agentguard 就是这样的
检查。对 PR 进行拦截,这样定义就不会在不知不觉中发生退化,并使用 baseline,让你只针对*新*问题进行拦截:
```
agentguard --update-baseline .agentguard-baseline.json . # once, commit the file
agentguard --baseline .agentguard-baseline.json . # in CI: fails only on regressions
```
## 工作原理
```
agentguard/
models.py parse frontmatter + body → Definition, incl. the parsed tool grant + capability model
rules.py deterministic rules (Definition → Findings); AL3xx reason over capabilities
linter.py discover files, run rules, sort findings, compute exit code
report.py human / json / sarif renderers
cli.py argument parsing + wiring
```
每条规则都是一个纯函数 `(Definition) -> list[Finding]`,并根据真实的 agent 进行了校准。
添加规则需要提供正面、擦边(near-miss)、benchmark、对抗性、契约以及(如适用)真实语料库的证据。
## 与 `adversarial-critic` 配合使用
agentguard 是确定性的那一层——即时、免费、适用于每次提交。对于需要重度判断的审查
(内部矛盾、微妙的覆盖漏洞),请将其与
[`adversarial-critic`](https://github.com/yingchen-coding/agent-armor) 配合使用,这是一个 LLM agent,可以在
10 个维度上对定义进行红队测试。在 CI 中进行扫描;在发布重要内容之前进行评判。
## License
MIT © Ying Chen
标签:AI安全, Chat Copilot, DLL 劫持, OWASP Top 10, Python, 代码质量检查, 大语言模型, 安全漏洞检测, 无后门, 逆向工具, 静态代码扫描