C3EQUALZz/agate

GitHub: C3EQUALZz/agate

Agate 是一个用 Rust 编写的 LLM Agent 安全网关,以无代码侵入的反向代理方式检查流量、执行安全策略并记录防篡改的透明度审计日志。

Stars: 1 | Forks: 0

# Agate **一个专为 LLM agent 设计的安全网关 —— 一个内联反向代理,能够检查 agent 流量、执行策略,并将每一个决策写入防篡改的透明度日志。无需修改 agent 代码。** [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/9802c5a30b011004.svg)](https://github.com/C3EQUALZz/agate/actions/workflows/ci.yml) [![Docker image](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/9a6eb23703011010.svg)](https://github.com/C3EQUALZz/agate/actions/workflows/docker.yml) [![Docs](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/f40991af20011016.svg)](https://C3EQUALZz.github.io/agate/) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=C3EQUALZz_agate&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=C3EQUALZz_agate) [![MSRV](https://img.shields.io/badge/MSRV-1.94-blue.svg)](https://github.com/C3EQUALZz/agate/blob/main/Cargo.toml) [![Rust edition](https://img.shields.io/badge/edition-2024-orange.svg)](https://doc.rust-lang.org/edition-guide/rust-2024/index.html) [![GHCR](https://img.shields.io/badge/ghcr.io-c3equalzz%2Fagate-2496ED?logo=docker&logoColor=white)](https://github.com/C3EQUALZz/agate/pkgs/container/agate) [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) [文档](https://C3EQUALZz.github.io/agate/) · [快速开始](#quickstart) · [架构](#architecture-at-a-glance) · [示例](examples/) · [贡献指南](docs/en/contributing/index.md) **English** · [Русский](README.ru.md)
## 为什么选择 Agate 现代的 LLM agent 会调用工具、改变状态,并将自由格式的文本流式传输回 前端。它们所使用的通信协议 —— [AG-UI](https://docs.ag-ui.com/) —— 是一个普通的 HTTP `POST` 请求加上一个 Server-Sent Events 流。它 **没有身份验证,没有针对每个事件的签名,没有大小限制**, 并且包含许多无类型的字段。就其本身而言,这意味着: - 任何能够访问到该 endpoint 的人都可以控制这个 agent; - 工具调用、状态改变和发出的文本都不受检查 —— 遭受 prompt 注入的 agent 可能会泄露机密或调用它本不该碰的工具; - 没有可靠的记录来表明 agent 被要求做什么,或者它做了什么。 **Agate 在网络边缘弥补了这些缺陷。** 它位于你的 agent 前面, 终止 TLS 以便检查明文,对请求进行**边界限制**,逐个事件地 **检查**流式响应,应用**策略判定** (允许 / 拒绝 / 转换 / 终止),并将每一个 `(event, verdict)` 对**追加**到可验证的 [RFC 6962](https://www.rfc-editor.org/rfc/rfc6962) Merkle 透明度日志中 —— 所有这些都无需对 agent 代码做任何改动。 ## 功能 - **检查型反向代理** —— 将 Agate 放置在任何 AG-UI agent 前面; 它会在检查后转发流量,无论是请求还是 SSE 响应。 检查核心是协议无关的;AG-UI 只是其中一个适配器。 - **工具允许/拒绝策略** —— 通过 `allow-all`、`allowlist` 或 `denylist` 模式来管控 agent 可以调用哪些工具。 - **机密信息脱敏** —— 在发出的助手文本离开边界之前, 从中剥离已配置的机密标记(例如 `sk-`, `AKIA…`)。 - **RFC 6962 透明度日志** —— 每一个决策都会被追加到 PostgreSQL 中一个防篡改的、 仅追加的 Merkle 日志中,而不是简单的哈希链。篡改是 可检测的;包含性是可证明的。 - **密码敏捷性** —— 可插拔的、自描述的哈希 / 签名 / AEAD 策略(SHA-2/3、Streebog、Ed25519),算法标签随 每个摘要和签名一起传输。 - **TOML + 环境变量配置** —— 挂载 `agate.toml` 并支持基于键的环境变量 覆盖(`AGATE__SECTION__KEY`);将机密信息保留在环境变量中。 - **Prometheus 指标** —— 在其独立端口(`:9090`)上提供可选的 `/metrics` endpoint, 远离公共数据面;在 `deploy/` 中提供了一个开箱即用的 [Grafana + Prometheus stack](deploy/observability/)。 - **优雅关闭** —— 在收到 `SIGTERM`/`SIGINT` 时,Agate 会清理正在处理中的请求,并在退出前 **刷新审计发件箱**;适用于滚动重启和 Kubernetes pod 终止。 - **容器原生** —— 每次推送到 `main` 分支以及发布 tag 时,都会发布到 GHCR(`ghcr.io/c3equalzz/agate`)。 ## 快速开始 Agate 在 Docker 中运行。你需要一个 **AG-UI agent** 置于其后,以及一个 **PostgreSQL** 数据库用于透明度日志(迁移会自动运行)。 **1. 拉取镜像:** ``` docker pull ghcr.io/c3equalzz/agate:latest ``` **2. 编写 `agate.toml`**(从 [`agate.example.toml`](agate.example.toml) 开始): ``` [proxy] agent_endpoint = "http://your-agent:9000/run" # the real agent's AG-UI endpoint bind = "0.0.0.0:8080" [audit] database_url = "postgres://agate@db:5432/agate" # password via env, below [policy.tools] mode = "allowlist" names = ["search", "fetch"] [policy] redact = ["sk-", "AKIA"] ``` **3. 运行它**(将机密信息作为 `AGATE__*` 环境变量覆盖传入): ``` docker run --rm \ -p 8080:8080 \ -v "$PWD/agate.toml:/etc/agate/agate.toml:ro" \ -e AGATE_CONFIG=/etc/agate/agate.toml \ -e AGATE__AUDIT__DATABASE_URL='postgres://agate:secret@db:5432/agate' \ ghcr.io/c3equalzz/agate:latest ``` **4. 将你的前端指向 `http://localhost:8080`**,而不是指向 agent。 Agate 会在检查后将每个请求转发给 agent —— 并将 判定结果记录到透明度日志中。 ## 架构一览 该代理会终止 TLS,在 agent 运行之前验证请求,然后 在流式传输响应的同时咨询策略,并将数据写入远离 热路径的审计日志。 ``` flowchart LR client["Frontend / client
(untrusted)"] agent["Agent app
(AG2 / AG-UI)"] subgraph agate["Agate (agate-server)"] direction TB proxy["agate-proxy
inline inspection
(request + SSE response)"] policy["agate-policy
verdict: allow / deny /
transform / terminate"] audit["agate-audit
RFC 6962
transparency log"] proxy -- "event → verdict?" --> policy policy -- "verdict" --> proxy proxy -- "(event, verdict)" --> audit end client <-->|"AG-UI over TLS"| proxy proxy <-->|"forwarded traffic"| agent audit -.->|"append-only"| store[("Postgres
Merkle log")] ``` Agate 是一个 Cargo workspace,其中**每个 crate 都是一个限界上下文**,采用 领域驱动设计和整洁架构构建;依赖关系只向内流动, 没有共享内核。 | Crate | 限界上下文 | 职责 | | --- | --- | --- | | `agate-crypto` | 通用子域(库) | 密码敏捷性:可插拔、自描述的哈希 / 签名 / AEAD 策略 | | `agate-audit` | 审计 | 仅追加的 RFC 6962 透明度日志 | | `agate-proxy` | 代理(数据面) | Agent 流量的内联检查;event → verdict 的交接点 | | `agate-policy` | 策略 | 内容与授权决策:工具允许/拒绝 + 机密脱敏 | | `agate-server` | 组合根 | 连接 proxy ↔ audit ↔ policy;Docker entrypoint | ## 文档 完整的文档 —— 包括概述、入门、配置、架构以及 威胁模型 —— 使用 Material for MkDocs 发布,并且是 **双语的(English + Russian)**。 - **文档站点:** - **配置参考:** [docs/en/getting-started/configuration.md](docs/en/getting-started/configuration.md) - **API 参考:** `cargo doc --workspace --no-deps --open` - 本地构建文档: python -m pip install -r docs/requirements.txt mkdocs serve # http://127.0.0.1:8000 ## License 采用 [MIT License](LICENSE) 授权。
标签:DLL注入, JSONLines, LLM代理, Rust, 人工智能, 反向代理, 可视化界面, 安全网关, 流量审计, 测试用例, 用户模式Hook绕过, 网络流量审计, 自定义请求头, 请求拦截, 通知系统, 防御绕过, 零信任