sudoworks-lab/repo-health-doctor

GitHub: sudoworks-lab/repo-health-doctor

一款本地优先的执行前安全门控工具,帮助开发者和 AI Agent 在运行陌生代码库之前评估风险并做出拦截决策。

Stars: 0 | Forks: 0

# repo-health-doctor [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/sudoworks-lab/repo-health-doctor/actions/workflows/ci.yml) ![Python](https://img.shields.io/badge/python-3.10%2B-blue) ![License](https://img.shields.io/badge/license-MIT-blue) ![Version](https://img.shields.io/badge/version-0.1.0-blue) repo-health-doctor 是一个本地优先的执行前安全门控,专为人类和 AI agent 在处理不熟悉的代码库时使用。 它不能证明安全。 它防止虚假的自信。 在 agent 或开发者运行 `npm install`、`pip install`、`pytest`、 `make` 或生成的脚本之前,repo-health-doctor 会收集有限的证据, 暴露局限性,并防止缺失或降级的证据变成 “绿灯”。 ## 谁应该使用它 当你想要在接触一个你不完全信任的代码库之前,设置一个小巧且易于审查的 gate 时,请使用 repo-health-doctor: - 审查 AI 生成或外部代码库更改的维护者 - 首次浏览陌生本地检出代码的开发者 - 需要执行故障关闭(fail-closed)执行前检查的 coding agent - 需要脱敏的 PASS / WARN / BLOCK 报告的 CI 工作流 ## 5 分钟演示 在本地检出的代码中运行这些命令。它们不会安装 Gitleaks、OSV-Scanner 或 任何其他主机扫描器,也不会连接网络。 1. 检查在检出的代码中是否可以使用该命令: ``` env PYTHONPATH=src python3 -m repo_health_doctor --help ``` 2. 运行无发现但降级的演示,并阅读 opt-in 的 gate 摘要: ``` env PYTHONPATH=src python3 -m repo_health_doctor examples/demo-no-finding-but-degraded \ --public-safety \ --gate-summary \ --format json \ --output /tmp/rhd-demo-no-finding.v3.json \ --gate-decision-output /tmp/rhd-demo-no-finding.gate.json python3 -m json.tool /tmp/rhd-demo-no-finding.gate.json ``` 3. 运行合成供应链演示: ``` env PYTHONPATH=src python3 -m repo_health_doctor examples/demo-synthetic-supply-chain \ --public-safety \ --gate-summary \ --format json \ --output /tmp/rhd-demo-supply-chain.v3.json \ --gate-decision-output /tmp/rhd-demo-supply-chain.gate.json python3 -m json.tool /tmp/rhd-demo-supply-chain.gate.json ``` 终端摘要是演示的主要读数:静态健康状况可以是 `PASS` 而 gate 决策仍然是 `UNKNOWN`、`WARN`、`QUARANTINE`、`BLOCK` 或 受限状态。它还会保持 `execution_authorized=false` 并解释“没有扫描器发现”并不等于安全证明。无发现演示会指出缺失 或降级的观察者证据;合成供应链演示会指出 postinstall、凭据/环境、出站目标、工作流和类 eval 信号。当你想要检查 实验性 gate 详情时,可以使用 sidecar JSON。 `--gate-summary` 是 opt-in 的,旨在作为人类可读的演示 / 审查辅助工具。 它不会改变默认的 v3 报告契约。Gate 决策 sidecar、 人类可读的解释和上下文措辞都是实验性的。即使 `allow_limited` 也不是安全证明或不受限制的执行许可。 更多详情请参见 [docs/quickstart.md](docs/quickstart.md) 和 [docs/demo-runbook.md](docs/demo-runbook.md)。 ## 这不是什么 repo-health-doctor 不是: - Gitleaks、TruffleHog、OSV-Scanner、Grype、Syft、zizmor、 actionlint、Falco、Tracee 或 EDR 的替代品 - 一个完整的恶意软件沙箱 - 一个依赖漏洞数据库 - 代码库安全的证明 - 运行派生自代码库的命令的许可 这个边界是刻意设定的。干净的扫描器结果仅仅是范围有限的证据。 扫描失败不是 PASS。降级的观察者不等于信心。外部 扫描器证据可以提高风险,但它不能授权实时执行。 ## 稳定性与公开契约 默认的 v3 报告仍然是兼容稳定的输出。默认的 CLI 行为、脱敏原则、无发现的局限性、决策与 授权分离、gate 决策 `execution_authorized=false` 以及 呈现的局限性都是稳定的公开契约。 证据 schema、gate 决策 sidecar、`--gate-summary`、人类可读的 gate 解释、导入的证据适配器、样本输出和执行 授权工件在此版本中均为实验性功能。与真实输出兼容的 fixture 覆盖率和 Docker 集成 CI 路径也是实验性的,并且 仅限于文档中记录的 fixture、版本和 CI 范围。 请参见 [docs/public-contracts.md](docs/public-contracts.md) 和 [docs/versioning.md](docs/versioning.md)。 ## 安全审查状态 尚未进行第三方安全审查。内部测试、公共安全检查、 策略验证、schema 检查和兼容性 fixture 不能 替代外部审查。欢迎进行安全模型审查;请对非敏感审查使用 公开模板,并避免使用原始的敏感数据。 请参见 [docs/security-review-needed.md](docs/security-review-needed.md) 和 [docs/threat-model.md](docs/threat-model.md)。 ## 本地快速检查 对于本地开发,请在仓库根目录下使用 `PYTHONPATH=src` 运行离线本地验证: ``` env PYTHONPATH=src python3 -m unittest discover -s tests -v env PYTHONPATH=src python3 -m repo_health_doctor --version env PYTHONPATH=src python3 -m repo_health_doctor . --fail-on block --public-safety env PYTHONPATH=src python3 -m repo_health_doctor validate-policy . env PYTHONPATH=src python3 -m repo_health_doctor . --public-safety --format json --output /tmp/repo-health-doctor-result.json python3 -m json.tool /tmp/repo-health-doctor-result.json >/dev/null ``` 可编辑安装是可选的,属于打包验证的一部分。在网络受限的环境中,在解析构建系统依赖项之前它可能会停止, 因此请将离线本地验证保留为本地基线,并在 CI 或构建依赖已解决的环境中维护打包验证。 ``` python3 -m venv .venv . .venv/bin/activate python3 -m pip install -e . repo-health-doctor --version repo-health-doctor . --fail-on block --public-safety ``` ## 核心命令 ``` repo-health-doctor . repo-health-doctor . --public-safety repo-health-doctor . --fail-on warn --public-safety repo-health-doctor . --public-safety --format json --output /tmp/repo-health-doctor-public-safety.json repo-health-doctor . --public-safety --format markdown --output /tmp/repo-health-doctor-public-safety.md repo-health-doctor validate-policy . repo-health-doctor list-allows . repo-health-doctor list-allows . --fail-on expiring-soon repo-health-doctor diff-reports before.json after.json repo-health-doctor release-check . repo-health-doctor sandbox . ``` 命令详情特意保留在文档中: - [docs/quickstart.md](docs/quickstart.md):5 分钟演示和 gate 决策 - [docs/demo-runbook.md](docs/demo-runbook.md):安全的合成演示代码库 - [docs/policy.md](docs/policy.md):策略和 `validate-policy` - [docs/ci-integration.md](docs/ci-integration.md):CI 和 GitHub Step Summary - [docs/maintainer-guide.md](docs/maintainer-guide.md):维护者工作流 - [docs/agent-guide.md](docs/agent-guide.md):agent 工作流 ## 输出与脱敏 当前稳定的扫描输出使用 `schema_version: 1.1` 并报告: - `PASS`:当前检查范围内没有阻碍性发现 - `WARN`:在依赖结果之前需要进行审查 - `BLOCK`:在处理发现或缺失的证据之前不要继续 报告不得打印原始密钥、原始扫描器输出、原始 stdout 或 stderr、 主机私有路径、凭据或原始策略值。公共安全发现 将作为中性类别报告,而不是原始检测值。 此紧凑的策略 JSON 样本与 golden fixture 保持同步: ``` { "tool": "repo-health-doctor", "version": "0.1.0", "schema_version": "1.1", "repo_path": "", "overall_status": "pass", "summary": { "pass": 1, "warn": 0, "block": 0 }, "checks": [ { "name": "policy", "status": "pass", "summary": "Policy configuration loaded.", "details": { "findings": [], "policy_sources": [ "repo" ], "ignore_path_count": 1, "allow_finding_count": 0 } } ] } ``` 此文本样本显示了脱敏的公共安全报告结构: ``` Repo Health Doctor: PASS Target: Schema: 1.1 Summary: 12 pass, 0 warn, 0 block Status: PASS ok, WARN review, BLOCK release blocker Checks: - [PASS] readme: README found. found: README.md - [PASS] license: License file found. found: LICENSE - [PASS] gitignore: .gitignore found. found: .gitignore, .git/info/exclude - [PASS] ci: Workflow file found. found: .github/workflows/ci.yml - [PASS] tests: Test directory found. found: tests - [PASS] docs: Docs directory found. found: docs - [PASS] scripts: Scripts directory found. found: scripts - [PASS] secrets_scan: No obvious unallowed secrets detected. scanned_files: 6 - [PASS] large_files: No unallowed large files detected. threshold_bytes: 10485760 - [PASS] public_text_safety: No obvious public-facing text issues detected. scanned_files: 6 scan_scope: tracked - [PASS] tracked_artifacts: Tracked generated or environment files were not detected. scan_scope: tracked - [PASS] policy: Policy configuration loaded. policy_sources: repo ignore_path_count: 1 allow_finding_count: 0 ``` 当前 v3 输出向未来证据/gate 模型转变的差距记录在 [docs/v3-output-to-evidence-gate-gap-audit.md](docs/v3-output-to-evidence-gate-gap-audit.md) 中。 机器可读的 schema 和 golden 样本由测试覆盖。 ## 与现有工具的关系 repo-health-doctor 是一个证据标准化器和执行前 gate。在 策略允许的情况下,它可以 使用或关联来自专用工具的证据,但 它不会取代它们。 角色分工记录在 [docs/competitor-positioning.md](docs/competitor-positioning.md) 中。 ## 局限性 - 它不能证明代码库是安全的。 - 它不能取代专门的密钥、漏洞、SBOM、CI/CD、EDR 或 runtime 检测工具。 - 它不能消除 Docker、扫描器二进制文件、观察者、fixture 或版本 的盲点。 - 当前稳定的 JSON 输出是面向检查的报告,而不是未来的 证据/gate 模型。 - 与真实输出兼容的覆盖范围仅限于文档记录的 fixture、版本 和适配器范围。 - 尚未进行第三方安全审查,这仍然是外部的必要工作。 ## 详细文档 - [docs/README.md](docs/README.md):完整文档索引 - [docs/security-model.md](docs/security-model.md):脱敏和安全边界 - [docs/evaluation-model.md](docs/evaluation-model.md):测试、fixture 和 golden 输出 - [docs/public-contracts.md](docs/public-contracts.md):稳定 / 实验性 / 非契约接口 - [docs/security-review-needed.md](docs/security-review-needed.md):第三方审查状态 - [docs/compatibility-regeneration.md](docs/compatibility-regeneration.md):安全的兼容性 fixture 重生成 - [docs/release-notes/v0.1.0.md](docs/release-notes/v0.1.0.md):发布说明 - [CHANGELOG.md](CHANGELOG.md):更新日志
标签:AI代理安全, IP 地址批量处理, LNA, Python, RDFlib, 云安全监控, 代码审查, 文档安全, 无后门, 本地优先, 请求拦截, 逆向工具, 配置审计, 静态分析