rebaze/scat

GitHub: rebaze/scat

一款 AI 原生的软件组合分析工具,通过单一命令完成 CycloneDX SBOM 生成、漏洞扫描和许可证合规检查,同时为人类提供可视化仪表板、为 AI 代理提供结构化输出。

Stars: 1 | Forks: 0

# scat [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/7a0a36bd26225644.svg)](https://github.com/rebaze/scat/actions/workflows/ci.yaml) [![Release](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/37b9d8e126225651.svg)](https://github.com/rebaze/scat/actions/workflows/release.yaml) [![GitHub Release](https://img.shields.io/github/v/release/rebaze/scat)](https://github.com/rebaze/scat/releases/latest) [![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](LICENSE) [![Go](https://img.shields.io/github/go-mod/go-version/rebaze/scat)](go.mod) [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/rebaze/scat/badge)](https://scorecard.dev/viewer/?uri=github.com/rebaze/scat) **软件组合分析工具 (Software Composition Analysis Tool)** —— 这正是 scat 所代表的含义。 一个命令回答三个问题:你的软件里有什么,存在哪些漏洞,以及许可证的义务是什么?专为两类受众构建——需要标准输出提供结构化数据的 AI 代理,以及想要可视化仪表板的人类。两者均是第一等级的体验。 ## 面向机器 AI 代理?运行此命令: ``` scat --quiet -f markdown ``` 完整的 SCA 报告 —— SBOM、漏洞、许可证 —— 以结构化 Markdown 格式在标准输出中显示。不写入任何文件,没有 TUI,只有纯粹的数据。对其进行管道操作、解析,或将其输入给你的下一步操作。 ## 面向人类 ``` scat ``` 打开一个包含严重性条形图、风险热力图和许可证概览的 HTML 仪表板。仅生成单个文件,方便分享。 ![深色模式](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/52fdc83bfe225657.png) ![浅色模式](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/357adc1fa2225704.png) ## 面向 AI 代理 安装 [Claude Code](https://claude.ai/code) 技能以让 AI 代理使用 scat: ``` mkdir -p ~/.claude/skills/scat curl -fsSL https://raw.githubusercontent.com/rebaze/scat/main/skill/SKILL.md \ -o ~/.claude/skills/scat/SKILL.md ``` 一旦安装,Claude 就会知道何时以及如何在你的项目上运行 scat。 ## 功能 - **CycloneDX SBOM** — 行业标准的软件物料清单 - **漏洞扫描** — 将软件包与已知 CVE 进行匹配并进行严重性评分,结合 EPSS 利用概率和 CISA KEV (已知被利用的漏洞) 数据进行丰富 - **许可证合规** — 检测并评估开源许可证 - **HTML 仪表板** — 开箱即用的精美亮/暗模式报告,随时可以分享,包含严重性条形图、风险热力图,且适合打印的布局 - **单一二进制文件** — PATH 中无需外部工具;Syft、Grype 和许可证检查均作为 Go 库嵌入其中 ## 安装 ### Homebrew(推荐) ``` brew install rebaze/tap/scat ``` ### Go install ``` go install github.com/rebaze/scat@latest ``` ### 从源码构建 ``` git clone https://github.com/rebaze/scat.git cd scat make build # injects version, commit, and build date via ldflags ``` ## 验证发布版本 每个已发布的版本均通过 [Sigstore](https://www.sigstore.dev/) 签名,并附带由 [release workflow](.github/workflows/release.yaml) 使用 GitHub Artifact Attestations 生成的 [SLSA v1.0 Build Level 3](https://slsa.dev/spec/v1.0/levels#build-l3) 起源证明以及 CycloneDX SBOM 证明。 验证下载的压缩包是否来自此仓库的发布流程: ``` # 使用 GitHub CLI(推荐 — 无需安装额外工具) gh attestation verify scat___.tar.gz --repo rebaze/scat # 使用 cosign(首先下载证明捆绑包;归档是 blob, # 而非 OCI 镜像,因此请使用 verify-blob-attestation) gh attestation download scat___.tar.gz --repo rebaze/scat # 下载的 .jsonl 包含两份证明(provenance + SBOM)— 每行 # 一份。通过检查每个捆绑包的 predicate type 来拆分它们。 jq -c 'select((.dsseEnvelope.payload | @base64d | fromjson | .predicateType) | startswith("https://slsa.dev/provenance"))' \ sha256:*.jsonl > bundle.provenance.json jq -c 'select((.dsseEnvelope.payload | @base64d | fromjson | .predicateType) == "https://cyclonedx.org/bom")' \ sha256:*.jsonl > bundle.sbom.json cosign verify-blob-attestation \ --bundle bundle.provenance.json \ --new-bundle-format \ --type slsaprovenance1 \ --certificate-oidc-issuer https://token.actions.githubusercontent.com \ --certificate-identity-regexp "^https://github\.com/rebaze/scat/\.github/workflows/release\.yaml@refs/tags/" \ scat___.tar.gz ``` CycloneDX SBOM (`scat-v-source.cdx.json`) 的证明是针对发布压缩包作为主体(而非针对 SBOM 文件本身)进行的。要验证 SBOM 证明,请使用 CycloneDX 谓词类型将验证器指向某个发布**压缩包**: ``` # 使用 GitHub CLI gh attestation verify scat___.tar.gz \ --repo rebaze/scat \ --predicate-type https://cyclonedx.org/bom # 使用 cosign(重用上面提取的 bundle.sbom.json) cosign verify-blob-attestation \ --bundle bundle.sbom.json \ --new-bundle-format \ --type cyclonedx \ --certificate-oidc-issuer https://token.actions.githubusercontent.com \ --certificate-identity-regexp "^https://github\.com/rebaze/scat/\.github/workflows/release\.yaml@refs/tags/" \ scat___.tar.gz ``` ## 命令行参考 ``` scat ``` 没有子命令。只需将 `scat` 指向一个目录或 PURL 文件即可。 ### 标志 | 标志 | 缩写 | 默认值 | 描述 | |------|-------|---------|-------------| | `--output-dir` | `-o` | `.` | 输出文件的目录 | | `--format` | `-f` | `html` | 输出格式:`html` (文件), `markdown` (标准输出) | | `--verbose` | `-v` | `false` | 详细输出 | | `--quiet` | `-q` | `false` | 隐藏非错误输出 | | `--clear-cache` | | `false` | 在扫描前删除缓存的 Grype 漏洞数据库 | | `--version` | | | 打印版本信息 | ## 输出 每次调用只产生**一个输出** —— 格式标志决定了输出的形式和目标: | 格式 | 目标 | TUI 进度 | 创建的文件 | |--------|-------------|--------------|---------------| | `html` (默认) | `--output-dir` 中的 `-summary.html` | stdout | `-summary.html` | | `markdown` | stdout | stderr | 无 | `` 是被扫描文件夹的基本名称(例如 `/path/to/my-project` 对应 `my-project`)。 `--output-dir` 仅适用于 HTML 输出。对于 Markdown,请使用 shell 重定向 (`> file.md`) 来写入文件 —— 这比使用专用标志更简单也更符合组合原则。 当使用 `-f markdown` 时,TUI 进度条会被路由到 stderr,以便在终端中保持可见,同时 stdout 输出适合管道操作的纯净 Markdown。 ### 示例 ``` # 默认:HTML dashboard scat myproject # → 写入 ./myproject-summary.html,终端显示 TUI 进度 # HTML 到特定目录 scat -o /tmp myproject # → 写入 /tmp/myproject-summary.html # Markdown 到终端 scat -f markdown myproject # → stderr 上的 TUI,stdout 上的 Markdown # 通过管道传递给 LLM scat -f markdown myproject | llm "summarize critical vulnerabilities" # 将 Markdown 保存到文件 scat -f markdown myproject > report.md # 安静模式(无 TUI) scat -q myproject scat -f markdown -q myproject # 重新下载 vulnerability database scat --clear-cache myproject # 打印版本 scat --version ``` ## 流水线 ``` source folder │ ▼ scat -summary.html (default) scat -f markdown → stdout (pipe-friendly) ``` ## 许可证 [Apache-2.0](LICENSE)
标签:AI代理, AI原生, CI/CD安全, CISA项目, Claude, CVE检测, CycloneDX, DevSecOps, EVTX分析, Go语言, Llama, LLM防护, LNA, OpenSSF, SBOM, WebSocket, 上游代理, 人工智能, 依赖分析, 可视化仪表板, 安全合规, 安全扫描, 报告生成器, 日志审计, 时序注入, 用户模式Hook绕过, 硬件无关, 程序破解, 网络代理, 许可证合规, 跌倒检测, 软件物料清单, 风险分析