1一句话:它是什么
ARG 是一个面向 AI Agent 的 本地运行时安全护栏。 它不是完整 EDR,也不是企业 IAM 平台,而是: 把 Agent 的每一次动作记录成执行链,用本地规则做动态判定,并在可回滚的前提下做轻量强制。
定位坐标
不是什么
不是模型对齐、不是 prompt 防火墙、不是中心化网关全家桶、不是 eBPF/内核隔离。
是什么
端侧 / 进程内的 trace + rule + policy 闭环:可观测、可灰度、可解释、可回滚。
类比
= 本机 Agent 的“轻量 WAF + auditd + 一键 dry-run”,坐在 tool dispatch 点上。
2它要解决的真实痛点
端侧 Agent(Claude Code / Cursor / Qoder / Electron 产品)已经能读写文件、跑 shell、装依赖、读密钥、出网。 风险不再只是「服务端 API 是否越权」,而是:
① 动作发生在本机
curl | bash、npm install、读 ~/.ssh、打 metadata endpoint——
中心网关经常看不见,或来不及看见。
② 二阶注入最后落成 tool call
网页 / 邮件 / 商品详情里的指令,最终都要变成一次 tool 调用。 prompt 里“请忽略”没用;dispatcher 前判一次有用。
③ 强制太早会被卸掉
端侧 fail-closed 一误伤开发流,用户就关 Guard。 关了等于裸奔。所以 ARG 先把 精确率 / 体验 / 降级通道 当最高优先级。
3核心链路:一条事件怎么走完
决策结构(可解释)
{
"mode": "observe", // 实际生效
"recommended_mode": "deny", // 规则推荐
"enforced": false, // dry-run / allowlist 时为 false
"rule_id": "block-metadata-access",
"reason": "Agent network request targets cloud metadata endpoint"
}
4设计原则(差异化来源)
-
Local-First — 零外部依赖
纯标准库,单机可跑。中心不可用时,本机 Guard 仍可工作; 这是端侧 Agent 场景的硬要求。 -
Tracing-First — 先看见再强制
先完整记录context → action → object → decision, 再谈拦截。很多事故不是“没拦住”,而是“说不清谁干的”。 -
Fail-Open — 安全组件不当 SPOF
规则异常 / 判定超时 → 默认放行并记账。 宁可短暂漏,也不因 Guard 把自己变成全员停摆。 -
检测 / 强制解耦 — Policy as Code
规则只出推荐;policy.json决定 enforce / dry-run / allowlist。 一键--observe全局回滚,便于推广灰度。
5规则与策略
默认规则覆盖(节选)
| rule_id | mode | 说明 |
|---|---|---|
block-metadata-access | deny | 拦截 cloud metadata endpoint |
deny-dangerous-shell | deny | 破坏性 / 远程执行 shell(含常见混淆) |
deny-package-install-shell | deny | 拦截 npm/pip/apt 等依赖安装 |
deny-sensitive-file-read | deny | 拦截 ~/.ssh、.env、kubeconfig 等 |
redact-secret-log | redact | 日志落库前掩码密钥 |
alert-identity-collapse | alert | 用户身份塌缩成 service account |
alert-external-context-shell | alert | 外部上下文触发 shell |
deny-cross-tenant-oss-write | deny | OSS 跨租户命名空间越界 |
策略层(强制开关)
{
"default_mode": "enforce",
"dry_run": false,
"apps": { "demo-agent": "enforce" },
"allowlist": [
{
"rule_id": "deny-sensitive-file-read",
"app_id": "demo-agent",
"reason": "known safe probe"
}
]
}
dry_run: true 或 CLI --observe:推荐仍是 deny,实际 mode 降为 observe,
但命中率继续统计——这是推广时最关键的“先证明再拦截”。
事件类型
context_received · tool_call · network_request ·
oss_operation · log_write · shell_exec · file_read
6端侧接入路线
ARG 优先面向 端侧 Agent Runtime:Claude Code、Cursor、Qoder、Electron + LLM 产品。 不同客户端只写 Adapter;规则、策略、trace、benchmark 复用。
Claude Code
关键点 PreToolUse。危险 Bash / 装依赖 / 读密钥可 deny;
普通测试命令只 observe,不抢宿主权限系统。
提供 Node wrapper:异常 exit fail-open,避免 Guard 阻断开发。
Electron / function-call
外部商品信息、网页、附件一旦影响工具调用,先经 Main Process Tool Broker 转成 ARG event,再决定 observe / ask / deny。 模型输出绝不能直通原始 command runner。
SessionStart → UserPromptSubmit(intent anchor)→
PreToolUse(主判定)→ PostToolUse → Stop/SessionEnd。
7Agentic 威胁模型(工程分类)
| 类别 | 含义 | ARG 现状 |
|---|---|---|
| 过度主动 | 理解了任务,但越过授权边界 | 高危 shell / 安装 / 敏感文件 deny;其余 alert |
| 诚实误判 | 无恶意,但误判环境/归属/影响面 | 租户 OSS 前缀、私网访问、metadata 拦截 |
| Prompt Injection | 外部上下文劫持目标 | 外部 context 触发网络/shell 告警;dispatcher 前硬拦高危后果 |
| 模型失配 | 行为持续无法用用户目标解释 | 靠 trace 还原;不做完整行为基线(边界内) |
8对比 AGT:互补,不是替代
| ARG | 微软 AGT | |
|---|---|---|
| 默认姿态 | fail-open 灰度 | fail-closed 默认拒绝 |
| 依赖 | 零外部依赖 / 纯 stdlib | 多语言 SDK + 可选 Rust/OPA/Cedar |
| 重心 | 端侧 Runtime / Hook / Tool Broker | 企业应用中间件 / 身份 / 沙箱 / 合规 |
| 审计 | 本地 SQLite + trace_id | Merkle / 签名 TRACE / Decision Record |
| 卖点 | 灰度不可能停摆 | 结构上不可能作恶 |
| 上手 | 一条 CLI demo | 概念面厚,生产配置成本高 |
什么时候选 ARG 思路
端侧 Agent、开发者本机、试点推广、需要 dry-run 证明 precision、 安全组件不能成为 SPOF。什么时候选 AGT 思路
强合规生产、多 Agent 身份归因、防篡改审计、 需要 fail-closed 的“宁可全停,不可裸奔”。95 分钟上手
# 需要 Python 3.10+,无第三方依赖
# 1. 内置 demo(覆盖主要风险类别)
python3 -m agent_runtime_guard.cli demo
# 2. 一键全局观察模式(推荐决策仍记,强制降级)
python3 -m agent_runtime_guard.cli demo --observe
# 3. 处理自己的 JSONL
python3 -m agent_runtime_guard.cli ingest \
--events examples/demo_events.jsonl \
--rules rules/default_rules.json \
--policy config/policy.json \
--db .arg/trace.db
# 4. 按 trace 还原执行链
python3 -m agent_runtime_guard.cli trace demo-ssrf --timeline
# 5. Claude Code PreToolUse demo
python3 -m agent_runtime_guard.cli hook claude-code \
--input examples/claude_code_pretooluse_bash_danger.json
# 6. labeled benchmark / 对抗样本
python3 -m agent_runtime_guard.cli bench
python3 -m agent_runtime_guard.cli bench --events examples/evasion_events.jsonl --strict
验收时看什么
- precision:deny/alert 有多少是真风险(人工核验)
- dry_run_hits:灰度期间“若 enforce 会拦什么”
- latency_ms:端侧可接受的判定延迟
- bypass_rate:对抗样本(混淆 shell / 编码 IP / MCP 边界)漏报率