gh-issues

gh-issues

热门

拉取 GitHub Issue,筛选候选任务,后台派发 Agent 修复并提交 PR,支持按需自动处理 PR Review 意见。

38万Star
8.1万Fork
更新于 2026/8/3
SKILL.md
只读
名称
gh-issues
描述

拉取 GitHub Issue,筛选候选任务,后台派发 Agent 修复并提交 PR,支持按需自动处理 PR Review 意见。

gh-issues

用于 Issue 到 PR 的自动化流程。优先使用 gh CLI;仅当高阶命令缺少所需字段时,再降级使用 gh api

参数说明

  • 位置参数 owner/repo:可选;未指定时自动通过 git remote get-url origin 推导。
  • --label <label>:按 Label 过滤。
  • --limit <n>:拉取限制数量,默认 10。
  • --milestone <title>:按 Milestone 过滤。
  • --assignee <login|@me>:按负责人过滤。
  • --state open|closed|all:状态过滤,默认 open。
  • --fork <owner/repo>:推送分支到 fork 仓库,向原仓库提交 PR。
  • --watch:持续轮询 Issue 及 Review 状态。
  • --interval <minutes>:轮询间隔(分钟),默认 5。
  • --dry-run:仅列表预览,不实际执行。
  • --yes:跳过二次确认。
  • --reviews-only:跳过 Issue 修复,仅处理 PR Review 意见。
  • --cron:派发后台任务后直接退出;隐式启用 --yes
  • --model <id>:透传指定模型给 Worker(若支持)。
  • --notify-channel <id>:可选的最终通知渠道。

阶段一:解析目标仓库

git remote get-url origin
if [ -z "${GH_TOKEN:-}" ]; then
  CONFIG_PATH="${OPENCLAW_CONFIG_PATH:-${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/openclaw.json}"
  GH_TOKEN=$(jq -r '.skills.entries["gh-issues"].apiKey // empty' "$CONFIG_PATH" 2>/dev/null || true)
  if [ -n "$GH_TOKEN" ]; then export GH_TOKEN; fi
fi
gh auth status
gh repo view OWNER/REPO --json nameWithOwner,defaultBranchRef

如果 gh auth status 执行失败且未配置 GH_TOKEN,立即中止并引导用户完成 GitHub 认证/配置。

派生变量:

  • SOURCE_REPO:Issue 所在的原仓库。
  • PUSH_REPO:已设置 fork 时为 fork 仓库,否则为原仓库。
  • BASE_BRANCH:原仓库的主分支(除非用户特别指定)。
  • PUSH_REMOTE:fork 模式下为 fork,否则为 origin

如果当前工作区存在未提交代码(dirty),暂停执行,除非用户确认允许 Worker 忽略未提交变更。

在 fork 模式下,未获用户确认或开启 --dry-run 时,严禁修改任何 git remote。

仅验证鉴权与只读权限:

gh auth token >/dev/null || test -n "${GH_TOKEN:-}"
gh repo view "$PUSH_REPO" --json nameWithOwner
git ls-remote --exit-code origin HEAD

阶段二:获取 Issue

构造过滤条件并拉取 Issue:

gh issue list --repo "$SOURCE_REPO" --state open --limit 10 --json number,title,labels,url,body,assignees,milestone

根据传入参数追加 --label--milestone--assignee--state--limit 等参数。gh issue list 默认已过滤掉 PR。

若未命中任何 Issue:提示无匹配项。若开启 --dry-run:以紧凑列表形式展示后直接结束。

阶段三:避免重复派发

对每个候选 Issue 进行检查:

gh pr list --repo "$SOURCE_REPO" --search "$SOURCE_REPO#<n>" --state open --json number,url,title,headRefName
gh pr list --repo "$SOURCE_REPO" --head "fix/issue-<n>" --state open --json number,url
gh api "repos/$PUSH_REPO/branches/fix/issue-<n>" >/dev/null

若已存在开启状态的 PR、同名分支或本地占位锁(Claim),则直接跳过该 Issue。

占位锁文件路径:

${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/gh-issues-<owner>-<repo>.json

自动清理超过 2 小时的过期占位锁。
写入文件前须先创建其父级目录。

阶段四:人工确认

除非指定了 --yes--cron,否则须提示用户进行选择:

  • all(全部处理)
  • 逗号分隔的 Issue 编号列表
  • cancel(取消操作)

确认后,在 fork 模式下交付给 Agent 前,先配置好 push remote:

gh auth setup-git
git remote get-url fork || git remote add fork "https://github.com/$PUSH_REPO.git"
git remote set-url fork "https://github.com/$PUSH_REPO.git"
git ls-remote --exit-code fork HEAD

阶段五:派发后台 Worker

最多同时启动 8 个后台 Worker。启用 --cron 时切勿阻塞等待单个 Worker 结束。

启动 Worker 前,为 SOURCE_REPO#<n> 写入带当前 ISO 时间戳的占位锁。Worker 上报 PR 或失败结果后,清理或更新该锁。这可防止在分支或 PR 建立前,watch/cron 重复触发。

Worker 提示词必须包含以下内容:

  • Issue 的 URL、标题、正文及标签(Labels)。
  • SOURCE_REPOPUSH_REPOBASE_BRANCHPUSH_REMOTE 及 fork 模式标记。
  • 目标分支 fix/issue-<n>
  • 要求的验证凭据(Proof)及 PR Body 格式。
  • 消息通知路由路径。

Worker 指令要求:

严格使用 gh 与 git,切勿含糊蒙混或偷懒。
从 BASE_BRANCH 基于规范拉出/创建 fix/issue-<n> 分支。
实现最小化修复代码。
运行相关测试集。
按 Conventional Commits 规范提交代码。
推送至 PUSH_REMOTE。
向 SOURCE_REPO 的 BASE_BRANCH 提交 PR。
PR Body 须包含:解决的问题 + 修改原因 + 用户影响 + 验证凭据 + 显式关联 Fixes SOURCE_REPO#<n>。
上报 PR URL 或失败原因。
若配置了通知路由,通过 openclaw message send 发送完成/失败通知。

存在可用规则时优先使用 coding-agent 启动规则。

阶段六:汇总结果

通过 process 或 Task Registry 轮询各 Worker 状态。最终输出汇报:

  • Issue 编号与标题。
  • 状态:PR 已创建、已跳过、执行失败、执行超时。
  • PR URL 或失败具体原因。

仅发送最终的紧凑汇总报告至 notification channel。

仅处理 Review 意见 / 监听 Review

检索当前开启的 PR:

gh pr list --repo "$SOURCE_REPO" --state open --json number,title,url,headRefName,reviewDecision \
  --jq '[.[] | select(.headRefName | startswith("fix/issue-"))]'

拉取 Review Thread 与评论细节:

gh pr view <n> --repo "$SOURCE_REPO" --json url,headRefName,comments,reviews
gh api "repos/$SOURCE_REPO/pulls/<n>/comments"
gh api "repos/$SOURCE_REPO/issues/<n>/comments"

除非用户显式指定了 PR 编号,否则默认仅处理由该工作流创建的 fix/issue-* PR。按 PR 分组可执行的 Review 意见。自动过滤夸奖鼓励、纯状态通知、重复项及已解决的评论。针对筛选出的 PR,按同样的后台逻辑为每个 PR 派发一个 Worker。

Review Worker 指令要求:

检出 PR 对应分支。
读取所有可操作的 Review 意见。
进行最小化增量修复。
运行相关测试集。
正常提交并推送;除非明确指示,否则禁止强推(force-push)。
回复已修复的评论,附带修改内容及对应 Commit/文件引用。
上报已处理/已跳过的评论明细及验证凭据。

监听模式 (Watch mode)

循环流程:

  1. 拉取 Issue。
  2. 派发符合条件的 Issue 修复 Worker。
  3. 处理需跟进的 PR Review 意见。
  4. 休眠 --interval 指定的时长。
  5. 收到用户终止指令后停止。

保持累计汇总信息精简。