github Skill 让 OpenClaw 通过 GitHub CLI(gh)读取仓库信息。第一次可以只做一件事:把某个 PR 的状态、审核结论和检查结果整理成一份简报,确定下一步该等待、补审核,还是继续看失败日志。你需要一个准确的 PR 链接,以及能访问该仓库的 GitHub 账号。
先确认 Skill,再准备 gh
在运行 OpenClaw 的机器上打开终端:
openclaw skills info github
openclaw skills check
如果已有内置 github Skill,直接使用它,不必再装同名副本。当前内置版声明了 gh 依赖;ClawHub 的 @steipete/github 上架版是 1.0.0,内容较短,未声明这个依赖,所以“已找到 Skill”仍不代表 CLI 已安装、账号已登录。
只有该 Skill 确实不存在、且你希望使用这份 ClawHub 上架版时,按当前 OpenClaw 的入口安装:
openclaw skills install @steipete/github --version 1.0.0
随后再次检查 Skill。多 Agent 配置应对目标 Agent 使用 openclaw skills info github --agent YOUR_AGENT_ID 和 openclaw skills check --agent YOUR_AGENT_ID,把占位符换成真实 ID;查错工作区会让“存在”与实际聊天中可用的 Skill 不一致。如果也需要为这个 Agent 安装上架版,安装时同样指定目标:
openclaw skills install @steipete/github --version 1.0.0 --agent YOUR_AGENT_ID
gh 是单独的工具。macOS 已有 Homebrew 时,在 Agent 实际执行命令的机器 安装:
brew install gh
gh --version
gh auth status --hostname github.com
已有可用登录就不必重新授权。尚未登录时,在终端运行下面的命令,按提示在浏览器完成 GitHub 授权,然后重新检查状态:
gh auth login --hostname github.com --web
只读是接下来任务的操作范围,不是这次登录获得的权限范围;GitHub CLI 的登录凭据可能允许写操作。私有仓库和 Actions 日志还取决于账号及令牌的实际访问权限。
第一次在 OpenClaw 中输入
替换 PR 链接,在 OpenClaw 对话中 这样输入:
请使用 github Skill,给 https://github.com/OWNER/REPO/pull/NUMBER
做一份只读状态简报。
先确认仓库、PR 标题、状态、是否为草稿、当前 head SHA 和审核结论。
列出该 PR 的全部检查:通过、失败、等待、跳过、取消分别标明,保留详情链接。
如果有失败的 GitHub Actions 检查,先给出对应 run/job 和关键错误;
日志读取失败就说明缺口,不猜原因。
最后列出下一步:需要等待什么、谁需要审核、哪些失败值得继续调查。
这次不要发评论、改代码、重跑工作流、审批或合并 PR。
不需要先 clone 仓库。给出完整 PR URL 后,读取远端状态不依赖终端当前所在的 Git 目录;后面要修代码时,再切换到有仓库检出的工作流。
对照原始结果,判断简报是否完整
下面是可在终端独立读取同一个 PR 的两条命令。先把 PR_URL 改成真实链接,再运行后两行:
PR_URL="https://github.com/OWNER/REPO/pull/NUMBER"
gh pr view "$PR_URL" --json number,title,state,isDraft,reviewDecision,headRefOid,url
gh pr checks "$PR_URL" --json name,bucket,state,link
检查四件事:
- 对象正确。 仓库、PR 编号和标题匹配;
state区分开放、关闭和已合并,isDraft单独表示草稿。 - 审核与 CI 分开。
reviewDecision不能用检查全绿代替;为空时保留“未给出审核结论”,不要补成已批准。 - 检查没有漏项。
bucket将检查归为pass、fail、pending、skipping、cancel。等待、跳过和取消应分别写出。没有检查记录不等于全部通过。 - 结论仍对应当前 PR。 保存读取时的
headRefOid与详情链接。有人推送新提交后,重新读取状态,不继续拿旧简报判断新代码。
gh pr checks 的退出码 8 表示检查仍在等待;不能把它解释成工具没有工作。想只看仓库要求的检查时可加 --required,但那是过滤后的结果,不应写成“全部检查”。
有失败时,再沿检查链接看日志
先打开失败项的 link。若它指向 GitHub Actions,从页面 URL 中找 /actions/runs/RUN_ID,并确认属于这个 PR 的检查。其他 CI 平台的链接应交给对应平台处理,不能套用 Actions 日志命令。
把 OWNER/REPO、RUN_ID 换成真实值,在终端读取该次运行:
gh run view RUN_ID --repo OWNER/REPO --json status,conclusion,event,headSha,url,jobs,attempt
读取 jobs 数组中失败项的 databaseId,将它作为 JOB_ID;这是 job 编号,不是 run 编号。再查询该 job:
gh run view RUN_ID --repo OWNER/REPO --job JOB_ID --log-failed
PR 编号、run ID 和 job ID 是三种不同的编号。不要拿仓库最新一次运行或同名分支的旧运行代替这个检查。pull_request 工作流默认可能检出合并分支,工作流里的 GITHUB_SHA 因此可以不同于 PR 源分支头;沿 PR 的检查链接核对运行、事件和提交上下文,比只筛一个 SHA 更可靠。
如果日志只有下游失败,继续找前面的第一个实质错误;如果 run 还未结束,结论保持等待。这一轮的产物是可追溯的状态和排查入口,不是已经完成的修复。需要改代码时,可转到 gh-fix-ci 使用指南。
三个容易卡住的地方
终端能用,OpenClaw 却说没登录。 让 Agent 在自己的执行环境运行 gh --version 和 gh auth status --hostname github.com。Gateway 可能运行在另一台机器、容器或另一个用户下;它的 PATH 和配置目录不一定与桌面终端一致。GH_CONFIG_DIR 控制配置位置,进程中的 GH_TOKEN / GITHUB_TOKEN 会优先于已保存的凭据。检查实际服务环境,别把令牌粘贴到对话里,也不需要使用 --show-token。
看不到私有 PR 或日志。 先核对账号、仓库 URL 和访问权限,再看组织的授权要求;“找不到”或“读取失败”不能当成 PR 已关闭、CI 已通过。细粒度令牌读取 job 日志需要目标仓库的 Actions 读取权限,令牌能访问某个公开仓库也不能证明它可读这个私有仓库。
日志为空或大文件下载失败。 先确认 job 已结束且 ID 正确;当前 gh run view 文档也说明了日志关联、缺失 job 与 UNKNOWN STEP 的限制。旧问题 #11059 中,ptorgalmath-gpsw 在 gh 2.74.0 下报告了大型 run 日志压缩包下载失败;维护者建议改读单个 job 的日志,作者随后反馈此路径可用。它提供一种排查分支,不代表所有当前版本都会发生同样的问题。[13]
已确认 job 后,可使用官方的单 job 日志接口:
gh api repos/OWNER/REPO/actions/jobs/JOB_ID/logs
这返回整个 job 的原始文本,不等同于 --log-failed 的失败步骤筛选。仍无法读取时,保留该检查链接、具体错误与待查项,让简报明确停在哪里。