关于 setup-harness
这是一个提示词驱动的技能,会先检查项目,再配置仓库钩子、合并自动化和工作树清理,适用于使用 `/implement` 并希望按现有流程设置仓库的团队。
主要功能
- 01检查仓库钩子和合并配置
- 02安装 Agent 与 Git 钩子
- 03配置 Mergify 合并条件
- 04清理工作树专属资源
适用场景
- 01为仓库配置 `/implement`
- 02依据工作流检查设置合并条件
- 03移除已合并工作树后释放资源
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ limchihi/ harness --skill setup-harness安装后在 Claude Code 中输入/setup-harness确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
cleanupmergify.ymlagents/openai.yamlhooks/file_size_hint.pygit_sync_policy.pypost-commitscripts/install_hooks.py详细介绍
设置 harness
/implement 会将工单从评审推进到合并。周围有三项属于代码仓库本身,而非技能:
- 代码仓库钩子 — 由 Agent 和 Git 事件触发的行为
- 合并自动化 — 拉取请求满足条件后负责合并的机制,因此 Agent 绝不会合并自己的工作
- 工作树清理 — 合并后的工作树消失时,代码仓库会释放的资源
这是一项由提示词驱动的技能,而非确定性脚本。先探索,展示你的发现,与用户确认,然后再写入。配置就是实际工作文件;此技能不会编写描述这些文件的文档。
流程
1. 探索
读取现有内容;不要做任何假设:
git remote -v— 这是 GitHub 代码仓库吗?是哪一个?默认分支是什么?.codex/hooks.json和.cursor/hooks.json— 此代码仓库已运行哪些钩子?无论是否由 harness 管理,都要检查。.mergify.yml— 是否存在?当前会在什么条件下自动合并?- 最近几个拉取请求由谁合并:
gh pr list --state merged --limit 5 --json number,mergedBy。如果是机器人账号,说明合并自动化已安装并在运行;如果只有你的账号,则说明没有机制会自动合并。 .github/workflows/— 哪些作业名称会作为检查项报告?这些是可用作具名合并条件的候选项。.agents/hooks/cleanup— 此技能先前的输出。git worktree list和代码仓库自己的脚本 — 链接的工作树是否会获得自己的资源,例如数据库、端口或生成的环境文件?如果core.hooksPath下的检出钩子会配置任何内容,这是最有力的信号。- 查看
AGENTS.md、CLAUDE.md、package.json脚本、Makefile或scripts/,了解代码仓库如何运行检查。/implement会以此命令启动,因此要确认它可以找到,而不是将其记录到其他位置。
2. 配置钩子
运行此技能的 scripts/install_hooks.py。该脚本负责完整安装 Agent 和 Git 钩子,并且具有幂等性,因此无需在此询问,且每次调用时都要运行。将钩子成员关系和接线逻辑保留在安装程序中;随着钩子演进,此步骤保持不变。
3. 展示发现并询问
总结已存在和缺少的内容。然后按顺序逐个处理各部分——一次处理一部分,给出一个答案,再进入下一部分。每部分先给出推荐答案,方便用户用一个词接受;如果探索已得出结论,则直接跳过该部分。
再次运行时,推荐答案就是仓库当前已有的设置:建议保留,仅在用户要求更改时才写入文件。再次运行此技能不会改动经过手动调整的配置。
A 部分——合并自动化。
说明:
/implement会确保所有合并条件都满足,并等待。 其他机制负责合并。这里默认使用 Mergify,因为在私有仓库中,GitHub 自带的必需检查和自动合并功能需要付费方案。
推荐:使用 Mergify,并以此仓库实际要求的检查作为合并条件。
从 .github/workflows/ 中找出任务名称,并建议必须通过的任务——通常是测试或集成任务,而不是只在某些更改时才运行的任务。编写 mergify.yml,替换默认分支,并为每项必需检查添加一行 check-success。
提供以下替代方案:
- 按检查数量而非名称判断 — 将
check-success行替换为#check-failure = 0和#check-pending = 0。即使工作流改名也能继续生效,但会有竞态问题:检查尚未创建的拉取请求也会满足这两个计数条件。只有在必需检查集合确实会变化时才建议使用此方案。 - 不使用自动化 — 审核者手动合并,而
/implement继续等待。
如果 .mergify.yml 已存在,只更改此技能负责的规则,其余内容保持不变。
在仓库安装 Mergify 的 GitHub App 之前,Mergify 不会执行任何合并。如果探索未发现机器人合并,请说明这一点,并引导用户访问 https://github.com/apps/mergify。
B 部分——工作树清理。 如果探索未发现每个工作树拥有的资源,则完全跳过此部分——/implement 已会移除合并后的工作树及其分支,而不拥有其他资源的仓库不需要钩子。
否则,询问一个问题:
工作树移除后,应该运行哪条命令来释放它拥有的资源?
将答案写成可执行的 .agents/hooks/cleanup,以 cleanup 为起点,并将其中的 RELEASE_COMMAND 占位符替换为答案。/implement 会在移除已合并的工作树后运行此命令,并报告其输出,因此命令应说明释放了什么,而不是静默执行。
4. 确认并写入
向用户展示你准备写入的每个文件,并允许他们先行编辑。然后写入文件,并将 .agents/hooks/cleanup 设为可执行。
5. 完成
告知用户应提交生成的文件,以便工具配置成为仓库的一部分;Codex 需要通过 /hooks 信任一次项目钩子,而 Cursor 会在保存时重新加载 .cursor/hooks.json。更新工具本身的命令是 npx skills@latest update;如果要更改仓库的合并方式或释放的资源,值得再次运行此技能,而且无论何种原因再次运行都是安全的。