| name | harness-escalate-to-human |
| description | 人工转交技能,当系统遇到无法自动处理的错误或达到熔断阈值时,生成详细报告并请求人工介入 |
| trigger_words | ["harness-escalate-to-human","人工转交","escalate","人工介入","human intervention"] |
| priority | HIGH |
| dependencies | ["harness-handle-failure"] |
| version | v3.0.0 |
harness-escalate-to-human 人工转交技能
核心能力
- 检查前置条件(harness-handle-failure已完成)
- 收集完整的失败上下文
- 生成人工转交报告
- 分析失败根本原因
- 提供人工干预建议
- 仅在真实阻塞时触发人工决策
- 记录转交事件
前置条件
- harness-init 已完成
- harness-handle-failure 已完成
- 存在需要人工介入的失败事件(熔断触发或无法自动处理)
.EnjoyHarness/EXECUTION_CONTRACT.md 标记 human_escalation_policy: true_blockers_only
执行步骤
Step 1: 检查前置条件
使用 Read 工具读取:.EnjoyHarness/SKILL_REGISTRY.md
检查条件:
- harness-handle-failure 已标记为完成
如果未完成:
❌ 错误: 失败处理未执行
💡 请先运行: harness-handle-failure
Step 2: 识别触发原因
人工转交的触发场景:
强制边界:
- 本技能不是常规流程步骤。
- 只有自动回滚、自动重试、自动恢复全部失败,且确认属于真实阻塞时,才允许触发。
- 任何“仅需要执行偏好选择”或“普通任务确认”的场景,都不应调用本技能。
2.1 任务级熔断
触发条件:
- 同一任务错误计数 ≥ 3
- 熔断文件存在:
.EnjoyHarness/.circuit-breaker-task-{TASK_ID}
2.2 迭代次数熔断
触发条件:
- 迭代计数达到上限(100次)
- 熔断文件存在:
.EnjoyHarness/.circuit-breaker-iteration
2.3 Token消耗熔断
触发条件:
2.4 架构级错误
触发条件:
2.5 多次重试失败
触发条件:
- 经过多次自动重试后仍然失败
- 策略A、策略B均无法解决
Step 3: 收集失败上下文
使用 Read 工具读取多个文件:
3.1 读取错误追踪
读取:.trace/ERROR_TRACE.md
提取:
- 最近的失败记录
- 错误类型和详情
- 错误序列(如果多次失败)
3.2 读取全局状态
读取:.EnjoyHarness/GLOBAL_STATE.md
提取:
- 当前任务ID
- 当前迭代次数
- 技能错误计数
- 活跃子代理状态
3.3 读取迭代计数
读取:.EnjoyHarness/ITERATION_COUNTER.md
提取:
3.4 读取事件日志
读取:.EnjoyHarness/EVENT_LOG.md
提取:
3.5 读取失败报告
读取:.trace/FAILURE_REPORT_{TASK_ID}.md
提取:
Step 4: 分析失败根本原因
根据收集的上下文,AI分析失败的根本原因:
4.1 表面原因
4.2 深层原因
- 为什么会失败
- 是否有隐藏的依赖问题
- 环境是否满足要求
4.3 影响范围
Step 5: 生成人工转交报告
使用 Bash 工具获取当前时间:
TIMESTAMP=$(date -Iseconds)
TASK_ID={当前任务ID}
echo "时间戳: $TIMESTAMP"
echo "任务ID: $TASK_ID"
使用 Write 工具创建报告:.trace/ESCALATION_REPORT_{TASK_ID}.md
内容:
---
escalation_id: ESC-{TIMESTAMP}
created_at: {TIMESTAMP}
task_id: {TASK_ID}
status: ESCALATED
priority: {CRITICAL/HIGH/MEDIUM}
---
# 人工转交报告
## 执行摘要
**转交时间**: {TIMESTAMP}
**任务ID**: {TASK_ID}
**优先级**: {CRITICAL/HIGH/MEDIUM}
**转交原因**: {熔断触发/多次失败/架构错误/其他}
---
## 触发原因详情
### 熔断信息
- 熔断类型: {任务级/迭代级/Token级}
- 触发条件: {具体条件}
- 熔断文件: {文件路径}
### 错误计数
- 技能: {技能名}
- 错误次数: {N}/3
- 错误类型: {代码/架构/流程}
### 迭代信息
- 当前迭代: {N}/100
- 开始时间: {开始时间}
- 已执行时长: {时长}
---
## 失败上下文
### 错误序列
{时间线方式展示失败序列}
示例:
T0: 任务开始
T+5min: 第一次失败(代码错误)→ 重试
T+10min: 第二次失败(不同原因)→ 重试
T+15min: 第三次失败(流程错误)→ 熔断触发
### 失败详情
#### 失败 #1
- 时间: {时间}
- 技能: {技能名}
- 错误: {错误信息}
- 处理: {处理措施}
#### 失败 #2
- 时间: {时间}
- 技能: {技能名}
- 错误: {错误信息}
- 处理: {处理措施}
#### 失败 #3
- 时间: {时间}
- 技能: {技能名}
- 错误: {错误信息}
- 处理: {处理措施}
---
## 已尝试的自动处理措施
- [x] 错误分类和分析
- [x] 失败上下文记录
- [x] Git回滚({是/否})
- [x] 自动重试(策略A,{N}次)
- [x] 调整后重试(策略B,{N}次)
- [x] 架构检查重新执行
- [x] 错误诊断技能触发
**结果**: 所有自动处理措施均未成功解决问题
---
## 根本原因分析
### 表面原因
{直接原因,如:编译错误、架构违规}
### 深层原因
{分析后的深层原因,如:
- 设计缺陷导致无法满足需求
- 环境配置不满足要求
- 依赖的服务不可用
- 需求理解有误
}
### 影响范围
- 受影响文件: {文件列表}
- 受影响技能: {技能列表}
- 阻塞任务: {任务列表}
---
## 当前系统状态
### 迭代计数
- 当前: {N}/100
- 状态: {正常/接近上限/已达上限}
### 技能错误计数
```yaml
harness-validate-output: {N}/3
harness-spawn-subharness-agent: {N}/3
{其他技能}: {N}/3
全局状态
- 当前任务: {任务ID}
- 状态: {熔断/暂停}
- 活跃子代理: {数量}
- 最近事件: {最近5个事件}
人工干预建议
建议1: 检查并修复代码
适用场景: 代码错误、语法错误
具体操作:
- 检查文件:{文件路径}
- 修复错误:{具体错误}
- 运行测试验证
- 手动清除熔断文件:
.EnjoyHarness/.circuit-breaker-*
- 重新启动任务
建议2: 调整架构设计
适用场景: 架构错误、分层违规
具体操作:
- 检查架构违规:{具体违规}
- 调整代码结构以符合架构规则
- 更新ARCHITECTURE_GUARDRAILS.md(如果需要)
- 重新运行架构验证
- 清除熔断后重新执行
建议3: 检查环境配置
适用场景: 流程错误、依赖问题
具体操作:
- 检查依赖服务状态
- 验证环境变量配置
- 确认权限设置
- 调整执行顺序(如果需要)
- 重新启动任务
建议4: 调整需求或方案
适用场景: 需求理解偏差、方案不可行
具体操作:
- 重新审视原始需求
- 评估当前方案的可行性
- 调整方案或寻求澄清
- 更新目标文件(memory/goals/)
- 从头开始执行
建议5: 人工完成该任务
适用场景: 所有自动处理失败、复杂问题
具体操作:
- 人工检查代码和日志
- 手动修复问题
- 提交代码
- 更新目标文件状态为completed
- 清理熔断文件
标准处置选项
人工接管后可参考以下标准处置路径:
选项A: 修复后继续
选项B: 调整方案后重新开始
选项C: 人工完成并结束
- 人工完成剩余工作
- 更新目标状态为completed
- 记录经验教训
选项D: 放弃任务
- 记录放弃原因
- 清理临时文件
- 标记任务为abandoned
后续步骤(待人工决策后执行)
如果选择选项A(修复后继续)
rm .EnjoyHarness/.circuit-breaker-*
如果选择选项B(调整后重新开始)
如果选择选项C(人工完成)
如果选择选项D(放弃)
联系信息(如果适用)
如需进一步协助,请提供:
- 任务ID: {TASK_ID}
- 转交报告路径: .trace/ESCALATION_REPORT_{TASK_ID}.md
- 错误追踪路径: .trace/ERROR_TRACE.md
- 全局状态路径: .EnjoyHarness/GLOBAL_STATE.md
附录:相关文件清单
日志文件
- 错误追踪:
.trace/ERROR_TRACE.md
- 事件日志:
.EnjoyHarness/EVENT_LOG.md
- 失败报告:
.trace/FAILURE_REPORT_{TASK_ID}.md
状态文件
- 全局状态:
.EnjoyHarness/GLOBAL_STATE.md
- 迭代计数:
.EnjoyHarness/ITERATION_COUNTER.md
- 技能注册:
.EnjoyHarness/SKILL_REGISTRY.md
目标文件
- 目标文件:
memory/goals/{TIMESTAMP}_{关键词}.md
熔断文件
- 熔断文件:
.EnjoyHarness/.circuit-breaker-*
报告生成时间: {TIMESTAMP}
报告生成技能: harness-escalate-to-human v3.0.0
### Step 6: 输出人工提示
使用 Bash 工具输出醒目的人工介入提示:
```bash
echo ""
echo "🚨🚨🚨 需要人工介入 🚨🚨🚨"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "人工转交报告已生成"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "📋 报告路径: .trace/ESCALATION_REPORT_{TASK_ID}.md"
echo "🆔 转交ID: ESC-{TIMESTAMP}"
echo "⚡ 优先级: {CRITICAL/HIGH/MEDIUM}"
echo ""
echo "触发原因:"
echo " {触发原因详情}"
echo ""
echo "已尝试的自动处理:"
echo " - 错误分类和分析 ✓"
echo " - Git回滚 {是/否} ✓"
echo " - 自动重试 {N}次 ✓"
echo " - 所有措施均未成功"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "请查看完整报告并选择处理方案:"
echo " A. 修复后继续"
echo " B. 调整方案后重新开始"
echo " C. 人工完成并结束"
echo " D. 放弃任务"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "⚠️ 注意: 系统已暂停,等待人工决策"
echo "⚠️ 熔断文件: .EnjoyHarness/.circuit-breaker-*"
echo ""
Step 7: 记录转交事件
使用 Edit 工具追加到:.EnjoyHarness/EVENT_LOG.md
{TIMESTAMP} | ESCALATION | harness-escalate-to-human | 转交人工介入 (任务: {TASK_ID}, 原因: {原因}) | ESCALATED
{TIMESTAMP} | SYSTEM_PAUSE | harness-escalate-to-human | 系统暂停,等待人工决策 | PAUSED
Step 8: 更新全局状态
使用 Edit 工具更新:.EnjoyHarness/GLOBAL_STATE.md
## 当前任务
- 任务ID: {TASK_ID}
- 状态: ESCALATED(人工转交)
- 开始时间: {开始时间}
- 转交时间: {当前时间}
- 转交原因: {原因}
## 系统状态
- 状态: PAUSED(等待人工决策)
- 转交报告: .trace/ESCALATION_REPORT_{TASK_ID}.md
Step 9: 更新迭代计数
使用 Edit 工具更新:.EnjoyHarness/ITERATION_COUNTER.md
增加计数(本技能约8次迭代):
current_iteration: N+8
Step 10: 标记技能完成
使用 Edit 工具更新:.EnjoyHarness/SKILL_REGISTRY.md
- [x] harness-escalate-to-human - 人工转交技能 ✅
Step 11: 等待人工决策
系统状态已设置为PAUSED,等待人工:
- 阅读转交报告
- 选择处理方案(A/B/C/D)
- 执行相应操作
- 清除熔断文件或更新状态
- 通知系统继续或结束
Step 12: 输出完成信息
使用 Bash 工具输出:
echo ""
echo "✅ harness-escalate-to-human 执行完成"
echo ""
echo "📋 转交报告已生成:"
echo " .trace/ESCALATION_REPORT_{TASK_ID}.md"
echo ""
echo "📌 系统状态: PAUSED(等待人工决策)"
echo ""
echo "💡 提示:"
echo " - 请查看转交报告了解详细情况"
echo " - 选择处理方案后,清除熔断文件或更新状态"
echo " - 需要帮助请提供任务ID: {TASK_ID}"
echo ""
成功标准
失败兜底
- 前置条件未满足 → 终止执行,提示运行前置技能
- 无法生成报告 → 记录错误,输出紧急提示
- 报告文件创建失败 → 尝试多次,仍失败则输出到控制台
联动关系
- 前置技能: harness-handle-failure
- 触发场景: 任务级熔断、迭代熔断、架构错误、多次失败
- 触发前提: 必须已经穷尽自动恢复手段,且属于真实阻塞
- 人工决策后:
- 选项A: 清除熔断后自动继续
- 选项B: 更新目标后重新开始
- 选项C: 标记完成
- 选项D: 标记放弃
迭代计数
本技能执行预计迭代次数: 约8次(Write 1次 + Edit 4次 + Read 3次 + Bash 2次)
测试用例
测试场景1:任务级熔断转交
输入:
触发: 同一任务失败3次
熔断文件: .EnjoyHarness/.circuit-breaker-task-001
错误计数: 3/3
预期输出:
- 读取所有相关文件(ERROR_TRACE, GLOBAL_STATE, EVENT_LOG)
- 生成ESCALATION_REPORT_task-001.md
- 报告包含完整失败序列
- 提供5个人工干预建议
- 输出醒目的人工提示
- 系统状态设为PAUSED
测试场景2:迭代熔断转交
输入:
触发: 迭代计数达到上限
当前迭代: 100/100
熔断文件: .EnjoyHarness/.circuit-breaker-iteration
预期输出:
- 分析迭代次数超限原因
- 生成包含迭代详情的转交报告
- 建议:简化方案或分阶段执行
- 提供决策选项
测试场景3:架构错误转交
输入:
触发: 严重架构违规
错误类型: ARCHITECTURE_ERROR
已尝试: 架构修复(失败)
预期输出:
- 分析架构违规详情
- 建议架构调整方案
- 提供详细的架构修复步骤
- 建议选项B(调整后重新开始)
测试场景4:Token消耗超限转交
输入:
触发: Token消耗 > 10000
单任务Token: 12500
预期输出:
- 分析Token消耗分布
- 建议优化方案或分阶段执行
- 提供Token使用详情
- 建议选项B(简化方案)
测试场景5:多次重试失败转交
输入:
失败序列:
- 第一次: 代码错误 → 重试(策略A)
- 第二次: 不同错误 → 重试(策略A)
- 第三次: 流程错误 → 重试(策略B)
- 第四次: 失败 → 熔断
预期输出:
- 完整失败序列时间线
- 每次失败的处理措施
- 根本原因分析
- 建议选项A或C(修复或人工完成)
测试场景6:人工决策后继续(选项A)
输入:
人工修复完成
选择: 选项A(修复后继续)
操作: 清除熔断文件
预期输出:
- 检测到熔断文件已清除
- 系统状态从PAUSED恢复为ACTIVE
- 重置错误计数
- 继续执行后续技能
测试场景7:人工决策后放弃(选项D)
输入:
人工决定放弃任务
选择: 选项D(放弃任务)
预期输出:
- 目标文件状态更新为abandoned
- 清理临时文件
- 记录放弃原因到ERROR_HANDBOOK.md
- 系统状态恢复正常(无当前任务)