| name | harness-spawn-subharness-agent |
| description | 生成子代理技能,实现完全隔离的子任务执行环境,防止上下文污染 |
| trigger_words | ["harness-spawn-subharness-agent","生成子代理","spawn-subagent","子代理"] |
| priority | HIGH |
| dependencies | ["harness-build-deterministic-workflow"] |
| version | v3.0.0 |
harness-spawn-subharness-agent 生成子代理技能
核心能力
- 检查前置条件(harness-build-deterministic-workflow)
- 创建子代理隔离目录(.subharness/{task-id}/)
- 初始化子代理文件(SUBTASK_MANIFEST.md, CONTEXT_INDEX.md, STATUS.md)
- 创建 Git worktree 隔离环境
- 注册子代理到全局状态
前置条件
- harness-build-deterministic-workflow 已完成
- WORKFLOW_TEMPLATES.md 存在
执行步骤
Step 1: 检查前置条件
使用 Read 工具读取:.EnjoyHarness/SKILL_REGISTRY.md
检查条件:
- harness-build-deterministic-workflow 已标记为完成
如果未完成:
❌ 错误: 工作流未构建
💡 请先运行: harness-build-deterministic-workflow
Step 2: 生成任务ID
使用 Bash 工具生成唯一任务ID:
TASK_TYPE="feature"
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
TASK_ID="${TASK_TYPE}-${TIMESTAMP}"
echo "任务ID: ${TASK_ID}"
Step 3: 创建子代理目录
使用 Bash 工具创建目录:
mkdir -p .subharness/${TASK_ID}
mkdir -p .subharness/${TASK_ID}/WORK_TREE
echo "✅ 子代理目录创建完成: .subharness/${TASK_ID}"
Step 4: 创建 SUBTASK_MANIFEST.md
使用 Write 工具创建文件:.subharness/${TASK_ID}/SUBTASK_MANIFEST.md
内容:
---
task_id: {TASK_ID}
parent_task: none
created_at: {TIMESTAMP}
status: pending
priority: MEDIUM
---
# SubTask Manifest
## 任务信息
- 任务ID: {TASK_ID}
- 父任务: 无(根任务)
- 创建时间: {TIMESTAMP}
- 状态: 待执行
- 优先级: 中等
## 任务描述
{任务描述占位符}
## 技能调用链
{待填充}
## 依赖关系
- 上游依赖: 无
- 下游触发: 无
## 成功标准
- [ ] 任务完成
- [ ] 测试通过
- [ ] 输出校验通过
## 失败兜底
- 失败次数 ≥ 3次 → 触发熔断
- 超时 ≥ 30分钟 → 终止执行
Step 5: 创建 CONTEXT_INDEX.md
使用 Write 工具创建文件:.subharness/${TASK_ID}/CONTEXT_INDEX.md
内容:
---
task_id: {TASK_ID}
context_priority: P1
loaded_at: null
---
# SubTask Context Index
## 上下文加载策略
### P0级(必需)
- [ ] SUBTASK_MANIFEST.md(本文件)
- [ ] AGENTS_MANIFEST.md(核心规则)
- [ ] ARCHITECTURE_GUARDRAILS.md(架构约束)
### P1级(按任务类型)
- [ ] WORKFLOW_TEMPLATES.md(工作流模板)
- [ ] TOOLSET_SPEC.md(工具配置)
### P2级(按需)
- [ ] ERROR_HANDBOOK.md(错误处理)
- [ ] 相关代码文件
## 上下文隔离规则
1. **禁止访问**: 其他子代理的上下文
2. **仅访问**: 本任务相关文件 + 全局规则
3. **写入限制**: 仅写入本任务目录
## Token预算
- 最大Token: 5000 tokens
- 当前使用: 0 tokens
Step 6: 创建 STATUS.md
使用 Write 工具创建文件:.subharness/${TASK_ID}/STATUS.md
内容:
---
task_id: {TASK_ID}
status: pending
started_at: null
completed_at: null
iteration_count: 0
error_count: 0
---
# SubTask Status
## 执行状态
- 状态: 待执行
- 开始时间: 未开始
- 完成时间: 未完成
- 迭代次数: 0
- 错误次数: 0
## 执行进度
- [ ] 初始化完成
- [ ] 工作流开始
- [ ] 节点执行中
- [ ] 结果验证
- [ ] 任务完成
## 事件记录
等待第一个事件...
## Token消耗
- 已使用: 0 tokens
- 剩余: 5000 tokens
- 占比: 0%
## 错误记录
无错误
Step 7: 创建 Git Worktree(可选)
如果需要完全隔离的 Git 环境:
git checkout -b subtask/${TASK_ID}
git worktree add .subharness/${TASK_ID}/WORK_TREE subtask/${TASK_ID}
echo "✅ Git worktree 创建完成"
Step 8: 更新全局状态
使用 Read 工具读取:.EnjoyHarness/GLOBAL_STATE.md
使用 Edit 工具更新:.EnjoyHarness/GLOBAL_STATE.md
在 active_subagents 列表中添加:
active_subagents:
- task_id: {TASK_ID}
status: pending
created_at: {TIMESTAMP}
Step 9: 更新事件日志
使用 Edit 工具追加内容到:.EnjoyHarness/EVENT_LOG.md
追加内容:
{TIMESTAMP} | SUBAGENT_SPAWN | harness-spawn-subharness-agent | 生成子代理 {TASK_ID} | SUCCESS
Step 10: 更新事件计数
使用 Edit 工具更新:.EnjoyHarness/EVENT_LOG.md
old_string: total_events: N
new_string: total_events: N+1
Step 11: 更新技能注册表
使用 Edit 工具更新:.EnjoyHarness/SKILL_REGISTRY.md
old_string: - [ ] harness-spawn-subharness-agent - 生成子代理技能
new_string: - [x] harness-spawn-subharness-agent - 生成子代理技能 ✅
Step 12: 输出完成信息
使用 Bash 工具输出:
echo ""
echo "✅ harness-spawn-subharness-agent 完成!"
echo ""
echo "📋 子代理信息:"
echo " - 任务ID: ${TASK_ID}"
echo " - 目录: .subharness/${TASK_ID}"
echo " - 状态: 待执行"
echo ""
echo "📂 文件创建:"
echo " - SUBTASK_MANIFEST.md(任务规则)"
echo " - CONTEXT_INDEX.md(上下文索引)"
echo " - STATUS.md(状态追踪)"
echo " - WORK_TREE/(Git worktree)"
echo ""
echo "🔒 隔离机制:"
echo " - 文件系统隔离: ✅"
echo " - Git worktree隔离: ✅"
echo " - Token预算隔离: 5000 tokens"
echo ""
echo "🎯 下一步:"
echo " 运行 harness-monitor-subharness-agent 开始监控子代理"
echo ""
成功标准
失败兜底
- harness-build-deterministic-workflow 未完成 → 终止执行,提示运行前置技能
- 目录创建失败 → 记录错误到 EVENT_LOG.md,触发重试
- Git worktree 创建失败 → 跳过 worktree,仅使用目录隔离
联动关系
- 前置: harness-build-deterministic-workflow
- 自动触发: harness-monitor-subharness-agent
迭代计数
本技能执行预计迭代次数: 约 8 次(Write 3次 + Edit 4次 + Read 1次)
测试用例
测试 1: 前置条件检查
输入: 在工作流未构建时运行
期望输出: 错误提示"工作流未构建"
验证方式: 删除 WORKFLOW_TEMPLATES.md 后运行
测试 2: 目录创建
输入: 执行 harness-spawn-subharness-agent
期望输出: .subharness/{task-id}/ 目录存在
验证方式: ls -la .subharness/
测试 3: 文件完整性
输入: 检查子代理目录
期望输出: 包含 SUBTASK_MANIFEST.md, CONTEXT_INDEX.md, STATUS.md
验证方式: ls .subharness/{task-id}/
测试 4: 全局状态更新
输入: 读取 GLOBAL_STATE.md
期望输出: active_subagents 包含新生成的任务ID
验证方式: grep "{TASK_ID}" .EnjoyHarness/GLOBAL_STATE.md
测试 5: 技能注册表更新
输入: 读取 SKILL_REGISTRY.md
期望输出: harness-spawn-subharness-agent 标记为完成
验证方式: grep "harness-spawn-subharness-agent" .EnjoyHarness/SKILL_REGISTRY.md
测试 6: 事件日志记录
输入: 读取 EVENT_LOG.md
期望输出: 包含 SUBAGENT_SPAWN 事件
验证方式: grep "SUBAGENT_SPAWN" .EnjoyHarness/EVENT_LOG.md
子代理隔离机制
隔离层级
层级 1: 文件系统隔离
- 独立目录:
.subharness/{task-id}/
- 独立文件: MANIFEST, CONTEXT, STATUS
- 写入限制: 仅本目录
层级 2: Git Worktree 隔离
- 独立分支:
subtask/{task-id}
- 独立 worktree:
.subharness/{task-id}/WORK_TREE
- 提交隔离: 不影响主分支
层级 3: Token 预算隔离
- 独立预算: 5000 tokens/子代理
- 独立计数: 不影响全局迭代计数
- 超限处理: 终止子代理,触发熔断
层级 4: 上下文隔离
- 仅加载必要上下文(P0 + P1)
- 禁止访问其他子代理上下文
- 防止上下文污染
隔离优势
- 防止上下文污染: 每个子代理独立上下文,避免干扰
- 并行执行: 多个子代理可并行执行不同任务
- 故障隔离: 单个子代理失败不影响其他子代理
- Token控制: 每个子代理独立Token预算,防止超限
- 易于调试: 每个子代理有独立的执行日志和状态
使用示例
示例 1: 生成功能开发子代理
示例 2: 生成Bug修复子代理
示例 3: 并行执行多个子代理
子代理1: feature-20260328-110000 (用户登录功能)
子代理2: fix-20260328-110500 (修复注册Bug)
子代理3: refactor-20260328-111000 (优化数据库查询)
并行执行: 3个子代理同时运行
隔离机制: 完全隔离,互不干扰