用途
repo-scan 用于解决大型遗留代码库的审计难题。正如其介绍所指出的:每种生态都有自己的依赖管理器,但没有工具能横跨 C++、Android、iOS 和 Web 告诉你——哪些代码真正属于你、哪些是第三方、哪些是死重(dead weight)。repo-scan 正是为此设计的扫描技能,适合在接管大型遗留代码库、进行大规模重构之前、审计直接嵌入源码(而非在包管理器中声明)的第三方依赖、或为 monorepo 重组准备架构决策记录时使用。
主要能力
- 跨技术栈扫描:一次性处理 C/C++、Java/Android、iOS(OC/Swift)、Web(TS/JS/Vue)。
- 文件分类:每个文件被标记为项目代码、第三方代码或构建产物。
- 库检测:识别 50 多个已知库(FFmpeg、Boost、OpenSSL 等),并提取版本信息。
- 四级结论:核心资产(Core Asset)/ 抽取合并(Extract & Merge)/ 重建(Rebuild)/ 废弃(Deprecate)。
- HTML 报告:交互式暗色主题页面,支持逐层下钻导航。
- Monorepo 支持:层级化扫描,输出汇总报告与子项目报告。
工作流程
- 分类仓库表面:枚举文件,将每个文件标记为项目代码、嵌入式第三方代码或构建产物。
- 检测内嵌库:检查目录名、头文件、许可证文件和版本标记,识别打包依赖及其可能版本。
- 为每个模块打分:按模块或子系统分组,根据归属、重复度和维护成本给出四级结论之一。
- 突出结构性风险:指出死重产物、重复封装、过时的内嵌代码,以及应被抽取、重建或废弃的模块。
- 生成报告:返回简要摘要与可交互的 HTML 输出,支持按模块下钻,便于异步审查审计结果。
分析深度级别
| 级别 | 每模块读取文件数 | 使用场景 |
|---|---|---|
fast |
1-2 个 | 对超大目录做快速盘点 |
standard |
2-5 个 | 默认审计,含完整依赖与架构检查 |
deep |
5-10 个 | 增加线程安全、内存管理、API 一致性检查 |
full |
全部文件 | 合并前的全面审查 |
使用方式与安装
repo-scan 通过一个引导指针(bootstrap pointer)安装,安装来源为固定在特定 commit 上的外部技能仓库。安装脚本的说明明确要求先克隆,以便在安装前审查被固定的提交。脚本文本包含:设定 REPO_SCAN_COMMIT 为 2742664ebcad1450c208eda0ae45d3c17fad5dd8,安装目录默认为 ${CLAUDE_CONFIG_DIR:-$HOME/.claude}/skills/repo-scan,通过 git clone --filter=blob:none --no-checkout https://github.com/haibindev/repo-scan.git 后检出该 commit,并在提示输入 install 确认后才替换目标目录;脚本还包含临时目录、锁文件、备份与失败回滚等处理。
其资料提示:安装前请审查源码。安装完成后仅完成引导步骤,需要重载 agent harness,然后再次调用 repo-scan。该 ECC 指针负责安装外部技能,但本身不执行扫描。
资料中还包含一条通用提醒:在安装任何 agent skill 之前,请审查其源码。
使用建议
资料给出的最佳实践包括:
- 首次审计从
standard深度开始。 - 对于拥有 100 以上模块的 monorepo,使用
fast获取快速盘点。 - 对被标记为需重构的模块,增量运行
deep。 - 查看跨模块分析,以检测子项目之间的重复。
示例
资料中给出的一个示例:在一个 50,000 文件的 C++ monorepo 上,repo-scan 发现 FFmpeg 2.x(2015 年版本)仍在生产中使用;发现同一个 SDK 封装被重复了 3 次;识别出 636 MB 已提交的 Debug/ipch/obj 构建产物;分类结果为 3 MB 项目代码对 596 MB 第三方代码。
限制
- 具体收费、价格、平台兼容范围、性能上限、支持的模型等信息,资料中暂未提供。
- 安装脚本依赖 git 与 tar 等环境,并在交互式终端中要求输入
install确认。 - 本技能为外部技能的安装指针,安装后需重载并再次调用才会实际执行扫描。