为 AI 智能体以及任何你通过它路由的其他进程提供即时(Just-in-time)API 密钥:调用方永远只能看到一个占位符。
原名 agent-vault-proxy。CLI 现在是 kow;旧的 avp 命令在本版本中仍可使用,并将在下一个主版本中移除(ADR-0045)。
Keys on the Wire 可保护你免受凭证窃取器(Shai-Hulud 及同类工具)和提示注入(prompt-injected)智能体的侵害,防止它们泄露你的机密。它是一个本地代理,会在请求传输过程中注入真实机密,因此即使智能体被攻破或遭受提示注入,也没有任何机密可窃取。
底层原理:一个回环(loopback)HTTPS 代理,按需(just-in-time)从 Bitwarden Secrets Manager(云版或自托管版)获取凭证,并将其注入出站请求,因此调用进程的地址空间中永远不会持有真实的凭证字节。
每个功能都在本仓库中以 Apache-2.0 许可发布,没有付费墙层级、企业版、可信云或遥测。你可以从头到尾通读全部代码(几千行),并永久运行它。
整个工作流只需一步:让内置的技能代理某个服务,它会告诉你需要粘贴到 Bitwarden(或你的 vault)的那一行内容,你粘贴进去,智能体即被代理接入。搞定。由于每一条被代理的凭证都是一个绑定,这份配置就是一份完整且可审计的清单,精确列出每个智能体可以访问哪些机密:没有任何隐式或隐藏的内容。
目标是减少各地 AI 智能体中的真实密钥,而不是锁定用户。如果 Keys on the Wire 适合你,就用它;如果某个替代方案更适合你的环境,就用那个。任何能把真实机密挡在智能体内存之外的工具都是一种胜利。
1. 安装 - Linux 用 pipx,macOS 用 brew:
pipx install 'keys-on-the-wire[bitwarden]' # [bitwarden] adds the Bitwarden backend SDK; drop it for AWS/GSM/env only
# macOS: brew install inflightsec/keys-on-the-wire/keys-on-the-wire
sudo kow setup --bws # paste your Bitwarden token — generates the CA, starts the daemon
2. 安装技能,让你的智能体替你编写绑定:
/plugin marketplace add inflightsec/agent-vault-proxy
/plugin install avp@agent-vault-proxy
3. 让技能代理一个服务 - 比如说*"把 Stripe API 路由到 Keys on the Wire。"*它会生成占位符,并打印出需要粘贴到 BitWarden 的确切备注;它永远看不到你的密钥。
4. 将机密放入你的 vault - 将真实密钥连同那条备注添加到 Bitwarden Secrets Manager(或 Google Secret Manager),然后将你的智能体路由到代理:
kow env && kow run claude
完成:智能体只发送占位符;Keys on the Wire 会在传输过程中替换为真实密钥。
除了 kow run,你也可以在智能体的 ~/.zshrc(或任何 shell rc)中导出代理与 CA 变量 - 标准配置块见使用方法。这种方式是持久的,但它会将你的整个 shell 路由到 Keys on the Wire,而不仅仅是你启动的那个智能体。
接入一条新的代理凭证不应该意味着手写绑定 YAML。内置的 avp 技能 可让 AI 助手(Claude Code 或任何支持加载技能的智能体)引导你完成整个过程:你说*"把 Acme API 路由到 Keys on the Wire"*,它会询问认证形式和主机,然后准确告诉你需要添加什么:机密名称,以及要粘贴到 Bitwarden Secrets Manager 备注(Notes)字段的注解(或 Google Secret Manager 的 avp-binding 注解,或未来后端中每条机密的元数据)。无需编辑配置或重新部署,而且助手永远看不到也不会存储机密;它只负责提议,由你来应用。
备注本身是粘贴到该机密 Notes 字段中的两行内容:
# avp-binding
api.acme.com
标记行正是使其成为绑定的关键:第一行不是 # avp-binding 的备注就保持原样,只是人工描述,永远不会被解析(ADR-0025)。(为了向后兼容,avp-binding 标记和磁盘路径在本版本中保留原名;它们将在下一个主版本中迁移为 kow - 见 ADR-0045。)
Claude Code(推荐) - 以插件形式安装,这样它在每个项目中都可用,并可通过 /plugin marketplace update 更新:
/plugin marketplace add inflightsec/agent-vault-proxy
/plugin install avp@agent-vault-proxy
通过 /avp:avp 调用它,或者直接说*"把 Acme API 路由到 Keys on the Wire",它就会自动触发。(内置插件暂时保留 avp 名称;它将随 marketplace 迁移一并改名。)*
手动安装(任何支持加载 Anthropic 格式技能的智能体) - 将 skills/avp/ 复制或符号链接到你的智能体技能目录中;Claude Code 会读取 ~/.claude/skills/。使用符号链接可在 git pull 时保持最新:
ln -s "$PWD/skills/avp" ~/.claude/skills/avp
MCP 服务器是日益增长的凭证泄露面:每个服务器都会将一个长期有效的上游令牌(GitHub PAT、Slack/Brave/Perplexity 密钥)以明文形式存放在你的客户端配置中,而客户端加载的每个服务器都可以读取它。kow mcp install 会用占位符替换那个常驻机密,并将服务器的出口流量路由到代理,这样真实值就永远不会存在于配置中:
kow mcp install github --host api.github.com --env-var GITHUB_PERSONAL_ACCESS_TOKEN \
--server-cmd "npx -y @modelcontextprotocol/server-github"
它会打印出需要粘贴的 vault 备注以及精确的 claude mcp add --env / codex mcp add --env 命令(代理 + 各运行时的 CA 信任 + 占位符环境变量):对 vault 仅提出建议,机密值永远不会被触碰。内置的 avp 技能 可以从服务器文档中推导出主机/请求头/格式,并先与你确认主机。设计与威胁模型:ADR-0040。
bubblewrap 组合使用,实现文件系统沙箱kow mcp install)代理绝不会向外部回传数据(phone home)。它仅有的出站连接是到你配置的 BWS 端点以及你的智能体正在调用的上游 API。没有遥测。默认情况下,/var/log/agent-vault-proxy/audit.jsonl 下的审计日志仅保存在本地;可选的离机(off-box)转发会将其(通过独立的 sidecar,绝不会经代理本身)仅转发到你自行运行和控制的收集器。
Apache-2.0:参见 LICENSE 和 NOTICE;对安全工具而言,明确的专利授权是刻意为之(ADR-0037)。所有功能都包含在此,没有 open-core(开源核心)、企业版或托管服务。你可以 fork 它、从头到尾通读、并永久运行。0.9.0 及更早的版本仍以原始 MIT 条款和 agent-vault-proxy 名称提供。在先成果已在 CREDITS.md 中致谢。
有一个依赖不是开源的,而且是可选安装的。 可选的 Bitwarden 后端会引入 bitwarden-sdk,它采用 Bitwarden 自家的专有 SDK 许可证,而非 Apache-2.0。Keys on the Wire 从不捆绑该 SDK;只有在你使用该后端时,才需要自行安装(pip install 'keys-on-the-wire[bitwarden]')。默认安装以及 AWS Secrets Manager、Google Secret Manager 和 env 后端均为 100% 开源。
staticop run、superfly/tokenizer、OneCLI 以及其他智能体凭证工具对比(选择适合你的即可:重点是保护更多智能体,而非锁定用户)