ARTICLE · 1244967
AI 能用你的密码但看不见它
你大概率干过这件事。让 Claude Code 跑一次数据库迁移,脚本第一行要 PGPASSWORD,你把密码粘进了对话框。
命令跑通了,事情过去了。三天后你想起它,回去翻记录,那串密码还在。不光在原来那一轮,压缩后的小结里有,下一次会话的引用里也可能有。
于是你要改密码、重配服务、跟同事解释为什么半夜重启了一次。
这件事没有更好的结局,因为它从第一步就错了。密码一旦以文本形式交给 AI,就必然留在某个能被翻出来的地方。 区别只是你什么时候想起来。
Coffer 是另一种做法。本地密码库,macOS,AGPL-3.0,v2.12.0,7 MB,dmg 直装。它的设计目标只有一句,密码可以用,但不会被看见。
github.com/cygnusyang/coffer
先别急着装。下面把你可能试过的四种办法逐个过一遍,每一个漏在哪,然后再说它靠什么绕开。
四种办法漏的是同一个地方
.env | ||
security -w |

第四行值得停一下,因为它是很多教程推荐的做法。钥匙串确实加密存了,问题出在取的那一步。security find-generic-password -w 里的 -w,意思就是只打印密码本身。为了让 AI 用上密码,你得先把密码打到它的屏幕上,然后那段输出顺着管道进了上下文。前面九十九步的安全,第一百步作废。
四种做法看着不同,其实是同一个动作的四件外衣。你想说的是"你可以用这个密码跑这条命令",你实际做的是"这是密码,你拿着"。 前者是授权,后者是复制。授权能撤回,复制不能。
为什么大家一直这么做。因为过去几十年里,密码只有一个用法,人把它读出来,敲进输入框。所有存储工具优化的都是"怎么存得安全、怎么取得准确",取出来之后交给谁、怎么用,不归它管。加密做得再干净,最后一个动作永远是"把明文交出去"。
MCP 这类东西出现之后,情况变了。第一次有一个东西,它不需要看见值,也能替你跑完命令。缺的东西也跟着变。不再是一个取值的接口,而是一个能执行、但不返回值的接口。
Coffer 就是按这个接口做的。
密码怎么进去又怎么消失
第一层,MCP 那边只开四个工具,全部只读。 列密钥名、列元数据、取元数据,再加一个 run_with_secret。前三个返回名字和描述,最后一个根本不返回值——它起一个子进程,把密码塞进这个进程的环境变量,然后把命令的输出返回。

值的路线只有一条,从加密库到子进程的环境变量,绕开了模型。模型看到的是"命令返回了什么",不是"用的是什么密码"。
第二层,改密码这件事 AI 做不了。coffer set-password 和 coffer set-env 在 CLI 和 App 上,不在 MCP 里。一个能被 AI 改写的密码库等于没有边界。写的时候值走标准输入,不进参数、不进日志、不回显。
第三层,一组变量可以一次给。 环境容器是库里的一个条目,里面是一批 NAME/VALUE 对,注入时这些字段名直接变成环境变量名。一个项目八个变量,一次调用。
有一条得说清楚,不然就成了吹。注入只保证值不经过模型的手,不保证命令不把值喊出来。命令里只要有 echo、env、set -x,值照样进上下文。它防的是你无意中把值递过去,不是防 AI 存心偷。真有人盯着你的 key,那得靠轮换和最小权限,不是靠任何一个工具。
装完怎么证明它真的没漏
下载 Coffer-v2.12.0.dmg,拖进 Applications,右键打开。构建是开发签名,首次启动会被系统拦住,右键「打开」就过去了。建库,设主密码。这一步没有找回后门。开了 Touch ID 或存了离线恢复码才有救,两样都没开,忘了就是永久丢失。 「设置 → MCP / Agent 协作」开启「MCP 解锁托管」,输一次主密码。解锁密钥进本机钥匙串,之后的注册命令里不用再出现密码。同一页给 Claude Code / CodeBuddy / Codex 一键注册。
用插件的话两条命令。
claude plugin marketplace add cygnusyang/coffer
claude plugin install coffer@coffer最后一步是自测。让 AI 用库里任意一个密钥跑一条命令,它会走 run_with_secret,起子进程、注入、跑完消失。然后去对话记录里搜那串密码。搜不到,这次装对了。搜到了,多半是你自己让它 echo 了一遍。
用一周之后会变的三件事
第一,项目里不需要真的 .env。 真值在库里,项目里最多留一份变量名单。那个文件以前是泄露源,现在是一份说明书,提交进 git 也不心疼。
第二,换工具不用重配。 同一个库,Claude Code、CodeBuddy、Codex、Cursor 各注册一次,值只有一份。换机器把库文件搬过去。
第三,你可能顺手把主密码库也换了。 它本身是个完整密码库,22 类条目模板加自定义字段、TOTP、随机字符与密码短语双模式生成器、1PUX / CSV / opvault 导入、加密备份、自动锁定、菜单栏常驻(⌥⌘P)。不是为了 AI 多装一个玩具,是把原来那个换掉。
它不承诺什么
- 不防 root,不防物理接触。
能 dump 进程内存的人拿得到,这是威胁模型里承认的残余风险,不是 bug。 - 元数据看得见。
条目数、字段数、分类、时间戳,库文件里读得到。藏的是值,不是结构。 - 查不了泄露。
在线泄露库需要联网,跟它的零网络直接冲突。 - 主密码丢了就是丢了。
没有服务端、没有后门、没有客服。 - 只有 macOS,也没有浏览器自动填充。
那部分已经整体废弃,它现在只管存和注入。
最后再加一条,是最该说的一条。如果你已经在用某个带 CLI 的密码库,注入这件事它也能做。 Coffer 的差别在别处——零网络、可审计、MCP 内建、不要账号。这四条里只要有一条对你不重要,它就不值得你换。
凭据越窄越好
代码可以交给 AI 写。密码要不要让它看见,是另一个问题,边界形状完全相反。代码越宽越好,凭据越窄越好。这两件事被"AI 编码"一个词捆在一起,才会一直含糊过去。
顺带说另一半。这套流程里还有一样东西不该留在对话里,是进度。它的边界正好相反,凭据要窄,进度要宽。那是另一个工具,github.com/cygnusyang/Kairo。
地址放这儿。公众号正文里的外链点不开,复制到浏览器。
Coffer — https://github.com/cygnusyang/cofferRelease 页有 dmg,不用自己编 遇到问题开 issue 比在评论区问快,仓库是我们自己回















































































