关于 ghost-report
ghost-report 是一项安全技能,将依赖项、密钥和代码扫描结果汇总为按优先级排列的 Markdown 报告,供仓库安全审查使用,并纳入相关高、中严重性问题的详情。
主要功能
- 01汇总依赖项、密钥和代码扫描结果
- 02按各扫描类型的状态筛选问题
- 03按严重性和扫描类型排序
- 04纳入高、中严重性问题详情
- 05使用扫描报告统计覆盖情况
适用场景
- 01汇总多种扫描结果以供审查
- 02确定已确认安全问题的优先级
- 03生成自包含的仓库安全报告
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ghostsecurity/ skills --skill ghost-report安装后在 Claude Code 中输入/ghost-report确认已加载。
附带文件report-template.md
详细介绍
综合安全报告
将所有扫描技能(scan-deps、scan-secrets、scan-code)的发现汇总到一份优先级报告中。所有工作都由你自行完成——不要启动子 Agent 或委派任务。
$ARGUMENTS
步骤 0:准备
运行以下 Bash 命令以计算路径:
repo_name=$(basename "$(pwd)") && remote_url=$(git remote get-url origin 2>/dev/null || pwd) && short_hash=$(printf '%s' "$remote_url" | git hash-object --stdin | cut -c1-8) && repo_id="${repo_name}-${short_hash}" && short_sha=$(git rev-parse --short HEAD 2>/dev/null || date +%Y%m%d) && ghost_repo_dir="$HOME/.ghost/repos/${repo_id}" && scans_dir="${ghost_repo_dir}/scans/${short_sha}" && cache_dir="${ghost_repo_dir}/cache" && skill_dir=$(find . -path '*/skills/report/SKILL.md' 2>/dev/null | head -1 | xargs dirname) && echo "scans_dir=$scans_dir cache_dir=$cache_dir skill_dir=$skill_dir"
保存 scans_dir(提交级扫描目录)、cache_dir 和 skill_dir。
缓存检查
如果 <scans_dir>/report.md 已存在,请显示:
Combined security report is at: <scans_dir>/report.md
然后停止。不要重新生成该文件。
步骤 1:读取仓库上下文
如果 <cache_dir>/repo.md 存在,则读取该文件。提取:
- 业务重要性
- 敏感数据类型
- 组件映射
如果文件不存在,则继续执行——这不算错误。
步骤 2:发现扫描结果
列出 <scans_dir> 的内容,查看存在哪些扫描类型目录。可识别的类型:
deps/— SCA / 依赖项漏洞扫描secrets/— 密钥和凭据扫描code/— 代码安全扫描(SAST)
如果这些目录都不存在,则报告错误:
No scan results found in <scans_dir>. Run one or more scan skills first:
/ghost-scan-deps
/ghost-scan-secrets
/ghost-scan-code
然后停止。
步骤 3:收集发现
对于每种存在的扫描类型,使用 glob 匹配 <scans_dir>/<type>/findings/*.md,并完整读取每个发现文件。保留每条发现的完整 Markdown 正文——报告会直接内嵌这些内容,这样读者就无需打开单独的发现文件。
此外,从每条发现中提取以下元数据字段,以供筛选和排序:
- ID — 来自
## Metadata→ID - 类型 — 扫描类型(
deps、secrets或code) - 严重程度 — 来自
## Metadata→Severity(high、medium、low) - 状态 — 来自
## Metadata→Status(例如 confirmed-exploitable、unverified、verified、rejected、clean)
步骤 4:筛选和排序
筛选: 仅保留高置信度发现:
- 对于
deps发现:状态为confirmed-exploitable - 对于
secrets发现:状态既不是clean,也不是rejected - 对于
code发现:状态为verified或unverified(不是rejected)
排除状态为 clean、rejected 或 false-positive 的所有发现。
对剩余发现进行排序:
- 按严重程度排序:high 优先,其次 medium,再次 low
- 严重程度相同时:deps 优先于 secrets,secrets 优先于 code
步骤 5:读取各扫描报告
对于 deps 和 secrets 扫描类型,如果 <scans_dir>/<type>/report.md 存在,则读取该文件。提取:
- 统计数据(已扫描候选项、已确认发现、已过滤误报)
- 执行摘要要点
注意:code 不会生成 report.md。要统计代码扫描覆盖情况,请直接计算 <scans_dir>/code/findings/ 中的发现文件数量。“候选项扫描数”是发现文件总数(所有状态)。“已确认发现数”是状态为 verified、confirmed 或 unverified 的数量。“已过滤误报数”是状态为 rejected 的数量。不要统计提名/分析流程中干净文件的分析结果——这些并未成为发现。
如果 deps 或 secrets 的单项扫描报告不存在,请注明该报告不可用。
步骤 6:生成报告
- 读取
<skill_dir>/report-template.md - 使用收集到的数据填充模板:
- 在扫描信息中填写仓库名称、提交 SHA、日期,以及运行了哪些扫描
- 根据仓库背景和汇总后的发现撰写执行摘要
- 对于这份以安全为重点、客观且基于事实的报告,所有文字内容均应采用中性、自然的语气,兼顾专业性和易读性。不要使用表情符号、破折号等
- 对于严重和高危发现(严重性 = 高):将每个发现文件中的实质性内容直接纳入报告,包括代码片段、评估表、修复命令及所有相关细节,确保报告内容完整自足
- 对于中危发现:为每个发现撰写完整的小节,说明描述、位置、代码上下文和修复方法(不要压缩成表格)
- 省略低危发现(仅保留在各次扫描的发现文件中)
- 根据各次扫描报告中的统计数据填写扫描覆盖情况表;对于代码扫描,使用步骤 5 中的发现文件数量
- 为已运行的每种扫描类型添加简短的方法说明(1-2 句话,摘自各次扫描报告)
- 不要添加各次扫描报告或单个发现文件的链接,所有内容均应直接纳入报告
- 将报告写入
<scans_dir>/report.md
步骤 7:显示输出
Combined security report is at: <scans_dir>/report.md