给 AI agent 一把代客钥匙,而不是你的万能钥匙。

KeyValet 是 macOS 上给 AI agent 用的本地凭证代管。Claude Code、Codex、Cursor 等 MCP agent 可以使用你的 API key 和 OAuth 账号,却看不到它们:秘密留在 Secure Enclave 保护、只有 root 能读的凭证库里,由你用 Touch ID 批准——按凭证或按次——逐次弹窗显示的是真实请求。

代客钥匙能开车,打不开后备箱。

开源(Apache-2.0),免费。完全在你的 Mac 上运行,支持任何 MCP 客户端。

KeyValet No. 0bfd243
凭证
openai/main
申请方
Claude Code
请求
GET api.openai.com
/v1/models
批准方式
你的指纹
有效期
仅这一次调用(逐次授权)

钥匙留在 KeyValet 手里,agent 只拿到结果。

agent 需要钥匙时,发生了什么

四步完成,秘密始终留在只有 root 能读的凭证库里。

  1. agent 发出请求

    通过 MCP 说明要用哪个凭证、为了什么。

  2. 你来批准

    Touch ID 弹窗显示凭证和这次授权放开的能力。逐次模式下显示真实请求——方法、域名、路径,以及已知 API 的关键业务字段——按一次,只授权这一笔。

  3. KeyValet 代为调用

    root 进程注入 key,只发往你允许的域名,并抹掉响应里回显的秘密。

  4. agent 拿到结果

    返回响应,记录会话、目的和结果。会话结束,授权随之失效。

万能钥匙与代客钥匙

把 key 写进 .env 或贴进对话,等于交出了万能钥匙。

万能钥匙:.env、贴进对话的 key代客钥匙:KeyValet
agent 看到什么 明文 key,留在上下文和日志里 只有响应。长期秘密不出 root 进程。
谁来决定 没人,文件能读就能用 你,按 Touch ID 批准——每次、每个凭证或每个会话
能发往哪里 agent 发到哪就是哪 只能发往你允许的域名,不跟随跳转
事后能查到什么 什么都查不到 每次使用的会话、目的和结果,写在只有 root 能读的审计日志里
存在哪里 明文文件,或别人的云上 你 Mac 上 Secure Enclave 保护、只有 root 能读的加密凭证库

认证的事交给它,agent 不用操心

agent 拿到的是短期 token 或代理后的响应。refresh token、私钥和种子都留在凭证库里。

能找到的密钥,帮你收进凭证库

钥匙不会自己走进凭证库,所以 KeyValet 帮你把它们找出来。

能保证什么,不能保证什么

凭证工具应该讲清楚自己的边界。完整的安全模型见 SECURITY.md,或本站的安全摘要。

能保证

  • 没有设备主人认证,任何凭证都用不了。
  • 协议凭证的长期秘密不出 root 进程;仅代理凭证永不返回明文。
  • 新增域名、放宽规则、覆盖或删除都要你确认,由 root 进程强制,而不是面向 agent 的服务端。
  • 每次使用都有记录,记录里从不出现秘密。

不能保证

  • 你授权过的 agent,可以在授权范围内滥用这次授权。
  • 目的是 agent 的自述,记录但不做核验;root 或 macOS 被攻破也防不住。
  • 用 credential_get 取出的值会进入 agent 的上下文。

安装

一条命令。它会下载由 Simvito Limited Developer ID 签名的发布包并校验 SHA256SUMS,要你输一次密码,并自动配置好已安装的 Claude Code、Codex、Cursor、Grok、Devin CLI。重跑即可升级。

curl -fsSL https://keyvalet.dev/install.sh | sh

需要 Apple Silicon、macOS 14+(Intel 可从源码构建)。卸载:curl -fsSL https://keyvalet.dev/install.sh | sh -s -- --uninstall

然后直接对 agent 说:

“用 KeyValet 的 openai 模板保存我的 OpenAI key。”
“用 KeyValet 列出我的 OpenAI 模型。”

key 由你在原生对话框里输入,使用时由你用 Touch ID 批准。agent 始终看不到它。