拉取 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_REPO、PUSH_REPO、BASE_BRANCH、PUSH_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)
循环流程:
- 拉取 Issue。
- 派发符合条件的 Issue 修复 Worker。
- 处理需跟进的 PR Review 意见。
- 休眠
--interval指定的时长。 - 收到用户终止指令后停止。
保持累计汇总信息精简。






