事件始 末
Simon Willison 发布了 scan-for-secrets 0.1 版本,这是一款 Python 命令行工具,旨在检测本地文件中的 API keys 和其他凭证,避免在发布前泄露。该工具专门针对他的工作流程而构建 :通过 claude-code-transcripts 工具发布 Claude Code 会话记录,同时确保日志文件中不会包含任何 API keys 。
该工具可通过 uvx(uv Python 包管理器自带的运行器)安装和 运行,无需完整安装。基础扫描命令如下:
uvx scan-for-secrets $OPENAI_API_KEY -d logs-to-publish/省略 -d 参数默认扫描当前工作目录。该项目已发布在 PyPI 上,源代码开源可用。
技术深解析
该工具不仅限于简单的字面字符串匹配,还能检测 secret 的常见编码形式,包括反斜杠转义变体和 JSON 转 义形式。这一点至关注重要:AI 编码代理生成的日志文件通常会将内容序列 化为 JSON,这意味着原始 API key 如 sk-abc123 可能以 sk-abc123 或带有转义字符的形式出现,具体取决于日志层的 序列化方式。
对于需要反复保护固定凭证集的用户,scan-for-secrets 支持在 ~/.scan-for-secrets.conf.sh 配置文件中 设置。该文件每行都是一个 shell 命令,其 stdout 被视为待扫描的 secret。Willison 自己的配置文件如下:
llm keys get openai
llm keys get anthropic
llm keys get gemini
llm keys get mistral
awk -F= '/aws_secret_access_key /{print $2}' ~/.aws/credentials | xargs这种设计将 secret 获取委托给现有的凭证存储(llm 密钥管理和 AWS 凭证文件),而不是在配置文件中明 文存储 secrets。配置文件作为 shell 脚本执行,因此任何将 secret 输出到 stdout 的命令都是有效的。
README 驱动的 Claude Code 开发
Will ison 使用了一种名为 README 驱动开发的工作流程:他首先完整编写了 README,详细指定了 CLI 行为、参数名称、配置文件格式和编码检测要求,然后将这些 README 提供给 Claude Code,并指示其使用红/绿测试驱动开发方式 实现该工具。AI 代理根据 README 中的规范迭代编写实现代码和测试。这种方法将 README 视为正式 规格文档,而非事后编写的文档。
编码检测
支持编码感知的扫描是最具 技术含量的部分。嵌入 JSON 日志中的 API key 可能以带有转义字符的 JSON 字符串形式出现,或者在某些日志管道中被 base64 编码。该 工具在比较前会对候选 secret 和文件内容进行规范化处理,捕获普通 grep 会遗漏的变体。 支持的完整编码列表记录在 GitHub 上的项目 README 中。
适用人群
- 发布 AI 会话记录 的开发者和用户:Claude Code、Cursor 等工具及相关代理会产生大量详细日志,可能会捕获包含 secrets 的环境变量或剪 贴板内容。
- 使用
uv且注重安全的团队:uvx运行器使其成为 零安装扫描步骤,可添加到发布前检查清单或 CI 管道中。 - 使用 Simon Willison
llmCLI 的用户:配置文件示例直接集成llm keys凭证存储,对现有llm用户而言配置非常简单。 - 以公开分享会话日志作为示例或教程的提示工程师和研究人员:他们面临与此 工具所解决的问题相同的风险。
本周行动建议
安装并对你已有的 AI 会话日志目录运行 基准扫描:
uvx scan-for-secrets $OPENAI_API_KEY $ANTHROPIC_API_KEY -d ~/ai-logs/然后创建一个 ~/.scan-for-secrets.conf.sh 文件,包含用于检索你常用凭证的命令。如果你使用 llm CLI,llm keys get openai 等命令是最 快的配置方式。如果你在 ~/.aws/credentials 中存储 AWS 凭证,请添加 Willison 配置中的 awk 行。
考虑在你用于发布记录或上传日志压缩包之前运行的任何脚本或 Make file 目标中添加扫描步骤。由于 uvx 无需预先安装包,这在 CI 运行器上同样适用 ,无需将 scan-for-secrets 添加到项目依赖列表中:
uvx scan-for-secrets $(llm keys get openai) -d ./ transcripts/ && echo "No secrets found"该工具当前版本为 0.1,请将其视为有用的安全网,而非合规级别的 secret 扫描器 。对于生产管道,建议将其与 gitleaks 或 truffleHog 等成熟工具配合使用。对于个人发布工作 流,它直接解决了目标问题。