帖子说了什么
@jacksunny18 读了第三方密钥扫描器 MEDUSA 的实现后提醒:它对 Claude Code 的匹配偏 全局/项目 prompt 历史(如 history.jsonl),而 Anthropic 文档里完整会话——每条消息、工具调用与结果——落在 ~/.claude/projects 下按会话的 JSONL transcript。你粘贴进提示的 key,历史文件里可能有;工具读出或命令打印的密钥,往往只在 transcript 里。
结果是:扫描报告「未发现凭证」,你可能据此以为干净,却没扫到真正的大文件。帖子还提到体积上限跳过、无结果文件不打印、清理时把含密备份另存等行为——都会制造「假阴性」。
官方侧怎么对齐
此前整理过:粘过或打印过的密钥可能留在本地 transcript;正确顺序是先在控制台吊销/轮换,再清理本地文件。本条补的是:不要把「某个扫描器绿灯」当成唯一证据——核对它是否包含 transcript 路径,而不仅是 history。
落地建议
- 事故排查时直接在
~/.claude/projects下按会话 JSONL 搜sk-、AKIA等模式,或确认扫描工具的 glob 覆盖这些文件。 - 发现疑似泄露:先吊销 API key / 云凭证,再删或隔离本地记录。
- 用 deny 规则减少 Agent 再读
.env;需要扫描报告时,看清是否生成了仍含明文的报告/备份并事后删掉。 - 超大 transcript 被工具跳过时,当作「未扫描」,不要当成「无问题」。
小结
history 是你键入的提示;transcript 才是 Agent 全程。扫密钥以全文会话为准,报告绿灯不能替代吊销。
