在发布之前,证明你的 AI agent 是注入安全的、符合规范的,并且不会越界行动。
面向 LLM agent 的设计时验证器——而非运行时护栏。导入你的 LangGraph / CrewAI / AutoGen / MCP agent,Aura 会针对你已编写的 agent 证明五件事,然后交给你确切的反例或一份证书。Z3 · CTL 模型检测 · 信息流/污点 · 保形校准。本地运行,可在 CI 中运行,无需 API key。
验证一个设计 → 从其代码导入一个真实 agent → 致命三要素会以确切路径亮起 → 保存基线并对回归进行门禁。 · ▶ 观看完整演示
pip install aura-state # or: uv pip install aura-state · uv add aura-state
$ aura-state demo # no keys, no config, no agent of your own needed
aura-state check · support-ticket-agent · 4 nodes
✗ trifecta [send]: lethal trifecta closed — prompt injection at 'fetch' (untrusted)
can reach external sink 'send' unsanitized while 'draft' brings private data into
scope. Path: fetch → lookup → draft → send. Break it with a sanitizer between
'fetch' and 'send', or remove one of the three capabilities.
✗ NOT PROVEN — 1 blocking finding(s) # exit 1 → CI fails
checked: trifecta closed · taint proven · reachability proven · obligations proven · policy 0 flagged
提示注入只是其中之一。
| 属性 | 通俗解释 | |
|---|---|---|
| 🔒 | 安全 — 污点 + 致命三元组 | 无法被诱骗泄露数据 |
| ✅ | 正确 — Z3/SMT 义务 | 输出遵守你的规则(amount ≤ limit) |
| ♻️ | 活跃 — CTL 模型检测 | 终止,每一步可达,无死胡同 |
| 📊 | 校准 — 分裂共形区间 | 知道自己的实际置信度 |
| 🛑 | 受治理 — 风险控制的弃权 | 不确定时拒绝行动 |
aura-state check my_agent.json # a studio export
aura-state check your_agent.py # a LangGraph / CrewAI / AutoGen source file — parsed, never executed
aura-state check ./my-agent-repo/ # a whole directory
uvx aura-state check agents/*.json # zero-install via uv — perfect for CI
除了三要素之外,check 还能证明:
"manifest": { "side_effects": ["read"] } 添加到你的 flow 中:
✗ least-privilege [Pay]: 'Pay' can external 'payment.charge', outside the declared manifest
~/.cursor/mcp.json 并将其作为参数传入”)。静态检测——它从不连接服务器。证明它——然后证明这个证明。 生成可验证的证书,并在不信任签发者的情况下重新检查它:
aura-state certify your_agent.py --out cert.json # design + verdict, content-hashed
aura-state verify-cert cert.json # re-runs the verifier — catches any tamper
映射到 EU AI Act Art. 12 / ISO 42001(证据,而不仅仅是文档)。
对其进行基准测试。 aura-state bench 运行一个带标签的语料库(在安全/易受攻击配对上的准确率——可靠,因此按构造召回率为 100%;所测量的数字是精确率)外加对未经修改而摄入的真实 MCP/框架智能体的导入覆盖率。
执行前智能体验证器已经存在——但每个只做一件事,并迫使你将你的智能体重写成它们的形式体系。Aura 的优势在于它是已发布的工具,能够摄入你已经写好的智能体并运行整套功能:
| 静态(运行前)? | 安全数据流? | 导入你的真实智能体? | |
|---|---|---|---|
| AgentProof | ✅ | ❌ 仅拓扑 | ✅ |
| AgentFlow | ✅ | ✅ | ❌ 其自有策略 DSL |
| FIDES(Microsoft) | ❌ 运行时 | ✅ | ❌ 用它构建的规划器 |
| Aura-State | ✅ | ✅ | ✅ LangGraph / CrewAI / AutoGen / MCP |
这些方法并非我们发明——研究很丰富,其中一些比我们的更严谨。我们是那个你可以**pip install 并立即指向你现有智能体的工具。而且它是可靠 / 故障关闭**的:未知能力会作为建议呈现,绝不会被静默通过。
将其放入 CI,每个 PR 都会被检查:
# .github/workflows/aura.yml
- uses: your-org/aura-state@v0
with: { paths: "agents/*.json" }
致命三要素 是使用工具的智能体最可怕的故障模式:当它能够 (1) 读取私有数据,(2) 摄取不受信任的内容,以及 (3) 对外通信——所有这些都在一条可达路径上——隐藏在该内容中的提示注入就可以读取你的数据并将其发送出去。每个人都在警告这一点。Aura 在你发布之前,以静态方式证明你的智能体无法闭合它:
$ aura-state check dev_assistant.tools.json # ← your MCP tools/list export
✗ trifecta [slack_post_message]: lethal trifecta closed — prompt injection at 'fetch'
(untrusted) can reach external sink 'slack_post_message' unsanitized while 'read_file'
brings private data into scope. Path: fetch → Agent → slack_post_message.
Break it with a sanitizer between 'fetch' and 'slack_post_message'.
直接指向你的 MCP 配置。 导出你的 agent 的 tools/list(或把你的客户端配置交给它),Aura 会建模最坏情况——LLM 可以以任意顺序调用任意工具——然后判断 fetch + filesystem + slack 组合在一起是否构成一条数据外泄通道。它从不连接或运行服务器。
或者指向你的 agent 的代码。 Aura 从 LangGraph / CrewAI / LangChain 源文件或仓库中静态导入工具面——无需安装,且它从不运行你的代码:
aura-state check your_agent.py # extracts @tool functions & framework tools
aura-state check ./my-agent-repo/ # a whole directory
✗ trifecta [post_to_slack]: prompt injection at 'fetch_url' (untrusted) can reach
'post_to_slack' unsanitized while 'read_customer_file' brings private data into scope.
我们审计了真实的 MCP 服务器组合和代理框架(GitHub、filesystem、fetch、Slack、Postgres · CrewAI、AutoGPT),这些均基于其已发布的工具界面建模。6 个中有 5 个能够闭合致命三要素——包括 Invariant Labs GitHub-MCP 漏洞利用的确切形态。完整报告 + 来源:docs/AUDIT.md。复现方式:
python examples/audit/run.py。
(还有
python examples/audit.py:9 个手工构建的代理模式,5 个存在未防护的注入路径,4 个闭合了三要素——每个都可通过 Aura 的自动修复功能用一个净化器修复。)
绝对检查在遗留代理上噪声很大。给 check 一个基线,它仅在此变更新打开的路径上失败——这一行让 Aura 进入每个代理仓库的 CI:
$ aura-state check agents/*.json --baseline main-baseline.json
✗ taint [send_email] [NEW]: untrusted data from 'read_web' can reach sink 'send_email'…
✗ REGRESSION — 1 new blocking finding this change # exit 1 → PR fails
aura-state check agents/*.json --json > main-baseline.json # on main
aura-state check agents/*.json --baseline main-baseline.json # on the PR
安装后粘贴以下内容——Z3 在循环中拒绝一个幻觉值并接受一个正确值:
from aura_state import prove_extraction
print(prove_extraction({"area": 100, "rate": 3, "total": 999}, ["total == area * rate"]).verified) # False
print(prove_extraction({"area": 100, "rate": 3, "total": 300}, ["total == area * rate"]).verified) # True
要针对真实求解器运行完整的可执行证明——每个约 10 秒,无需 API 密钥——请克隆仓库:
git clone https://github.com/munshi007/Aura-State && cd Aura-State
pip install -e .
| 演示 | 它证明了什么 |
|---|---|
aura-state check examples/agents/*.json | 静态审计 9 种常见智能体设计——其中 5 种存在注入路径 |
python examples/audit.py | 可直接放入发布帖子的审计表 |
python examples/verified_loop_demo.py | Z3 在循环中拒绝一次幻觉提取,重试,接受 |
python examples/taint_proof_demo.py | 不可信输入可证明无法到达危险工具 |
python examples/risk_abstention_demo.py | 仅在经过校准的风险预算内行动,否则升级给人类 |
python examples/emit_contract_demo.py | 从设计忠实编译出的可移植契约 |
python examples/replan_demo.py | 验证器修复计划,直到其被证明安全 |
python examples/pasc_demo.py | 流水线感知的保形校准端到端答案,而不仅仅是每一步 |
更喜欢控制台而非代码?启动一个本地 Web 应用,在你自己的机器上运行真正的验证器。一条命令,什么都不离开你的笔记本电脑:
pip install "aura-state[ui]" && aura-state ui # opens http://127.0.0.1:8155
# or zero-install: uvx --from "aura-state[ui]" aura-state ui