بنقرة واحدة
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
/ 而非 \