给 Agent
给 Agent
Agent 在 KeyKeeper 里要遵守的规则,一页说完。完整的 skill 文件在仓库里。
完整说明在
skill/keykeeper.md,
Codex 和 Claude Code 读的就是它。这一页是给人看的短版,方便你核对 Agent 被告知了什么。
每个文档页也都有 Markdown 版:URL 后加 .md,或读 /llms.txt。
用 key,但看不到它
keykeeper list # 只有名字
keykeeper run -c openai --reason "一句话说明为什么" -- python app.pyrun 把 key 放进那条命令的环境变量,并从命令的输出里脱敏。每次都要说明理由(--reason),人会读。不带理由不会被拒,但窗口会用橙字写「你没有说明为什么」,并建议只允许这一次。
--duration once|run|always 是它的愿望,人会在 KeyKeeper 自己的建议旁边看到。
拿一把用户还没有的 key
keykeeper providers # 模板
keykeeper providers show stripe # 在哪创建、选什么、key 长什么样、怎么验证
keykeeper save --provider stripe --from-clipboard --create --purpose "商店的退款接口"Agent 替用户打开服务商页面并说明该选什么;用户登录、复制;KeyKeeper 写入前检查形状、保存后验证。 Agent 得到的是「接受 / 拒绝 / 联系不上」——从不是值。见服务商。
把项目的 .env 搬进来
keykeeper import ./.env --id my-app --purpose "这个项目是做什么的"
keykeeper run -c my-app -- npm run devApp 自己打开文件,先列出变量名和跳过项,批准后所有导入值都进入钥匙串,包括普通设置;不根据名字或长度猜测哪些值可以公开。
Agent 只拿到数量,拿不到值;这条凭据只能注入。仅支持单行赋值,不执行变量/命令展开;格式不完整或多行值会整份拒绝,空值、保留变量和不支持的变量名会跳过。
原文件不动:先核对跳过项、用 run 验证项目,再建议用户自行删除原文件、把 .env 加进 .gitignore,并考虑轮换曾明文保存的 key。
会被拒绝的
- 对 Agent 自己建的 key 用
keykeeper get(只注入)——改用run。 - 值看起来不像这家服务商的 key 的保存。
- 新建 key 用
--security standard却不给--purpose。 - Agent 通过命令行写的明文字段,在人确认之前不会被注入。
把 key 粘进聊天、文件或命令行的 Agent 已经把它泄露了。skill 要求它如实说明、让用户先撤销,再通过 KeyKeeper 重来。