安全模型
KeyKeeper 保证什么、不保证什么、和别家比在哪。
KeyKeeper 保证的
- 值不会无意间落到 Agent 手里。 它们在 macOS 钥匙串里,由
keykeeper run注入到一个进程的环境变量,并从该进程的输出里脱敏。Agent 新建的 key 只能注入:没有任何命令会打印它。 - 每次使用都经批准、可归因。 调用方的身份从连接上测出来(审计令牌、代码签名,或它运行的文件),不是它自报的名字。授权存在一个只有 KeyKeeper 能写的钥匙串条目里。
- 每次访问都有记录:调用方、它写的理由、命令行;授权随时可撤销。
- 不出你的 Mac,除了向你选的服务商发的只读验证请求,以及你自己配置的可选审查员调用。
KeyKeeper 不保证的
被你批准的程序可以滥用值
keykeeper run 把值交给你批准的那条命令。那条命令能对它做任何事——echo $KEY | base64、写进文件、发到别处。输出脱敏只抓原文,抓不到编码过的。
这条边界和 1Password 的 op run、Doppler 的 doppler run 以及所有环境变量注入工具相同。KeyKeeper 的回答是让批准这件事有据可依:它给你看命令、调用方、以及调用方声明过什么。
- 没签名的程序按路径认;换掉那个路径上的文件就继承了它的授权。窗口会说明这一点。
- 以你的用户身份运行的恶意程序可以向你发起授权请求,也可以在 key 还在剪贴板上时读走它。KeyKeeper 自己写入剪贴板时标记为隐藏并会清除,但护不住你从网站复制到保存之前的那一段。
- KeyKeeper 不是密码管理器:它只放给 Agent 用的开发凭据,刻意和你的个人密码分开。
审查员看不到值
可选的第二模型审查员收到的是 key 的名字、调用方写的理由和命令、声明用途、一行历史。它的 key 存在 KeyKeeper 自己的钥匙串条目里, 不是一条凭据,本机程序没法把它改指向别处。
报告问题
安全问题:security@keykeeper.dev,或在 GitHub 上私下报告。2026-09-14 两轮独立审计的发现已在 0.3.4 修复,更新说明里有列。
许可证
App、CLI 和核心库按 Functional Source License 1.1(MIT 未来许可) 发布。 碰到 key 的每一行代码都公开、可自行编译;许可证唯一禁止的是拿它做竞争性产品,而这条限制在每个版本发布两年后自动失效。 SDK、Agent skill 和 Codex / Claude Code 插件是 MIT。