用途
repomix-safe-mixer 用于在通过 repomix 打包代码库时,自动检测并移除硬编码凭据,防止在分发或共享代码包时意外泄露敏感信息。它适用于以下场景:使用 repomix 打包代码用于分发、创建可共享的参考包,或任何担心代码中存在硬编码凭据的安全场景。
主要能力
该技能提供两个脚本:
- safe_pack.py:完整的扫描→报告→打包工作流。扫描目录中的硬编码凭据,报告发现的问题(含文件/行号),若发现密钥则阻止打包,仅在扫描通过时使用 repomix 打包。
- scan_secrets.py:独立的密钥扫描工具,不执行打包。可用于验证清理结果、提交前安全检查、审计现有代码库。支持 JSON 输出以便程序化使用。
可检测的凭据类型包括:
- 云服务商:AWS 访问密钥(AKIA...)、Cloudflare R2 账户 ID 和访问密钥、Supabase 项目 URL 和匿名密钥
- API 密钥:Stripe 密钥(sk_live_...、pk_live_...)、OpenAI API 密钥(sk-...)、Google Gemini API 密钥(AIza...)、通用 API 密钥
- 认证相关:JWT 令牌(eyJ...)、OAuth 客户端密钥、私钥(-----BEGIN PRIVATE KEY-----)、Turnstile 密钥(0x...)
完整列表和模式参见 references/common_secrets.md。
使用方式
标准安全打包
python3 scripts/safe_pack.py <directory>
若扫描通过,输出类似:
🔍 Scanning ./my-project for hardcoded secrets...
✅ No secrets detected!
📦 Packing ./my-project with repomix...
✅ Packaging complete!
Package is safe to distribute.
若发现密钥,输出类似:
🔍 Scanning ./my-project for hardcoded secrets...
⚠️ Security Scan Found 3 Potential Secrets:
🔴 supabase_url: 1 instance(s)
- src/client.ts:5
Match: https://your-project-ref.supabase.co
❌ Cannot pack: Secrets detected!
选项
自定义输出文件:
python3 scripts/safe_pack.py \
./my-project \
--output package.xml
使用 repomix 配置:
python3 scripts/safe_pack.py \
./my-project \
--config repomix.config.json
排除扫描模式:
python3 scripts/safe_pack.py \
./my-project \
--exclude '.*test.*' '.*\.example'
强制打包(危险,跳过扫描):
python3 scripts/safe_pack.py \
./my-project \
--force # ⚠️ NOT RECOMMENDED
独立密钥扫描
python3 scripts/scan_secrets.py <directory>
JSON 输出:
python3 scripts/scan_secrets.py \
./my-project \
--json
排除模式:
python3 scripts/scan_secrets.py \
./my-project \
--exclude '.*test.*' '.*example.*' '.*SECURITY_AUDIT\.md'
处理检测到的密钥
发现密钥后,建议按以下步骤处理:
-
审查发现:检查每个发现,确认是真实凭据而非占位符或示例。
-
替换为环境变量:将硬编码值改为环境变量引用。例如:
修改前:
const SUPABASE_URL = "https://your-project-ref.supabase.co"; const API_KEY = "<hardcoded-anon-key-DO-NOT-COMMIT>";修改后:
const SUPABASE_URL = import.meta.env.VITE_SUPABASE_URL || "https://your-project-ref.supabase.co"; const API_KEY = import.meta.env.VITE_API_KEY || "your-api-key-here"; // Validation if (!import.meta.env.VITE_SUPABASE_URL) { console.error("⚠️ Missing VITE_SUPABASE_URL environment variable"); } -
创建 .env.example:
# Example environment variables VITE_SUPABASE_URL=https://your-project-ref.supabase.co VITE_API_KEY=your-api-key-here # Instructions: # 1. Copy this file to .env # 2. Replace placeholders with real values # 3. Never commit .env to version control -
验证清理:再次运行扫描器确认密钥已移除:
python3 scripts/scan_secrets.py ./my-project -
安全打包:清理完成后安全打包:
python3 scripts/safe_pack.py ./my-project
凭据已暴露后的操作
如果凭据已经暴露(例如已提交到 git、公开分享):
- 立即轮换凭据——生成新的密钥/令牌
- 撤销旧凭据——禁用已泄露的凭据
- 审计使用情况——检查日志中的未授权访问
- 监控——设置异常活动警报
- 更新部署——使用新凭据部署代码
- 记录事件——记录暴露内容和采取的措施
常见误报
扫描器会跳过常见误报:
- 占位符:your-api-key、example-key、placeholder-value、<YOUR_API_KEY>、${API_KEY}、TODO: add key
- 测试/示例文件:匹配 .test.、.example.、.sample. 的文件
- 注释:以 //、#、/、 开头的行
- 环境变量引用(正确用法):process.env.API_KEY、import.meta.env.VITE_API_KEY、Deno.env.get('API_KEY')
如有需要,可使用 --exclude 跳过额外模式。
与 Repomix 集成
该技能与标准 repomix 配合使用:
- 默认用法(无配置):
python3 scripts/safe_pack.py ./project - 使用 repomix 配置:
python3 scripts/safe_pack.py ./project --config repomix.config.json - 自定义输出位置:
python3 scripts/safe_pack.py ./project --output ~/Downloads/package-clean.xml
该技能在安全验证后内部运行 repomix,并传递配置和输出选项。
示例工作流
工作流 1:打包干净项目
# Scan and pack in one command
python3 scripts/safe_pack.py \
~/workspace/my-project \
--output ~/Downloads/my-project-package.xml
工作流 2:清理并打包含密钥的项目
# Step 1: Scan to discover secrets
python3 scripts/scan_secrets.py ~/workspace/my-project
# Step 2: Review findings and replace credentials with env vars
# (Edit files manually or with automation)
# Step 3: Verify cleanup
python3 scripts/scan_secrets.py ~/workspace/my-project
# Step 4: Package safely
python3 scripts/safe_pack.py \
~/workspace/my-project \
--output ~/Downloads/my-project-clean.xml
工作流 3:提交前审计
# Pre-commit hook: scan for secrets
python3 scripts/scan_secrets.py . --json
# Exit code 1 if secrets found (blocks commit)
# Exit code 0 if clean (allows commit)
资源
- references/common_secrets.md——完整凭据模式目录
- scripts/scan_secrets.py——独立安全扫描器
- scripts/safe_pack.py——完整扫描→打包工作流
相关技能:
- repomix-unmixer——从 repomix 包中提取文件
- skill-creator——创建新的 Claude Code 技能
安全说明
该技能检测常见模式,但可能无法捕获所有凭据类型。请始终:
- 手动审查发现
- 轮换已暴露的凭据
- 使用 .env.example 模板
- 验证环境变量
- 监控未授权访问
它不能替代:CI/CD 中的密钥扫描、git 历史扫描或全面的安全审计。