首页
/ OpenClaw gitcrawl 技能实战:GitHub Issue/PR 本地归档检索、重复聚类与 gh 实时校验工作流

OpenClaw gitcrawl 技能实战:GitHub Issue/PR 本地归档检索、重复聚类与 gh 实时校验工作流

2026-09-05 23:45:03作者:段琳惟

本文基于 OpenClaw 仓库中的 gitcrawl 技能定义,讲解如何把 gitcrawl 这一本地 GitHub issue/PR 归档工具接入 Agent 的维护者分诊流程:先用 doctor 检查数据新鲜度,再用 threadsneighborssearchclusters 四组命令做候选发现与重复聚类,最后通过 gh shim 的缓存/实时双模式以及原生 gh 校验,在“评论、打标签、关闭、合并”等写操作前拿到实时证据。读完本文,你可以在 OpenClaw 这类大型开源仓库中,以极低 API 开销完成 issue/PR 溯源、去重判断与安全合并决策。

gitcrawl 技能在 OpenClaw 中的定位

OpenClaw 把可复用的 Agent 工作流沉淀为“技能”(skill),每个技能是一个独立目录,由 SKILL.md 描述用法,可选附带 Agent 元数据。gitcrawl 技能目录结构如下:

  • SKILL.md:技能主体,定义 gitcrawl CLI 的使用命令与决策规则;
  • agents/openai.yaml:面向 Agent 的展示元数据。

openai.yaml 可以看到该技能的定位与默认提示词:

interface:
  display_name: "Gitcrawl"
  short_description: "Search local OpenClaw issue and PR history before live GitHub triage"
  default_prompt: "Use $gitcrawl to inspect OpenClaw issue and PR history, find related threads and duplicate candidates, then verify actionable decisions with live GitHub."

这段元数据点出了技能的核心设计思想:先查本地归档(local issue and PR history),再走实时 GitHub(live GitHub triage)。OpenClaw 的 issue/PR 数量庞大,每一次分诊如果都直接打 GitHub API,既有速率限制风险,也会丢失“历史上已关闭、已去重、已落地修复”的上下文。gitcrawl 作为本地归档层,正是解决这两点:候选发现走缓存,动作决策走实时。

安装与前置条件

技能 SKILL.md 的 frontmatter 声明了运行前置:

metadata:
  openclaw:
    homepage: "见 openclaw 组织的 gitcrawl 仓库"
    requires:
      bins:
        - gitcrawl
    install:
      - kind: go
        module: github.com/openclaw/gitcrawl/cmd/gitcrawl@latest
        bins:
          - gitcrawl

要点:

  1. 运行前要求 PATH 中可找到 gitcrawl 二进制(requires.bins);
  2. 安装方式是标准的 Go 模块安装:go install github.com/openclaw/gitcrawl/cmd/gitcrawl@latest,安装后产出 gitcrawl 命令;
  3. gitcrawl 的源码不在本仓库内,属于 openclaw 组织的独立 Go 项目。本文所有命令与参数均以本仓库技能文档中的调用约定为准。

第一步:用 doctor 检查归档新鲜度

技能开篇就强调:使用本地 issue/PR 归档前,先检查其新鲜度(freshness):

gitcrawl doctor --json

--json 输出便于 Agent 程序化解析。这一步的意义在于:本地归档是“历史快照”,如果目标 issue/PR 是刚提交的、或本地数据明显滞后,基于过期数据做去重/关闭决策会出错。后文的 openclaw-pr-maintainer 技能 也给出了明确回退规则——当 gitcrawl 缺失、数据过期、缺少目标线程、或没有 embeddings(影响 neighbors/search 类命令)时,应回退到实时 GitHub 搜索工作流。

候选发现四命令:threads / neighbors / search / clusters

SKILL.md 给出了完整的候选发现命令族,全部针对 openclaw/openclaw 仓库:

gitcrawl threads openclaw/openclaw --numbers <issue-or-pr-number> --include-closed --json
gitcrawl neighbors openclaw/openclaw --number <issue-or-pr-number> --limit 12 --json
gitcrawl search issues "query" -R openclaw/openclaw --state open --json number,title,url
gitcrawl clusters openclaw/openclaw --sort size --min-size 5
gitcrawl cluster-detail openclaw/openclaw --id <cluster-id>

逐个拆解其用途与参数:

threads:按编号溯源完整线程

