RogerTzeng/agent-hook-bench
GitHub: RogerTzeng/agent-hook-bench
面向 AI agent 工具调用 hook 的 CI 友好型安全回归测试框架,通过确定性 YAML 策略验证防护决策是否正确拦截不安全操作。
Stars: 0 | Forks: 0
# agent-hook-bench
针对 AI agent hook 和工具防护的 CI 友好型安全测试。
你已经有了 hook。`agent-hook-bench` 能告诉你它们是否足够好。
## 为什么会有这个项目
大多数 agent 框架已经允许你拦截工具调用。困难的部分在于了解你的 hook 是否真正阻止了不安全的操作、是否要求对高风险操作进行审批,以及是否输出了可审计的 trace。
这个仓库不是另一个 agent 框架,不是可观测性仪表板,也不是模型排行榜。它是一个针对拟议 agent 操作的确定性回归测试工具。
## 测试内容
- 由 prompt injection 驱动的工具调用
- 密钥泄露
- 不安全的文件写入
- 危险的 shell 命令
- 未经授权的电子邮件
- 缺少人工审批
- 工作区逃逸
- 工具投毒
## 快速开始
```
uv sync --extra dev
uv run agent-hook-bench eval benchmarks --policy policies/default.yaml
```
检查一个拟议的操作:
```
uv run agent-hook-bench check action.json \
--policy policies/default.yaml \
--trace traces/action.jsonl
```
## 核心理念
```
agent proposes action
|
adapter normalizes action
|
policy engine checks action
|
decision: allow / block / require approval
|
trace + report
```
## Python 用法
```
from agent_hook_bench import Guard, ProposedAction
guard = Guard.from_policy("policies/default.yaml")
decision = guard.check(
ProposedAction(
action_id="demo",
tool_name="write_file",
args={"path": "~/.ssh/authorized_keys", "content": "key"},
user_intent="Summarize the note.",
source_framework="custom",
)
)
assert decision.decision == "block"
```
## 框架适配器
这些适配器使得单一策略能够跨 agent runtime 移植:
| Runtime | 集成位置 | 适配器 |
| --- | --- | --- |
| Claude Agent SDK | `PreToolUse` hook | `build_claude_pre_tool_hook` |
| OpenAI Agents SDK | 工具输入 guardrail | `from_openai_tool_context` |
| LangGraph | `ToolNode` 之前 | `from_langgraph_tool_call` |
| MCP | `tools/call` 网关 | `from_mcp_request` |
| 自定义循环 | 分发之前 | `CustomHookAdapter` |
运行无依赖的示例 agent:
```
uv run python examples/simple_agent.py
```
Claude 适配器将 `Read`、`Write`、`Edit` 和 `Bash` 映射到默认策略的
标准化工具名称。安全决策交由 Claude 的原生权限系统处理,阻止
操作返回 `deny`,审批决策返回 `ask`。
`agent_hook_bench.examples.simple_agent` 中的 `SimpleAgent` 有意设计为一个极简的示例
runtime,而不是生产级的 agent 框架。请将其 `ToolCall` 对象列表替换为
任何模型生成的调用,同时确保将防护措施保留在工具分发的紧前位置。
## 架构
```
models.py normalized action and decision schemas
detectors/ deterministic path, secret, shell, and text checks
policy/ YAML policy loader, rule registry, and engine
evals/ benchmark loading, scoring, and reports
tracing/ JSONL trace events
adapters/ thin framework normalization helpers
```
Trace 输出会递归地对检测到的密钥以及敏感键下的值进行脱敏处理。
## 对比
| 类别 | 示例 | 区别 |
| --- | --- | --- |
| Agent 框架 | OpenAI Agents SDK, LangGraph, CrewAI | 框架提供 hook;本项目验证 hook 行为。 |
| 可观测性 | LangSmith, Langfuse, AgentOps | 可观测性展示发生了什么;本项目测试应该发生什么。 |
| 红队工具 | Promptfoo, PyRIT, Garak 风格的扫描器 | 许多工具测试模型响应;本项目测试操作级别的防护决策。 |
| Agent 基准测试 | AgentDojo, tau-bench | 那些项目评估实际任务;本项目专注于拟议的工具操作。 |
## CI
包含的工作流会安装该包,并运行 lint、类型检查、单元测试和基准测试套件:
```
agent-hook-bench eval benchmarks --policy policies/ci.yaml --fail-on any
```
## 路线图
- 每个包增加更多基准测试用例
- JUnit、SARIF 和 Markdown 报告
- 可选的框架扩展
- 针对外部 agent 安全基准测试的导入器
标签:AI安全, Chat Copilot, DNS 反向解析, 大模型测试, 安全测试, 攻击性安全, 策略引擎, 网络安全挑战, 逆向工具