ワンクリックで
harness-worktree
每个 Builder/Generator 构建轮次使用独立 git worktree,隔绝上下文污染。构建前创建干净分支,review 通过后合并回主分支。防止迭代之间的状态泄露。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
每个 Builder/Generator 构建轮次使用独立 git worktree,隔绝上下文污染。构建前创建干净分支,review 通过后合并回主分支。防止迭代之间的状态泄露。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
模块开发主循环。轻量协调者:加载上下文后调用 harness-onboard(需求分类+影响面+流程确认),再调用 harness-roles(帽子系统多角色执行),最后沉淀上下文。通常由 .harness/AGENTS.md 自动激活,也可通过 /harness-dev 显式调用。
在当前模块目录下初始化 Harness 框架。扫描代码结构、预填上下文文件、引导开发者逐节审核确认,最终写入 .harness/ 目录。适用于 cmd/、apps/、pkg/ 下的任意模块。
升级当前模块 .harness/framework/ 到最新版本。三层分离设计保证 context/(开发者托管)和 overrides/ 永不被覆盖。可在 harness-dev 提示有新版本时调用,也可直接执行 /harness-upgrade。
Team-level AI spend visibility. Tracks token usage per PR, attribute costs to author/reviewer, generates exportable cost reports. Built on top of harness-roles budget tracking.
CI failure auto-fix. Reads failure logs, identifies root cause, applies fix, commits and creates PR. Triggered by workflow_run or called directly via /fix-ci.
需求分类 + 影响面分析 + 动态流程确认。从用户描述推断工作类型,fetch-first 扫描代码,输出影响面报告,解析 workflow/dev.md 的 rules 动态调整插槽列表,展示流程供用户确认调整,最终输出 resolved_slots JSON 交给 harness-roles 执行。
| name | harness-worktree |
| description | 每个 Builder/Generator 构建轮次使用独立 git worktree,隔绝上下文污染。构建前创建干净分支,review 通过后合并回主分支。防止迭代之间的状态泄露。 |
核心原则:每个构建迭代在干净的 worktree 中运行。 上一轮的 Builder 上下文不影响下一轮。 Generator 的 worktree 与 Evaluator 的 worktree 完全隔离。
| 维度 | harness-loop | harness-worktree |
|---|---|---|
| 上下文隔离 | 无(同一个目录) | 有(独立 worktree) |
| 迭代间状态 | 累积 | 每次全新 |
| branch 模型 | 单分支多次 commit | 多 branch 每次重建 |
| 适合场景 | 长时间无人值守 | 高质量构建验证 |
问题:Builder 在同一目录工作
→ 上一轮的未完成代码干扰下一轮
→ git status 显示上次残留的变更
→ lint 报告上次遗留的错误
→ Reviewer 看到的是混合上下文
解决:每个构建轮次用独立 worktree
→ 干净的文件系统状态
→ 上一轮的东西完全不存在
→ Reviewer 只看到本次的变更
模型 A — 串行 worktree(简单)
main → worktree-1 (build 1) → merge → worktree-2 (build 2) → merge
模型 B — 并行 worktree(推荐)
main → worktree-1 (build 1) ← 并行 →
main → worktree-2 (build 2) ← ↗
main → worktree-3 (build 3) ←────────┘
全部 merge 回 main
模型 C — 临时 worktree(最高隔离)
每次构建前新建 worktree,构建后立即删除
不保留中间状态,每次都是全新克隆
用户:「用隔离环境构建这个需求」
用户:「每个迭代用独立 branch」
用户:「干净 worktree 跑一遍」
自动触发:
- harness-review 迭代超过 2 次仍失败
- 高风险重构(涉及多个高频变更文件)
- 涉及 pkg 公开接口的重大变更
# 获取当前变更文件列表
git diff --name-only main...HEAD
# 识别构建范围
STAGED=$(git diff --cached --name-only)
UNSTAGED=$(git diff --name-only)
UNTRACKED=$(git ls-files --others --exclude-standard)
echo "变更范围:"
echo " 已暂存:$STAGED"
echo " 未暂存:$UNSTAGED"
echo " 新文件:$UNTRACKED"
# 确保 main 最新
git fetch origin main
git checkout main
# 创建新 branch + worktree
BRANCH_NAME="build/$(date +%Y%m%d-%H%M%S)-$(git rev-parse --short HEAD)"
WORKTREE_PATH="../.worktrees/$BRANCH_NAME"
# 创建 worktree
git worktree add "$WORKTREE_PATH" -b "$BRANCH_NAME"
echo "Worktree 创建:$WORKTREE_PATH"
echo "Branch:$BRANCH_NAME"
# 在 worktree 中同步最新代码
cd "$WORKTREE_PATH"
git fetch origin main
git merge origin/main --no-edit
# 记录到状态文件
cat > .harness/worktree/current.json <<EOF
{
"branch": "$BRANCH_NAME",
"path": "$WORKTREE_PATH",
"created": "$(date -Iseconds)",
"parent_commit": "$(git rev-parse HEAD)",
"model": "serial"
}
EOF
echo "✅ Worktree 隔离就绪:$BRANCH_NAME"
# 从 main 同时创建多个 worktree
for i in 1 2 3; do
BRANCH="parallel-$i/$(date +%Y%m%d)"
PATH="../.worktrees/$BRANCH"
git worktree add "$PATH" -b "$BRANCH" main
echo "✅ Worktree $i: $PATH"
done
# 临时 worktree:构建后立即删除,不保留中间状态
TEMP_DIR=$(mktemp -d "/tmp/harness-worktree-XXXXXX")
TEMP_BRANCH="temp/$(date +%s)"
git worktree add "$TEMP_DIR" -b "$TEMP_BRANCH"
# 在其中工作...
# 完成后:保留构建结果,删除临时 worktree
# 但保留结果 commit 不删除(这样 worktree 删了 commit 还在)
git worktree remove "$TEMP_DIR" --force
echo "✅ 临时 worktree 已清理"
# 切换到 worktree
cd "$WORKTREE_PATH"
# 确认干净状态(无残留变更)
if [ -n "$(git status --porcelain)" ]; then
echo "⚠️ Worktree 不干净,先 stash"
git stash
fi
# 同步最新 main
git merge origin/main --no-edit
# 开始构建
echo "🎯 开始构建(隔离环境)"
# ... 构建步骤 ...
# 在 worktree 中运行 harness-review
cd "$WORKTREE_PATH"
# harness-review ...
# Review 通过后,合并回 main
if [ "$REVIEW_STATUS" = "PASS" ]; then
git checkout main
git merge "$BRANCH_NAME" --no-ff -m "Merge $BRANCH_NAME"
git branch -d "$BRANCH_NAME"
git worktree remove "$WORKTREE_PATH" --force
echo "✅ 构建结果已合并到 main"
else
echo "⚠️ Review 未通过,保留 worktree 供调试"
echo "Worktree 路径:$WORKTREE_PATH"
echo "Branch:$BRANCH_NAME"
fi
# 查看所有 worktree
git worktree list
# 清理已完成的 worktree
git worktree prune
# 查看 harness worktree 状态
cat .harness/worktree/current.json
# 清理所有 harness worktree(紧急清理用)
for wt in $(git worktree list --porcelain | grep "^worktree" | awk '{print $2}'); do
if echo "$wt" | grep -q "worktrees"; then
echo "🧹 清理:$wt"
git worktree remove "$wt" --force 2>/dev/null
fi
done
harness-review 开始时:
↓
检查是否启用了 worktree 隔离
↓
如果是:worktree 已准备好,直接在其中运行
↓
Generator 在 worktree 构建
↓
Evaluator 在独立上下文(无 worktree)审查 diff
↓
Review 通过 → merge 回 main
Review 失败 → 保留 worktree 供调试
↓
下次迭代:新建 worktree(上次 worktree 保留为调试用)
.harness/worktree/
├── current.json # 当前 worktree 状态
├── history.json # 历史 worktree 记录
└── archive/ # 调试用保留的 worktree 快照
current.json 格式:
{
"branch": "build/20260407-143022-a1b2c3d",
"path": "/path/to/.worktrees/build/20260407-143022-a1b2c3d",
"created": "2026-04-07T14:30:22Z",
"parent_commit": "a1b2c3d",
"status": "building|reviewing|merged|failed",
"model": "serial|parallel|temp"
}
history.json 格式:
[
{
"branch": "build/20260407-143022-a1b2c3d",
"status": "merged",
"duration_seconds": 342,
"iterations": 2,
"merged_at": "2026-04-07T14:36:04Z"
}
]
# 启动隔离构建
/harness-worktree --start
# 查看当前 worktree 状态
/harness-worktree --status
# 合并到 main(review 通过后)
/harness-worktree --merge
# 清理所有 worktree
/harness-worktree --cleanup
# 紧急清理(删所有 harness worktree)
/harness-worktree --prune
/ 而非 \