gitcrawl threads openclaw/openclaw --numbers <issue-or-pr-number> --include-closed --json

给定一个 issue 或 PR 编号,返回其关联线程;--include-closed 保证已关闭的历史线程也在结果中——这对判断“该问题是否早已修复并关闭”至关重要。--json 输出结构化结果供 Agent 消费。

neighbors:向量邻近检索

gitcrawl neighbors openclaw/openclaw --number <issue-or-pr-number> --limit 12 --json

neighbors 基于嵌入(embeddings)做语义邻近检索,找出与目标编号“语义上相近”的 issue/PR,是发现重复提交、相关讨论、已尝试修复的主要手段。--limit 12 控制候选数量。需要注意:该命令依赖本地 embeddings 数据,若归档中未生成 embeddings,此命令不可用(回退条件见前文)。

search:关键词/混合检索

gitcrawl search issues "query" -R openclaw/openclaw --state open --json number,title,url

在 issue 集合中执行查询:-R 指定仓库,--state open 只查开放状态,--json number,title,url 指定输出列,方便直接生成候选清单。

clusters / cluster-detail:重复聚类视图

gitcrawl clusters openclaw/openclaw --sort size --min-size 5
gitcrawl cluster-detail openclaw/openclaw --id <cluster-id>

clusters 列出重复簇,--sort size 按簇内成员数排序,--min-size 5 只保留规模不小于 5 的簇——这能快速定位“同一问题被反复提交”的重灾区。随后用 cluster-detail --id <cluster-id> 展开指定簇的成员明细。

补充:维护者技能的扩展只读路径

仓库中的 openclaw-pr-maintainer/SKILL.md 在 “Start issue and PR triage with gitcrawl” 一节给出了另一组常用只读命令,其中 searchcluster-detail 使用了更丰富的参数:

gitcrawl threads openclaw/openclaw --numbers <issue-or-pr-number> --include-closed --json
gitcrawl neighbors openclaw/openclaw --number <issue-or-pr-number> --limit 12 --json
gitcrawl search openclaw/openclaw --query "<scope or title keywords>" --mode hybrid --json
gitcrawl cluster-detail openclaw/openclaw --id <cluster-id> --member-limit 20 --body-chars 280 --json

对比可见两个细节:search 支持 --mode hybrid(混合检索模式,即关键词与语义结合的查询);cluster-detail 支持 --member-limit 20(簇成员展示上限)与 --body-chars 280(正文截断长度),用于在输出给 Agent 前控制上下文体积。

该技能同时还划定了一条成本红线:不要主动运行 gitcrawl sync --include-comments 这类昂贵的更新命令,除非用户明确要求更新本地库、或过期数据阻塞了当前决策。

gh shim:缓存优先,动笔前切实时

SKILL.md 为 PR 分诊定义了“gh shim”(gitcrawl gh 子命令)的双层读取策略:先走缓存,只有在做出变更/合并决策之前才切换到实时(live)

gitcrawl gh pr status <number-or-url> -R openclaw/openclaw --compact
gitcrawl gh pr view <number-or-url> -R openclaw/openclaw --json number,title,state,url,isDraft,headRef,headSha
gitcrawl gh --live pr status <number-or-url> -R openclaw/openclaw --compact
  • gitcrawl gh pr status ... --compact:从本地归档读取 PR 状态摘要,输出紧凑格式;
  • gitcrawl gh pr view ... --json <字段列表>:按 number,title,state,url,isDraft,headRef,headSha 等字段做结构化读取,isDraftheadRefheadSha 对判断“是否草稿、基于哪个分支、指向哪个提交”非常关键;
  • gitcrawl gh --live ...--live 标志强制绕过缓存直连 GitHub,用于最终决策点。

这一设计的逻辑是:分诊早期阶段(浏览、归类、找候选)允许使用缓存数据,因为速度优先;一旦进入“即将对外动作”阶段,状态必须来自实时源,否则可能基于过期的 CI 状态或已变更的 PR head 做错误判断。

写操作前的实时校验与证据门槛

技能文档明确规定:在评论、打标签、关闭、重开、合并或提交 PR review 之前,必须使用实时 gh 加当前 checkout 的证据(checkout proof)

gh pr view <number> --json number,title,state,mergedAt,body,files,comments,reviews,statusCheckRollup
gh issue view <number> --json number,title,state,body,comments,closedAt

