AutoGPT open-pr Skill 全解析:从预检、模板化 PR 到评审闭环的自动化提交流程
本篇基于 AutoGPT 仓库中的 open-pr Skill 定义 展开,完整还原该 Skill 的六步工作流(预检、测试覆盖、模板化创建 PR、评审触发、反馈处理、收尾),并结合仓库中的 PR 模板、配套 Skill(pr-test / pr-review / pr-address / pr-polish)与 贡献规范 的源码级证据,说明它如何约束 Agent 提交一个“不破坏现有行为、新行为有测试、评审可闭环”的 Pull Request。读完后你可以掌握:如何把一套 PR 流程沉淀为可复用的 Agent Skill,以及该流程中每个 gh 命令、模板规则与轮询机制的设计意图。
1. open-pr 是一个什么机制:Claude Agent Skill
open-pr 位于 .claude/skills/open-pr/SKILL.md,采用 YAML frontmatter + Markdown 正文的结构,是典型的 Claude Agent Skill 定义文件。其 frontmatter 声明了四个关键字段:
name: open-pr
description: Open a pull request with proper PR template, test coverage, and
review workflow. ... TRIGGER when user asks to "open a PR", "create a PR",
"make a PR", "submit a PR", ...
user-invocable: true
args: "[base-branch] — optional target branch (defaults to dev)."
description中除了功能描述,还明确列出了触发语("open a PR"、"push and create PR" 等任意变体),用于让 Agent 在用户表达“提 PR”意图时自动命中该 Skill;user-invocable: true表示用户可以以/open-pr形式直接调用;args声明了唯一可选参数[base-branch],即目标分支,默认指向dev——这与 AutoGPT 以dev为主开发分支的惯例一致。
该 Skill 的元数据为 author: autogpt-team、version: 1.0.0。它并非孤立存在,而是 .claude/skills/ 目录下一个 PR 技能族的核心入口,同族技能还包括:
| Skill | 文件 | 职责 |
|---|---|---|
/pr-test |
.claude/skills/pr-test/SKILL.md | 用 docker compose、agent-browser 与 API 调用做 E2E 手动测试 |
/pr-review |
.claude/skills/pr-review/SKILL.md | 按正确性、安全、代码质量、测试缺口做自评审 |
/pr-address |
.claude/skills/pr-address/SKILL.md | 处理评审意见,循环直到 CI 绿、评论清零 |
/pr-polish |
.claude/skills/pr-polish/SKILL.md | 交替执行 review + address,直到 PR 达到可合并状态 |
下文按 Skill 正文的六个 Step 依次展开。
2. Step 1:预检(Pre-flight checks)
在创建 PR 之前,open-pr 要求完成三件硬性事项:
- 所有变更已提交——不允许带着未提交的工作区状态创建 PR;
- 分支已推送到远端——使用
git push -u origin <branch>,-u保证建立上游跟踪,后续gh命令和 CI 才能正确定位 head 分支; - 对整个仓库运行 linter/formatter,并提交产生的修复——注意这里的强调是 “across the whole repo (not just changed files)”:只检查改动文件可能放过历史遗留的格式问题,而 CI 通常按仓库整体校验,提前修复可避免 PR 打开后首轮 CI 红屏。
这一步与 AGENTS.md 中 “Rely on the pre-commit checks for linting and formatting” 的约定互为补充:pre-commit 钩子负责增量拦截,open-pr 的全仓 lint 负责提交前的最终兜底。
3. Step 2:测试覆盖(Test coverage)——Skill 中标注 “This is critical” 的一步
open-pr 把测试覆盖拆成两个正交问题,二者缺一都不允许开 PR:
3.1 现有行为不能被破坏
- 先识别本次改动触碰了哪些模块/组件;
- 运行这些区域的既有测试套件;
- 如果有测试失败,必须先修复再开 PR——“do not open a PR with known regressions”。
3.2 新行为必须有测试覆盖
Skill 给出按改动类型对号入座的规则:
- 新增功能、端点或行为变更都需要对应测试;
- 新增了一个 block,就要为该 block 加测试;
- 改了 API 行为,就要新增或更新 API 测试;
- 改了前端行为,要验证没有破坏既有用户流。
对于 AutoGPT 这种 block/agent 架构的平台仓库,这条规则意味着 autogpt_platform/backend/blocks/ 下新增的每个 block 都自带测试义务。测试命令则遵循 AGENTS.md 的分层约定:
- 后端:
poetry run test(pytest,基于 docker 的 postgres + prisma); - 前端集成测试(默认手段,Vitest + RTL + MSW):
pnpm test:unit; - 前端 E2E(Playwright):
pnpm test或pnpm test-ui。
最后一条兜底规则值得注意:如果本地无法跑完整测试套件,必须在 test plan 中如实注明“跑了哪些、没跑哪些”。这一要求会直接落到 PR 模板的 Checklist 中(见第 4 节),把“部分验证”从隐瞒项变成显式披露项。
4. Step 3:用仓库模板创建 PR(Step 3 的模板规则 + 完整模板内容)
open-pr 明确要求:读取规范模板 .github/PULL_REQUEST_TEMPLATE.md,并逐字(verbatim)使用它作为 PR 正文。具体规则有五条:
- 用
cat .github/PULL_REQUEST_TEMPLATE.md读取模板; - 精确保留章节标题与格式,包括
### Why / What / How、### Changes 🏗️、### Checklist 📋; - 把 HTML 注释提示(
<!-- ... -->)替换为真实内容,不允许把注释留在最终正文里; - 不要预先勾选任何复选框——所有 checkbox 保持
- [ ],直到对应步骤真实完成; - 不得改动模板结构、不得重命名章节、不得删减 checklist 条目。
4.1 模板本身的结构
为方便直接对照填写,以下是该模板的完整结构(内容与 .github/PULL_REQUEST_TEMPLATE.md 一致):
### Why / What / How:三个 HTML 注释分别提示——Why(这个 PR 为什么存在,解决什么问题,缺了它会怎样)、What(高层概述改了什么)、How(实现方式、关键细节或架构决策)。### Changes 🏗️:以高于 diff 的粒度列出关键变更,但具体到“新/改了什么”。### Checklist 📋分为两组:- For code changes:变更已在描述中清晰列出;已制定 test plan;已按 test plan 完成测试(测试计划写在注释占位下,模板提供了一个示例计划,包含“从零创建并运行一个至少 3 个 block 的 agent”“从文件导入 agent 并确认可运行”“上传 agent 到 marketplace”“从 marketplace 导入并确认可运行”“从 monitor 编辑 agent 并确认可运行”等条目);
- For configuration changes:
.env.default已更新或兼容、docker-compose.yml已更新或兼容、配置变更清单已写入 Changes 段(模板示例列举了改端口、新增需互联的服务、密钥/环境变量变更、数据库等基础设施变更)。
4.2 PR 标题:conventional commit 格式
Skill 规定标题必须采用 conventional commit 形式,并给出三个示例:feat(backend): add new block、fix(frontend): resolve routing bug、dx(skills): update PR workflow,同时指向 AGENTS.md 获取完整 scope 列表。仓库规范中实际定义的是:
- Types:
feat/fix/refactor/ci/dx(developer experience); - Scopes:
platform、platform/library、platform/marketplace、backend、backend/executor、frontend、frontend/library、frontend/marketplace、blocks。
4.3 创建命令:用 --body-file 规避 shell 转义
Skill 给出的标准创建命令是:
BASE_BRANCH="${BASE_BRANCH:-dev}"
PR_BODY=$(mktemp)
cat > "$PR_BODY" << 'PREOF'
<filled-in template from .github/PULL_REQUEST_TEMPLATE.md>
PREOF
gh pr create --base "$BASE_BRANCH" --title "<type>(scope): short description" --body-file "$PR_BODY"
rm "$PR_BODY"
几个细节体现了工程化考虑:
BASE_BRANCH="${BASE_BRANCH:-dev}"实现了 frontmatter 中args声明的默认值语义:未提供[base-branch]时回落到dev;- 正文先写入临时文件再用
--body-file传入,目的是避免正文中的反引号、特殊字符被 shell 二次解释——PR 描述里常含代码块,直接内联--body "..."极易踩坑; - heredoc 使用带引号的分隔符(
'PREOF'),进一步保证内容原样落盘。
5. Step 4:评审工作流——按“能否本地测试”分两条路径
这是 open-pr 最核心的分支设计:Agent 所处的环境可能是一个能跑全栈的 workspace,也可能只是一个没有 docker 环境的 git worktree。Skill 据此给出两条路径。
5.1 路径 A:有可测试的 workspace(docker、运行中的 backend 等)
- 运行
/pr-test:使用 docker compose、agent-browser 和 API 调用对 PR 做 E2E 手动测试——这是评审前最彻底的验证方式; - 测试完成后运行
/pr-review:在请求人工评审前,先针对正确性、安全性、代码质量、测试缺口做一轮自评审。
/pr-test 的实际规格相当严格(见 pr-test Skill):每个状态变更操作都要记录 before/after 的 API 值、每个场景至少各一张前后截图、每个特性至少一个负向用例、截图必须推送到 test-screenshots/pr-{N} 临时分支并以内联图片形式贴回 PR 评论,最后还要基于“覆盖度、全部通过、负向测试、前后证据、无回归”等标准发出正式的 approve / request-changes 评审。
5.2 路径 B:没有可测试的 workspace(Agent 在 worktree 中很常见)
Skill 给出的五步操作规程:
- 先本地跑
/pr-review,在 push 前抓住明显问题; - 创建 PR 后评论
/review触发评审机器人; - 轮询而不是干等——每 30 秒用
gh api repos/<owner>/<repo>/pulls/{N}/reviews --paginate及 GraphQL inline threads 查询检查新评审。Skill 说明机器人通常在 30 分钟内响应,轮询让 Agent 在评审到达的瞬间就能反应; - 在评审返回之前禁止推进或合并;
- 处理机器人提出的问题——交由
/pr-address,它内置完整的“CI + 评论跟踪”轮询循环。
配套命令示例:
# 创建 PR 之后
PR_NUMBER=$(gh pr view --json number -q .number)
gh pr comment "$PR_NUMBER" --body "/review"
# 然后使用 /pr-address 轮询并在评审到达时处理
5.3 两条路径背后的评审检查项
/pr-review 自评审的检查维度(见 pr-review Skill)包括:描述质量(Why/What/How 是否齐备)、正确性(逻辑错误、off-by-one、竞态、异步缺失 await 等)、安全(边界输入校验、注入、密钥不落日志)、代码质量(按前后端 CLAUDE.md 规则)、架构(DRY、FastAPI 鉴权用 Security() 而非 Depends()、SSE 事件用 data: 等)、测试(同目录 *_test.py / __tests__/ 约定)。所有评审意见须以 🤖 加严重级徽章输出并以 inline 评论形式直接贴到 PR,严重级分四级:🔴 Blocker(合并前必须修)、🟠 Should Fix、🟡 Nice to Have、🔵 Nit。
6. Step 5:处理评审反馈——/pr-address 的闭环纪律
评审机器人或人工评审留下评论后,open-pr 的处理原则是:
- 运行
/pr-address,它会循环处理直到 CI 全绿且所有评论被解决; - 没有人工批准不得合并。
/pr-address(见 pr-address Skill)是该闭环中最厚重的部分,几条纪律值得单独强调:
- 唯一合法的处置序列是 fix → commit → push → reply → resolve。直接调用
resolveReviewThread而没有真实提交,是文档中反复警告的“最常见失败模式”——未解决计数降了,但代码什么都没变,产生虚假的“完成”信号。 - 分页陷阱:GraphQL 的
reviewThreads(first: 100)每页最多 100 条且按最旧优先返回;文档给出真实案例(142 个 thread 的第一页过滤后 0 条未解决,而第 2–3 页有 111 条),因此规则是必须翻到hasNextPage == false为止,绝不允许因为某页未解决数为 0 就提前停止。 - 轮询而非阻塞:每 30 秒检查一次 CI 状态(
gh pr checks {N} --json bucket,name,link)、mergeable 状态与三类评论来源;且明确禁用gh pr checks --watch,因为它会阻塞整个工具调用、无法在 CI 运行期间响应新评论。 - 退出条件:CI 全绿 + 评论清零 + CI 稳定后连续两轮(约 60 秒)无新评论,才允许结束循环。
- 另有 GitHub 三类速率限制(REST 403 abuse、REST 429、GraphQL 独立限额)的检测与 REST 降级方案,以及“按文件分组批量 commit”的并行处理策略。
7. Step 6:创建后的收尾动作
PR 创建并触发评审之后,open-pr 规定三个收尾动作:
- 把 PR URL 分享给用户;
- 若在等待评审机器人,告知用户预期等待时间(约 30 分钟);
- 没有人工批准不得合并——这条红线在 Step 5 与 Step 6 中被重复强调。
8. 仓库层面的配套约定与运行前提
open-pr 的可执行性依赖仓库中另外几处事实性约定,理解它们才能完整复现该流程:
- PR 模板是契约:.github/PULL_REQUEST_TEMPLATE.md 定义了 Why/What/How、Changes、Checklist 三段结构,
pr-review与pr-test均以“PR 描述是否覆盖 Why/What/How”作为评审/测试的起点——模板质量直接决定下游自动化质量。 - 提交规范:AGENTS.md 要求 conventional commit(
feat/fix/refactor/ci/dx+ 上述 scope)、提交前跑相应 linter 与测试、PR 中范围外变更占比控制在 20% 以内、改动data/*.py时需说明 user ID 校验、新增受保护前端路由时需同步更新frontend/lib/supabase/middleware.ts——这些都会以评审意见的形式回到/pr-address循环中。 - 格式化工具链:后端
poetry run format,前端pnpm format && pnpm lint && pnpm types(pr-address中明确“format 不过会是永不自愈的 CI failure”)。 - 权限面:.claude/settings.json 为 Agent 预置了
Read/Grep/Glob与白名单Bash命令(git status/diff/log/worktree等)的工具权限,open-pr 这类 Skill 在其上调用gh、git命令完成整个流程。 - 运行前提:该流程假设本机已安装并认证 GitHub CLI(
gh),有对 AutoGPT 仓库的 push 权限,目标分支默认dev;路径 B(无 workspace)下 Agent 无法做 E2E 验证,因此把验证责任前移到/review机器人与/pr-address轮询。
9. 小结:这套流程沉淀了什么经验
把 open-pr 与同族 Skill 合起来看,AutoGPT 仓库实际上把“一个人提 PR 的正确姿势”固化成了 Agent 可执行的状态机:
- 预检先行(全仓 lint + 推送)保证 PR 出生即干净;
- 测试双覆盖(不破坏旧行为 + 新行为有测试)把回归风险挡在创建前;
- 模板逐字复用 + 不预勾选 checkbox 保证 PR 描述的可评审性与真实性;
- 按环境分叉的评审路径(有 workspace 走
/pr-testE2E,无 workspace 走/review机器人 + 30 秒轮询)让同一流程适配本地全栈与纯 worktree 两种形态; - fix → commit → push → reply → resolve 的严格序列与“两轮干净轮询才退出”的收敛条件,消除“假性完成”;
- 合并权始终保留给人类,Agent 只负责把 PR 推到 merge-ready。
对想要在自己仓库中沉淀类似 Skill 的团队而言,.claude/skills/ 目录下的这五个 SKILL.md(open-pr、pr-test、pr-review、pr-address、pr-polish)加上 PR 模板 与 AGENTS.md 中的提交规范,构成了一套可直接参考的“PR 工作流即代码”范式。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0623
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00