RPBLC-hq/DAM
GitHub: RPBLC-hq/DAM
专为 AI 编码 Agent 设计的本地隐私防火墙,通过代理拦截出站 prompt 中的敏感信息并进行令牌化替换,防止 PII 泄露给模型提供商。
Stars: 9 | Forks: 0
DAM
数据访问中介
专为编码 Agent 设计的本地隐私防火墙。
快速开始 · 工作原理 · 授权 · Web UI · 托盘应用 · 命令 · V1 限制 · 下一步计划
DAM 运行在你的机器上,位于编码 Agent 和其模型提供商之间。它会检测出站 prompt 中的敏感值,应用本地策略和授权确认,将受保护的值替换为稳定的引用,并将原始值存储在本地 Vault 中,这样提供商就只能看到你希望分享的内容。 V1 版本专注于目前最重要的本地 AI 路径: - 通过 `dam connect` 启动本地受保护端点的 **工具和 Agent**。 - 通过 `ANTHROPIC_BASE_URL` 支持的 **Claude Code**。 - 通过注入 OpenAI 提供商配置支持的 **Codex API-key 模式**。 Codex ChatGPT-login 模式被故意屏蔽,直到其传输通道能够得到安全保护。 ``` You type: "Email banana@banana.com and include card 4111-1111-1111-1111" DAM sends upstream: "Email [email:BhjEUc1EX1JHLbeT7JUS6g] and include card [cc:7j21sVjW3aN4xFqP9L6MRA]" Provider can reason over: "there is an email" "there is a card" Provider does not need: banana@banana.com 4111-1111-1111-1111 ``` ## 快速开始 当你想要尝试 DAM 而不想创建持久化的本地数据库时,可以使用一次性 npm 试用模式: ``` npx @rpblc/dam claude ``` 对于 Codex,请使用 API-key 模式: ``` OPENAI_API_KEY=sk-... npx @rpblc/dam codex --api ``` 试用模式会创建临时的 Vault、日志和授权数据库,启动受保护的 Agent,然后在会话退出时删除这些数据库。 ``` DAM trial mode Vault: /tmp/dam-trial-.../vault.db Log: /tmp/dam-trial-.../log.db Consents: /tmp/dam-trial-.../consent.db ``` 保留试用数据库以供检查: ``` npx @rpblc/dam claude --keep ``` 全局安装以使用常规的持久化本地状态: ``` npm install -g @rpblc/dam dam connect dam status dam integrations list dam claude dam codex --api ``` 使用 `npx` 时,`--persist` 会跳过一次性试用模式,并使用已配置/默认的数据库路径: ``` npx @rpblc/dam claude --persist ``` 从源码检出运行: ``` cargo run -p dam -- connect cargo run -p dam -- integrations list cargo build -p dam -p dam-web -p dam-tray cargo run -p dam-tray cargo run -p dam -- claude cargo run -p dam -- codex --api ``` ## 工作原理 ``` local machine provider prompt ──► dam launcher/daemon ──► dam-proxy ────────────────► model API │ │ │ │ ├─ detect sensitive values │ │ ├─ apply policy │ │ ├─ apply active consents │ │ ├─ write tokenized values to vault │ │ ├─ redact outbound request │ │ └─ write non-sensitive log events │ │ │ ◄──────────────── response with DAM references ◄───────┘ vault.db raw originals for tokenized values, local SQLite consent.db exact-value passthrough grants with TTL log.db event metadata, not raw detected values ``` 出站处理管道在代理和 `dam-filter` 中具有相同的结构: ``` input -> dam-detect -> dam-policy -> dam-consent active exact-value overrides -> dam-core replacement plan -> dam-vault for tokenized values -> dam-redact -> output ``` 默认情况下,在同一请求/运行中,重复出现的相同值会复用相同的引用: ``` [policy] deduplicate_replacements = true ``` 如果在你的使用场景中,复用相同的引用会泄露过多的等价信息,请将其设置为 `false`。 ## 授权 授权允许特定的检测值以未脱敏的形式通过,直到其 TTL 到期或授权被撤销。它会覆盖 `tokenize` 和 `redact`,但不会覆盖 `block`。 授权是基于精确值授予的,其键名为: ``` kind + value_fingerprint + scope ``` 它们不存储原始的敏感值。从 Vault UI 或 MCP 服务器创建的授权会使用一个稳定的 Vault 密钥,例如: ``` email:ANJFsZtLfEA9WeP3bZS8Nw ``` 这个稳定密钥非常重要,因为入站引用解析会在 Agent 看到本地值之前,将方括号引用还原回这些本地值。 默认授权配置: ``` [consent] enabled = true backend = "sqlite" path = "consent.db" default_ttl_seconds = 86400 mcp_write_enabled = true ``` 撤销一个授权会同时撤销具有相同精确值和作用域的所有活动授权,因此重复的 Vault 记录无法在撤销后继续保持通行状态。 ## Web UI `dam-web` 是用于开发和运维人员检查的本地管理 UI: ``` dam web --config dam.example.toml cargo run -p dam-web -- --config dam.example.toml ``` 它提供: - `/connect`:用于本地保护层面:选择配置文件,应用设置,连接,断开连接,以及检查活动端点。 - `/`:用于查看 Vault 记录、明文值,以及记录级别的授予/撤销操作。 - `/consents`:用于查看活动和历史授权记录。 - `/logs`:用于查看非敏感的检测、脱敏、授权和解析事件。 - `/doctor`:用于与 `damctl doctor` 共享的本地就绪检查。 - `/diagnostics`:用于配置和代理健康检查。 `/connect` 使用与 `dam profile set` 相同的活动配置文件状态。Connect 操作会通过 shell 调用本地 `PATH` 中的 `dam` 二进制文件;当从源码树或自定义安装目录运行时,请设置 `DAM_BIN=/path/to/dam`。 Web UI 会以明文形式显示 Vault 值。请将其视为本地管理界面,而不是公共 Web 应用。 ## 托盘应用 `dam-tray` 是用于本地连接用户体验的首个原生 shell。在 macOS 上,它会启动一个本地 `dam-web` 子进程,将 `/connect` 保留在隐藏的 WebView 中,并且仅在点击 `[R:]` 项时打开菜单栏弹出窗口。 ``` cargo build -p dam -p dam-web -p dam-tray cargo run -p dam-tray ``` 托盘 shell 默认使用 `$DAM_STATE_DIR` 或 `$HOME/.dam` 来存储持久化的本地状态。页面内的 Quit DAM 操作会运行 `dam disconnect`,停止托管的 Web UI,并退出托盘 shell。 ## MCP DAM 内置了一个 MCP 服务器,以便 Agent 在启用时可以管理授权: ``` cargo run -p damctl -- mcp config cargo run -p dam-mcp -- --config dam.example.toml ``` 当前工具: - `dam_consent_list` - `dam_consent_grant` - `dam_consent_revoke` `dam_consent_request` 被有意暂停,直到通知流程开发完成。 ## 命令 后台本地端点: ``` dam connect [--openai|--anthropic] [DAM_OPTIONS] dam connect --profile标签:AI 代理安全, AI 安全, AI 数据安全, AI 防火墙, API 网关, CISA项目, Claude Code 安全, GNU通用公共许可证, LLM 代理, MITM代理, Node.js, OpenAI Codex, Rust 语言, 个人身份信息 (PII) 保护, 个人隐私保护, 企业隐私保护, 可视化界面, 大语言模型 (LLM) 防火墙, 安全中间件, 敏感数据脱敏, 数据合规与同意, 数据访问中介, 数据防泄漏 (DLP), 数据隐私, 暗色界面, 本地数据保险箱, 编码安全, 通知系统, 隐私计算, 隐私防火墙