关于 swain-security-check
swain-security-check 是面向项目仓库的安全扫描编排工具。它检测可用扫描器,与内置检查一同运行,并按严重程度整理结果,输出 JSON 和 Markdown 报告。
主要功能
- 01检测可用的外部扫描器
- 02扫描密钥和依赖漏洞
- 03执行静态分析与上下文文件检查
- 04检查仓库卫生状况
- 05按严重程度规范化结果
- 06生成 JSON 和 Markdown 报告
适用场景
- 01在执行状态变更操作前扫描仓库
- 02检查 Agent 上下文文件中的注入模式
- 03查找密钥或被跟踪的 .env 文件
- 04审查依赖与仓库卫生问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ cristoslc/ swain --skill swain-security-check安装后在 Claude Code 中输入/swain-security-check确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/external-hook-api.mdscripts/context_file_scanner.pydoctor_security_check.pyexternal_hooks.pyscanner_availability.pysecurity_briefing.pysecurity_check.pysecurity_gate.pysecurity-scan.shthreat_surface.py详细介绍
安全检查
在执行任何更改状态的操作之前,请检查是否存在活动会话:
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
bash "$REPO_ROOT/.agents/bin/swain-session-check.sh" 2>/dev/null
如果 JSON 输出中的 "status" 不是 "active",请告知操作人员:“没有活动会话——要用 /swain-init 启动一个吗?”如果对方选择忽略,则继续。
统一的安全扫描编排器。检查扫描器是否可用,对项目运行所有可用的扫描器,将发现项归一化为按严重性分类的报告,并以 JSON 和 Markdown 两种格式呈现结果。
调用时
运行安全检查脚本:
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
SEC_SCRIPT="$REPO_ROOT/.agents/bin/security_check.py"
[ -n "$SEC_SCRIPT" ] && python3 "$SEC_SCRIPT" . || echo "security_check.py not found"
如需 JSON 输出:
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
SEC_SCRIPT="$REPO_ROOT/.agents/bin/security_check.py"
[ -n "$SEC_SCRIPT" ] && python3 "$SEC_SCRIPT" --json . || echo "security_check.py not found"
编排流程
- 检查可用性 — 检测已安装的外部扫描器(依据 SPEC-059)
- 运行扫描器 — 对项目调用每个可用的扫描器:
- gitleaks(机密信息)—
gitleaks detect --source . --report-format json - osv-scanner 或 trivy(依赖项漏洞)— 扫描锁定文件和清单文件
- semgrep(静态分析)—
semgrep --config p/ai-best-practices - 上下文文件扫描器(内置,始终运行)— 扫描所有 Agent 上下文文件中的注入模式(SPEC-058,类别 A-J)
- 仓库卫生检查(内置,始终运行)— 检查 .gitignore 完整性和已跟踪的 .env 文件
- gitleaks(机密信息)—
- 归一化 — 将所有发现项映射为统一格式(scanner、file、line、severity、description、remediation)
- 报告 — 按严重性分类输出(critical/high/medium/low),并附带摘要行
优雅降级
如果缺少外部扫描器,则跳过并发出警告——扫描不会因缺少工具而失败。两个内置扫描器(上下文文件扫描器和仓库卫生检查)始终运行,因此扫描始终会生成结果。
每个被跳过的扫描器都会在报告中附带安装提示。
退出代码
| 代码 | 含义 |
|---|---|
| 0 | 未发现问题 |
| 1 | 存在发现项 |
| 2 | 错误(例如,路径无效) |
报告格式
严重性级别
- 严重 — 源代码中的机密信息、已跟踪的 .env 文件、指令覆盖模式
- 高 — 角色劫持、权限提升、编码混淆
- 中 — 缺少 .gitignore 规则、依赖项漏洞
- 低 — 信息性发现项
单项发现字段
| 字段 | 说明 |
|---|---|
| scanner | 生成该发现项的扫描器 |
| file_path | 检测到该发现项的文件 |
| line | 行号(不适用时为 0) |
| severity | critical、high、medium 或 low |
| description | 发现的内容 |
| remediation | 修复方法 |
摘要行
示例:1 critical, 2 high, 0 medium, 0 low findings (3 total) across 4 scanners
集成点
- swain-doctor(SPEC-061)— 在会话启动期间运行轻量级上下文文件扫描
- swain-do(SPEC-063)— 针对安全敏感任务,在认领前提供安全简报
- swain-init — 在项目接入期间配置 gitleaks pre-commit 钩子
- 外部安全技能(SPEC-065)— 第三方安全技能的钩子接口
外部安全技能钩子接口
阅读 references/external-hook-api.md,了解钩子注册约定、事件架构和集成模式。
依赖项
- SPEC-058:上下文文件注入扫描器(
context_file_scanner.py) - SPEC-059:扫描器可用性检测(
scanner_availability.py) - SPEC-065:外部安全技能钩子接口(
external_hooks.py)
评论
支持 Markdown