两条命令分别覆盖 PR 与 issue 的关键实时字段:PR 侧的 mergedAtfilesreviewsstatusCheckRollup(CI 检查汇总)是合并决策的直接依据;issue 侧的 closedAtcomments 是判断“是否已被解决/已有后续讨论”的依据。

这一点在仓库的其他技能中得到了交叉印证。tag-duplicate-prs-issues/SKILL.md 明确划分了三种工具的职责边界:

工具 职责
gitcrawl 候选生成与历史上下文;所有候选在实时 GitHub 确认前都只是“线索”
gh / gh api 实时 GitHub 事实:目标状态、正文、评论、review、文件、open/closed/merged 状态
prtags 维护者策展层:保存去重分组与判断结论

它同时规定了回退到实时搜索的具体触发条件:目标/候选尚未出现在本地库中、本地数据对当前决策明显过期或不完整、gitcrawl 报错/超时/缺少 neighbors/search 所需数据——并要求在回退时记录回退事实与原因。这与 gitcrawl 技能自身的报告规范一致。

输出规范:报告什么、不做什么

SKILL.md 末尾给出两条硬性输出纪律:

  1. 报告内容要具体:绝对日期(而非“最近”“几天前”)、仓库名、issue/PR 编号、cluster id、数据缺口(source gaps)——即当本地归档缺少某部分数据时,必须明示;
  2. 禁止仅凭相似度做破坏性动作:“Do not close/label from similarity alone”——关闭或打标签必须同时满足两个条件:意图匹配(matching intent)+ 实时验证(live verification)

后者与 tag-duplicate-prs-issues/SKILL.md 的工作规则完全呼应:不能因为标题相似就判重,不能因为改了相同文件就判重;重复簇必须建立在“同一用户可见问题、同一意图、实质重叠的实现或调查上下文”之上。gitcrawl 的 neighbors 命中、search 命中、簇成员关系,都只算“候选生成”,本身不构成足够证据。

在 OpenClaw 维护者工作流中的协作位置

从仓库内多处交叉引用看,gitcrawl 技能是 OpenClaw 维护者分诊体系的“第一站”:

  • openclaw-pr-maintainer/SKILL.md 要求“任何检查 OpenClaw issue/PR 的场景都先用 $gitcrawl”,查本地数据中的相关线程、重复尝试和已落地修复;同时提醒:指派人(assignment)状态 gitcrawl 查不了,必须用实时 gh issue view / gh pr view
  • openclaw-repair-sweep/SKILL.md 在无人值守修复扫荡中,用 $gitcrawl 做队列发现、去重与历史 PR 检索,把实时 GitHub 变更操作交给 $openclaw-pr-maintainer
  • 该技能与 discrawlslacrawlgraincrawlnotcrawl 等同名族技能并列于 .agents/skills/ 目录,命名遵循“平台 + crawl”约定,即“为各协作平台建本地可检索归档”的同构设计,gitcrawl 对应 GitHub 侧。

实践小结:推荐的只读分诊顺序

综合 gitcrawl 技能本体与维护者技能的约束,一次标准的 issue/PR 分诊可以按以下顺序执行:

  1. gitcrawl doctor --json——确认本地归档可用且新鲜;若不可用,回退实时搜索并记录原因;
  2. gitcrawl threads ... --include-closed --json——拿到目标线程及其已关闭历史;
  3. gitcrawl neighbors ... --limit 12 --jsongitcrawl search ... --mode hybrid --json——生成重复/相关候选;
  4. gitcrawl clusters ... --sort size --min-size 5 + cluster-detail --id <cluster-id>——确认候选所在的重复簇;
  5. gitcrawl gh pr status/view(缓存)——快速读取 PR 结构信息;
  6. 决策前切换实时源:gitcrawl gh --live ... 或原生 gh pr view / gh issue view(含 statusCheckRollup 等完整字段);
  7. 输出报告时给出绝对日期、编号、cluster id 与数据缺口;关闭/打标签仅在“意图匹配 + 实时验证”双条件满足时执行,且避免主动触发 gitcrawl sync 等高成本更新命令。

这套“本地归档发现候选 → 实时源验证决策 → 严格报告缺口”的三层结构,使得 Agent 在大规模 issue/PR 洪流中既能控制 API 开销,又不会把语义相似误当作事实相同——这正是 gitcrawl 技能在 OpenClaw 维护流程中的核心价值。

登录后查看全文
热门项目推荐
相关项目推荐