关于 setup-github-labels
setup-github-labels 是供维护者统一 GitHub 标签体系并编写 Agent 文档的仓库配置技能。它以 labels.json 定义标签及重命名记录,并在应用前预览变更、要求确认。
主要功能
- 01基于清单定义标签
- 02涵盖问题分流与 PR 评定
- 03应用前预览标签变更
- 04重命名、创建和更新标签
- 05为 Agent 记录标签规则
适用场景
- 01为 GitHub 仓库配置标签
- 02统一多个仓库的标签
- 03更新标签名称并保留历史
- 04记录问题分流和 PR 评定约定
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ wkentaro/ agent-skills --skill setup-github-labels安装后在 Claude Code 中输入/setup-github-labels确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
labels.jsonRATIONALE.mdagents/openai.yamlevals/evals.json详细介绍
设置 GitHub 标签
将一套标签词汇应用到你在其中运行此操作的仓库,然后记录其含义,供 Agent 使用。此技能目录中的 labels.json 是唯一真实来源:其中包含每个标签的名称、颜色、描述、范围以及它重命名之前的名称。只有在更改标签集时,才阅读 RATIONALE.md。
这套标签分为四组。前缀表示标签适用的对象:
| 分组 | 标签 |
|---|---|
| Issue 类型 | type:bug、type:feature、type:task |
| Issue 分流状态 | needs-triage、needs-info、ready-for-agent、ready-for-human、wontfix |
| Agent PR 评审结论 | recommend-merge、recommend-close、recommend-triage、recommend-revise |
| 维护者 PR 评审结论 | maintainer-approved |
这些标签所表达的规则:
- 完成分流的 Issue 恰好带有一个
type:标签和一个分流状态标签。未带标签的 Issue 尚未分流;needs-triage表示正在评估。 - 非草稿 PR 如果没有评审结论,则由 Agent 负责完成处理。草稿标记表示“仍在构建中”状态;对此不设置标签。
- 对于每个 head,Agent 至多给出一个
recommend-*评审结论。recommend-revise会将 PR 交还给其作者;另外三个会将 PR 交给维护者。 - 评审结论只是建议。Agent 绝不会合并或关闭 PR。切勿将
recommend-merge重命名为ready-to-merge:合并机器人会监视这个字符串。 - 只有在维护者明确指示时才设置
maintainer-approved,并且它可以与recommend-*标签同时存在。 - 有新的推送时,任何评审结论都会过期。设置该结论的一方负责清除并重新设置它。
流程
1. 检测仓库
REPO=$(gh repo view --json nameWithOwner -q .nameWithOwner)
如果检测失败,请询问用户要操作哪个仓库。
2. 预览
将清单与仓库进行比较,并向用户展示将要执行的操作:
gh label list --repo "$REPO" --limit 200 --json name -q '.[].name' | sort > /tmp/have
jq -r '.[].name' labels.json | sort > /tmp/want
jq -r '.[] | select(.renamed_from) | .renamed_from' labels.json | sort > /tmp/old
comm -13 /tmp/have /tmp/want # will be created (or renamed into, if the old name is present)
comm -12 /tmp/have /tmp/want # will have color/description updated
comm -12 /tmp/have /tmp/old # will be renamed
同时检查 docs/agents/triage-labels.md 和根目录中的 AGENTS.md,并说明每个文件将被创建、更新还是保持不变。预览结束时,明确询问用户是否要应用这些更改。
3. 确认后应用
在通常为公开的仓库中创建标签会对外可见:先让用户确认完整预览。然后运行清单。先重命名,以便 Issue 历史记录随标签保留;接着使用 --force 创建标签或就地更新。
jq -c '.[]' labels.json | while read -r label; do
name=$(jq -r .name <<<"$label")
old=$(jq -r '.renamed_from // empty' <<<"$label")
if [ -n "$old" ] && [ "$old" != "$name" ]; then
gh label edit "$old" --name "$name" --repo "$REPO" 2>/dev/null || true
fi
gh label create "$name" \
--color "$(jq -r .color <<<"$label")" \
--description "$(jq -r .scope <<<"$label"): $(jq -r .description <<<"$label")" \
--force --repo "$REPO"
done
如需设置多个仓库,可使用另一个 $REPO 重复操作。
4. 记录约定
创建或更新 docs/agents/triage-labels.md。/triage 和 PR 技能会读取此适配文件,以便将角色名称转换为标签字符串,因此文件必须包含:
- 一张表格,为每个
/triage角色(bug、enhancement、needs-triage、needs-info、ready-for-agent、ready-for-human、wontfix)各设一行,并包含两列标签:一列用于 Issue,一列用于 PR;映射遵循 RATIONALE.md; - 本文件顶部列出的规则;
- 文件中已有的任何仓库专属标签或覆盖项,并予以保留。
然后确保根目录中的 AGENTS.md 在提及 Issue 分流或 PR 评审结论的地方都指向该文件。只添加最简短的引用,不要复制这份约定。
5. 报告
报告三个类别:已重命名、已更新和已创建;列出各类别中的标签,空类别写“无”,然后说明创建或更新了哪些文档。仓库中不在清单里的标签保持不变。如果用户想删除某个标签,这属于一项有意为之的操作,因为删除会从所有 Issue 和 PR 中移除该标签:
gh label delete "<name>" --repo "$REPO" --yes
更改标签集
编辑 labels.json。要重命名标签,请更改 name,并将 renamed_from 设为旧字符串;所有仓库迁移完成后,删除 renamed_from。标签集应保持精简:新增标签必须包含标题、差异或现有标签未提供的信息。在 RATIONALE.md 中记录理由;如果角色映射发生变化,请更新步骤 4 中的契约模板。