脱敏

exec_with_secrets 返回给模型的所有内容(stdout 和 stderr)都会先经过清洗。注入的密钥每出现一次,就会被替换成一个占位符,标明密钥名称以及发现它时所用的编码:

Authorization: Bearer [STRIPE_KEY:REDACTED]
QXV0aG9yaXphdGlvbjogQmVhcmVyIH[STRIPE_KEY:base64:REDACTED]Ao=

按值匹配,而不是按模式匹配

keygrant 知道它注入的每个密钥的真实值,因此它直接匹配这个值,而不是去猜“看起来像 key 的东西”。这里没有前缀黑名单(sk-、ghp_、AKIA……),也就不会在服务商推出新格式时跟不上。

匹配的形式:

在 CLI 中

keygrant exec 只有加上 --redact 才会脱敏:

keygrant exec --redact STRIPE_KEY -- sh -c 'echo "$STRIPE_KEY"'   # 输出 [STRIPE_KEY:REDACTED]
keygrant exec STRIPE_KEY -- ./deploy.sh                           # 输出原样显示在你的终端

不加该参数时,输出直接流向你的终端,这正是你自己运行命令时想要的效果。如果由 agent 调用 CLI,它必须传入 --redact;MCP 工具则始终会脱敏。

局限

脱敏是兜底手段,而不是安全边界。真正的边界是:密钥值从一开始就不会进入模型的上下文。