mcpField
S
setup-harness

setup-harness

github.com/limchihiAgent 工作流092 次安装2 周前更新
代码仓库

关于 setup-harness

这是一个提示词驱动的技能,会先检查项目,再配置仓库钩子、合并自动化和工作树清理,适用于使用 `/implement` 并希望按现有流程设置仓库的团队。

主要功能

  1. 01检查仓库钩子和合并配置
  2. 02安装 Agent 与 Git 钩子
  3. 03配置 Mergify 合并条件
  4. 04清理工作树专属资源

适用场景

  1. 01为仓库配置 `/implement`
  2. 02依据工作流检查设置合并条件
  3. 03移除已合并工作树后释放资源

安装

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

$npx skills add https://github.com/limchihi/harness --skill setup-harness

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

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

cleanup
mergify.yml
agents/
openai.yaml
hooks/
file_size_hint.py
git_sync_policy.py
post-commit
scripts/
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;如果要更改仓库的合并方式或释放的资源,值得再次运行此技能,而且无论何种原因再次运行都是安全的。

评论

支持 Markdown