mcpField
G
gh-issues

gh-issues

github.com/openclaw开发393.3k5.0k 次安装今天更新
代码仓库

关于 gh-issues

gh-issues 是用于自动处理 GitHub Issue 修复和 PR 审查跟进的技能。它通过 gh 命令行筛选 Issue、协调工作进程,并跟踪 PR 创建或审查更新结果。

主要功能

  1. 01按标签、里程碑、负责人和状态筛选 Issue
  2. 02跳过已有相关工作或有效认领的 Issue
  3. 03通过后台工作进程执行 Issue 修复
  4. 04处理工作流 PR 中可操作的评论
  5. 05按间隔监视 Issue 和审查

适用场景

  1. 01筛选待修复的开放 Issue
  2. 02将 Issue 修复工作转为 PR
  3. 03处理 fix/issue PR 的审查意见
  4. 04定期监视 Issue 和审查

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/openclaw/openclaw --skill gh-issues

安装后在 Claude Code 中输入/gh-issues确认已加载。

详细介绍

gh-issues

用于 Issue 到 PR 的自动化。优先使用 gh 命令行;仅当高层命令缺少所需字段时,才回退到 gh api。

参数

  • 位置参数 owner/repo:可选;否则根据 git remote get-url origin 推断。
  • --label <label>:筛选。
  • --limit <n>:默认为 10。
  • --milestone <title>:筛选。
  • --assignee <login|@me>:筛选。
  • --state open|closed|all:默认为 open。
  • --fork <owner/repo>:将分支推送到派生仓库,并向源仓库创建 PR。
  • --watch:轮询 Issue 和审查。
  • --interval <minutes>:默认为 5。
  • --dry-run:仅列出。
  • --yes:无需确认。
  • --reviews-only:跳过 Issue 修复;处理 PR 审查。
  • --cron:启动后退出;隐含 --yes。
  • --model <id>:如果支持,则传递给工作进程。
  • --notify-channel <id>:可选的最终通知目标。

阶段 1:解析仓库

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:如果设置了派生仓库,则为派生仓库;否则为源仓库。
  • BASE_BRANCH:源仓库的默认分支,除非用户另有说明。
  • PUSH_REMOTE:在派生仓库模式下为 fork,否则为 origin。

除非用户确认工作进程应忽略未提交的更改,否则遇到脏工作区时停止。

在派生仓库模式下,确认之前或执行 --dry-run 时,不得修改远程仓库配置。

仅验证认证和读取权限:

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

阶段 2:获取 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。

如果未找到任何项:报告无匹配项。如果指定 --dry-run:显示精简列表并停止。

阶段 3:避免重复工作

对于每个候选项:

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、已有分支或有效本地占用记录的候选项。

占用文件:

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

使超过 2 小时的占用记录过期。 写入前创建父目录。

阶段 4:确认

除非指定 --yes 或 --cron,否则要求用户选择:

  • all
  • 以逗号分隔的 Issue 编号
  • cancel

确认后,在派生仓库模式下,将工作交给 Agent 前配置推送远程仓库:

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

阶段 5:启动工作进程

最多启动 8 个后台工作进程。指定 --cron 时,不要等待每个工作进程。

每次启动前,使用当前 ISO 时间戳为 SOURCE_REPO#<n> 写入占用记录。工作进程报告 PR 或失败后,删除或更新该占用记录。这样可以防止在分支或 PR 尚不存在时,监视模式与 cron 运行重叠。

工作进程提示词必须包含:

  • Issue URL、标题、正文和标签。
  • SOURCE_REPO、PUSH_REPO、BASE_BRANCH、PUSH_REMOTE、派生仓库模式。
  • 目标分支 fix/issue-<n>。
  • 所需证据和 PR 正文。
  • 通知路由。

工作进程指令:

Use gh and git. Do not handwave.
Checkout/create fix/issue-<n> from BASE_BRANCH.
Implement minimal fix.
Run relevant tests.
Commit with conventional message.
Push to PUSH_REMOTE.
Open PR against SOURCE_REPO BASE_BRANCH.
PR body: What Problem This Solves + Why This Change Was Made + User Impact + Evidence + visible Fixes SOURCE_REPO#<n>.
Report PR URL or failure reason.
Send completion/failure with openclaw message send if route provided.

如果可用,使用 coding-agent 的启动规则。

阶段 6:收集

使用 process 或任务注册表轮询工作进程。报告:

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

仅向通知通道发送最终精简摘要。

仅处理审查 / 监视审查

查找开放的 PR:

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

获取审查线程和评论:

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 对可处理的评论进行分组。忽略赞扬、状态、重复项和已处理的评论。按照相同的后台规则,为每个选定或限定范围内的 PR 启动一个工作进程。

审查工作进程指令:

Checkout PR branch.
Read all actionable review comments.
Patch minimal changes.
Run relevant tests.
Commit and push normally; do not force-push unless explicitly told.
Reply to addressed comments with fix + commit/file reference.
Report comments addressed/skipped and proof.

监视模式

循环:

  1. 获取 Issue。
  2. 启动符合条件的 Issue 工作进程。
  3. 处理待处理的 PR 审查意见。
  4. 按 --interval 休眠。
  5. 用户要求停止时结束。

保持累计摘要精简。

评论

支持 Markdown