ThreeMoonsLab/agents-shipgate
GitHub: ThreeMoonsLab/agents-shipgate
Shipgate代理:AI代理能力更改的确定性合并门审查工具。
Stars: 3 | Forks: 1
## 为什么存在
一旦一个AI代理能够退款、发邮件、取消、部署或修改记录,每个工具更改都变成一个发布事件。代码审查捕获代码;评估套件捕获行为;可观察性捕获运行时。它们都没有回答发布问题:*给定这个PR中声明的工具表面,我们是否对每个操作都有明确的批准策略、范围覆盖、幂等证据和审查准备?*
Shipgate代理生成一个在提升之前对该问题的确定性答案。
当前产品的承诺是故意狭窄的:一个确定性、本地优先、静态合并门,用于AI生成代理能力更改——在PR时间运行的工具使用就绪审查。更广泛的生命周期想法是未来路线图的工作,而不是这个扫描器今天所声称的。
## 发现画廊
捆绑的支持退款组件演示了Shipgate代理旨在揭示的发布风险:
```
## 发布决策
Decision: blocked
Reason: 2 active findings block release.
Blockers: 2
Review items: 16
Fail policy: would_fail_ci=false (exit 0)
Top findings:
1. stripe.create_refund lacks a declared approval policy
2. stripe.create_refund lacks idempotency evidence
3. Manifest declares broad permission scopes
```
- `stripe.create_refund` 缺少声明的批准策略,因此财务操作可能会在没有明确的人类审查门的情况下发货。
- `stripe.create_refund.amount` 缺少最大界限,削弱了爆炸半径控制。
- `stripe.create_refund` 在重试行为已知的情况下缺少幂等证据,存在重复退款的风险。
- `wildcard_mcp_tools.*` 暴露了一个通配符工具表面,使得审查不完整。
- `gmail.send_customer_email` 在没有匹配的确认策略的情况下与禁止的外部通信操作重叠。
## 看它阻止PR
理解审查者需要了解的变化最快的方法:通过一个黄金PR进行操作。每个黄金PR都发送一个样本清单、生成的报告、发布决策和代理应发布的推荐PR评论摘要。
- [openai-agents-sdk-refund-agent](examples/golden-prs/openai-agents-sdk-refund-agent/README.md) — 退款代理添加 `stripe.create_refund`。Shipgate决定 `blocked`,因为缺少批准策略和幂等证据。包括推荐的Markdown PR评论模板。
- [golden-pr-from-coding-agent.md](examples/golden-prs/golden-pr-from-coding-agent.md) — 编码代理在运行验证首先流程后应生成的 *工件*:PR评论、`merge_verdict`、`capability_review` 和人类/编码代理的下一步行动。
- [mcp-only-tool-server](examples/golden-prs/mcp-only-tool-server/README.md) — 没有Python框架导入的MCP服务器;演示了仅MCP的采用路径。
- [openapi-support-agent](examples/golden-prs/openapi-support-agent/README.md) — OpenAPI描述的工具表面;显示范围覆盖发现。
## 为什么不直接...
| 替代方案 | Shipgate代理覆盖的差距 |
| --- | --- |
| 单元测试 | 测试通常验证代码路径,而不是发布的工具表面和声明的策略。 |
| 代码审查 | 审查者错过了生成的规范、MCP导出、广泛的范围和缺少的批准策略。 |
| 运行时跟踪 | 有用,但它们在行为存在之后到达。Agents Shipgate在提升之前运行。 |
| 什么都没有 | 工具表面漂移成为生产惊喜。 |
有关与特定评估者和平台的命名比较,请参阅营销网站与页面:
[vs evals](https://threemoonslab.com/vs/evals/),
[vs promptfoo](https://threemoonslab.com/vs/promptfoo/),
[vs Braintrust](https://threemoonslab.com/vs/braintrust/),
[vs LangSmith](https://threemoonslab.com/vs/langsmith/), 和
[vs 可观察性平台](https://threemoonslab.com/vs/observability/).
## CI行为
CI默认为咨询:
```
agents-shipgate scan --config shipgate.yaml --ci-mode advisory
```
严格模式仅在存在未抑制的关键发现时退出代码 `20`。
配置、输入解析和内部工具错误分别使用 `2`、`3` 和 `4`:
```
agents-shipgate scan --config shipgate.yaml --ci-mode strict
```
对于现有项目,将当前审查的发现保存为本地基线,并且仅在出现新的未抑制发现时才失败严格CI:
```
agents-shipgate baseline save --config shipgate.yaml --out .agents-shipgate/baseline.json
agents-shipgate scan --config shipgate.yaml --baseline .agents-shipgate/baseline.json --ci-mode strict
```
团队可以覆盖严重性和CI失败阈值:
```
checks:
severity_overrides:
SHIP-AUTH-MISSING-SCOPE: critical
ci:
fail_on:
- critical
- high
```
## Google ADK
Agents Shipgate支持静态Google ADK提取Python入口点和代理配置YAML。适配器检测 `LlmAgent`/`Agent` 定义、函数工具、`OpenAPIToolset`、`McpToolset`、回调、插件、子代理、评估引用和显式本地工具库存,而无需导入ADK代码。
```
version: "0.1"
project:
name: adk-support-agent
agent:
name: support-agent
declared_purpose:
- handle support cases
environment:
target: production_like
tool_sources:
- id: adk
type: google_adk
path: agent.py
google_adk:
eval_sets:
- evals/support.eval.json
tool_inventories:
- inventories/adk-mcp-tools.json
```
动态ADK工具集会产生警告或发现,除非您提供显式的MCP、OpenAPI或本地工具库存输入。
## LangChain 和 CrewAI
Agents Shipgate包括LangChain/LangGraph和CrewAI的静态Python提取。适配器仅解析Python AST;它们不导入框架包或用户模块。支持的LangChain/LangGraph模式针对LangChain Core 0.3+、LangChain 1.x `create_agent` 和 LangGraph 0.2+源形状。
```
tool_sources:
- id: langchain_agent
type: langchain
path: agent.py
- id: crewai_agent
type: crewai
path: crew.py
```
对于动态或预构建的工具表面,提供显式的本地库存文件:
```
langchain:
tool_inventories:
- inventories/langchain-tools.json
crewai:
tool_inventories:
- inventories/crewai-tools.json
```
## 策略包
v0.4添加了本地声明式YAML策略包,用于组织特定的发布规则。策略包是静态数据,运行时无需导入代码。
```
checks:
policy_packs:
- path: policies/org-release.yaml
```
```
agents-shipgate scan --config shipgate.yaml --policy-pack policies/org-release.yaml
```
## 它是为谁准备的
| 买家 | 痛点 | 投资回报 | 下一步 |
| --- | --- | --- | --- |
| 平台工程师发布第一个生产代理 | "我不知道我不知道什么。" | 审查清单和工具模式以发现代码审查遗漏的发布风险。 | 运行 `agents-shipgate init --workspace . --write`。 |
| 安全或GRC审查员 | "代理绕过了现有的控制。" | 创建一个静态工具表面审计跟踪以供审查。 | 审查 [检查目录](docs/checks.md)。 |
| 有发布截止日期的AI PM | "安全审查阻碍了我们。" | 在正式批准之前为团队提供自助预审查。 | 扫描 [支持退款组件](samples/support_refund_agent/shipgate.yaml)。 |
## 局限性
Agents Shipgate是一个静态、清单优先的扫描器。它是故意狭窄的:
- 它默认不运行代理、调用工具、调用LLM或通过导入ADK代码来验证模型可用性(默认静态;请参阅 [信任模型](#trust-model) 和 [`ALLOWED_EXCEPTIONS`](tests/test_adapter_static_only.py))。
- 它不验证运行时行为、延迟、提示质量或路由决策。
- 它不取代动态安全测试或对底层系统的人类安全审查。
- 它仅检查 `shipgate.yaml` 中声明的、本地的OpenAPI规范、MCP导出、Anthropic/OpenAI API工件、可选SDK AST元数据、静态Google ADK/LangChain/CrewAI/n8n输入和静态Codex插件包元数据中声明的工具;未声明或无法静态发现的工具不进行扫描。
- 清单保持 `version: "0.1"`,因此现有配置仍然有效。当前报告携带 `report_schema_version: "0.23"`(在v0.22的验证周期块上添加,向 `capability_change` 成员添加语义元数据)同时保留报告模式文档中记录的稳定有效负载合同。
请参阅 [ROADMAP.md](ROADMAP.md) 了解计划中的内容。
## 信任模型
**Agents Shipgate默认不导入用户代码、运行代理、调用工具、调用LLM、连接到MCP服务器、进行网络调用或收集遥测数据。**
请参阅 [信任模型](docs/trust-model.md) 和 [安全策略](SECURITY.md) 了解默认的本地唯一保证和披露过程。
## GitHub Action
将此完整的咨询工作流程放入 `.github/workflows/agents-shipgate.yml`。它在每个PR上运行,发布摘要评论,上传报告和包作为工作流程工件,并且永远不会失败作业。这是在 `examples/github-actions/01-advisory-pr-comment.yml`(examples/github-actions/01-advisory-pr-comment.yml) 中发送的相同文件。
```
name: Agents Shipgate (advisory)
on:
pull_request:
permissions:
contents: read
pull-requests: write
jobs:
shipgate:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
with:
fetch-depth: 0
- uses: ThreeMoonsLab/agents-shipgate@v0.11.0
with:
ci_mode: advisory
diff_base: target
pr_comment: 'true'
shipgate_version: '0.11.0'
```
采用后,选择显式合并策略。`examples/github-actions/07-block-on-blocked-verdict.yml`(examples/github-actions/07-block-on-blocked-verdict.yml) 仅在 `merge_verdict == blocked` 时阻止;`examples/github-actions/08-require-mergeable.yml`(examples/github-actions/08-require-mergeable.yml) 需要 `can_merge_without_human == true`。请参阅 `examples/github-actions/`(examples/github-actions/) 了解严格/基线/SARIF/多配置/更改路径配方。
输入:`config`、`ci_mode` (`advisory` 或 `strict`)、`fail_on`、`baseline`、`baseline_mode`、`diff_from`、`diff_base`、`base_ref`、`head_ref`、`policy_packs`、`no_plugins`、`output_dir`、`upload_artifact`、`pr_comment`、`github_token`、`shipgate_version`。将 `diff_base: target` 设置为PR基/头差异丰富。操作委托给 `agents-shipgate verify` 并永不获取;在检出时使用 `fetch-depth: 0`,或在早期步骤中获取基线引用。如果设置了 `head_ref`,则验证扫描该引用的隔离存档;否则,它扫描检出的工作区。如果无法检查显式基线引用或PR差异,则验证跳过仅头扫描,将 `merge_verdict: "unknown"` 写入 `verifier.json` 并退出2。
输出:`decision`、`merge_verdict`、`can_merge_without_human`、`blocker_count`、`review_item_count`、`ci_would_fail`、`diff_enabled`、`status`、`critical_count`、`high_count`、`medium_count`、`baseline_new_count`、`baseline_matched_count`、`baseline_resolved_count`、`adk_agent_count`、`adk_dynamic_toolset_count`、`trust_root_touched`、`policy_weakened`、`capability_changes_added`、`capability_changes_modified`、`capability_changes_removed`、`report_json`、`report_markdown`、`report_sarif`、`verifier_json`、`pr_comment_markdown`、`exit_code`。使用 `decision` / `ci_would_fail` 进行CI门控,使用 `merge_verdict` / `can_merge_without_human` 进行PR控制器路由,并避免使用 `status` 进行新门控。
将 `shipgate_version` 设置为安装固定的PyPI发布版本,而不是操作源,当您的流程需要包/版本对齐时。
对于设计合作伙伴审查,导出小型红acted验证器反馈工件,而不是发送原始报告证据:
```
agents-shipgate feedback export \
--from agents-shipgate-reports/verifier.json \
--redact \
--out shipgate-feedback.json
```
## 定价和开源立场
Agents Shipgate现在是,并将继续是免费的开源软件,供个人和在自己的基础设施上运行它的团队使用。核心清单优先扫描器、内置检查、Markdown报告和JSON报告旨在保持开源。我们不收集遥测数据,也不需要账户。
如果托管仪表板、SSO、组织范围内的基线、批准工作流程或基于跟踪的证据出现,它们应该存在于一个单独的可选产品中,而不是将核心开源功能移至付费墙后面。
发布类似工具使用的代理的团队可以申请 [Three Moons Lab设计合作伙伴计划](https://threemoonslab.com/design-partners/)
— 营销页面与存储库中的 `docs/design-partners.md`(docs/design-partners.md) 相对应,并包括一个
预填充的电子邮件CTA,用于审查标准和联系。当前的试点运行手册是 `docs/design-partner-verifier-pilot.md`(docs/design-partner-verifier-pilot.md)
:带来一个AI生成的代理PR,运行验证器循环,并导出红acted
反馈。
## 文档
在 [threemoonslab.com](https://threemoonslab.com/) 的营销网站以人类可读、搜索优化的形式承载了相同的标准概念:
[快速入门](https://threemoonslab.com/quickstart/),
[检查目录](https://threemoonslab.com/checks/),
[术语表](https://threemoonslab.com/glossary/),
[博客](https://threemoonslab.com/blog/), 和
[设计合作伙伴](https://threemoonslab.com/design-partners/)。存储库中的文档
以下是标准合同;营销页面是为首次读者和AI搜索摄取而设计的。
- [工具使用就绪发布门类别](docs/category.md)
- [清单 v0.1](docs/manifest-v0.1.md)
- [检查目录](docs/checks.md)
- [策略包](docs/policy-packs.md)
- [基线工作流程](docs/baseline.md)
- [JSON报告模式 v0.23](docs/report-schema.v0.23.json)
- [反馈导出模式 v0.1](docs/feedback-schema.v0.1.json)
- [隐私和编辑](docs/privacy.md)
- [条款](docs/terms.md)
- [信任模型](docs/trust-model.md)
- [AI搜索摘要](docs/ai-search-summary.md)
- [设计合作伙伴](docs/design-partners.md)
- [设计合作伙伴验证器试点](docs/design-partner-verifier-pilot.md)
- [运行时库存设计说明](docs/runtime-inventory.md)
- [故障排除](docs/troubleshooting.md)
- [集成配方](docs/integrations.md)
- [分发计划](docs/distribution.md)
- [JSON报告模式 v0.2](docs/report-schema.v0.2.json)
- [JSON报告模式 v0.1](docs/report-schema.v0.1.json)
标签:AI, API 开发, GitHub Action, SDK 开发, 二进制发布, 人工智能, 代码安全, 代码审查流程, 安全策略, 工具使用准备度, 开源工具, 开源框架, 持续集成, 提示词设计, 日志审计, 权限控制, 漏洞枚举, 用户模式Hook绕过, 自动化代码审查, 软件发布流程, 软件生命周期管理, 逆向工具, 重复操作检测, 金融安全, 风险检测