harness-adjust-granularity
Skill0 starsChanged 8 months agoMITView on GitHub
监控执行过程,动态调整粒度等级,自动拆分或合并功能项
In this repository33 other files it gives its agents.
- harness-10x-productivity-boostSkill
- harness-analyze-project-scaleSkill
- harness-auto-full-executionSkill
- harness-brainstormSkill
- harness-build-context-indexSkill
- harness-build-core-manifestSkill
- harness-build-deterministic-workflowSkill
- harness-check-clean-stateSkill
- harness-configSkill
- harness-context-clearSkill
- harness-determine-granularitySkill
- harness-diagnose-and-improveSkill
- harness-enable-circuit-breakerSkill
- harness-enforce-architecture-guardrailsSkill
- harness-escalate-to-humanSkill
- harness-evaluate-performanceSkill
- harness-evolveSkill
- harness-executing-plansSkill
- harness-generate-feature-listSkill
- harness-goalSkill
- harness-handle-failureSkill
- harness-initSkill
- harness-merge-agent-resultsSkill
- harness-merge-subharness-resultSkill
- harness-monitor-agent-batchSkill
- harness-monitor-subharness-agentSkill
- harness-planSkill
- harness-recover-clean-stateSkill
- harness-schedule-parallel-agentsSkill
- harness-session-handoffSkill
- harness-spawn-subharness-agentSkill
- harness-track-feature-progressSkill
- harness-validate-outputSkill
The file
Files
harness-adjust-granularity
Core Capabilities
监控执行过程,动态调整粒度等级,自动拆分或合并功能项,确保项目执行效率最优。
核心职责:
- 监控执行进度(跟踪完成率、失败率、平均执行时间)
- 检测粒度不合理情况(执行时间偏差、Token 消耗异常)
- 触发粒度调整(COARSE ↔ MEDIUM ↔ FINE)
- 自动拆分功能项(执行时间过长 → 拆分为更小粒度)
- 自动合并功能项(执行时间过短 → 合并为更大粒度)
- 更新功能清单(重新编号、更新依赖关系)
- 输出调整报告(调整原因、调整结果、性能对比)
Execution Steps
Step 1: 监控执行进度
工具: Read
文件: .EnjoyHarness/feature_list.json
监控维度:
维度 1: 完成率监控
计算公式:
completion_rate = completed_features / total_features
数据来源:
- completed_features: 统计 passes: true 的功能数
- total_features: 功能总数
Token 消耗: ~100 tokens
维度 2: 失败率监控
计算公式:
failure_rate = failed_features / completed_features
数据来源:
- failed_features: 统计 error_count > 0 的功能数
- completed_features: 已完成功能数
阈值:
- 正常: failure_rate < 10%
- 警告: failure_rate >= 10% 且 < 30%
- 异常: failure_rate >= 30%(触发粒度调整)
Token 消耗: ~100 tokens
维度 3: 平均执行时间监控
计算公式:
avg_execution_time = sum(execution_times) / completed_features
数据来源:
- execution_times: 从 EVENT_LOG.md 提取每个功能的执行时间
- completed_features: 已完成功能数
偏差检测:
- 实际执行时间 vs 预估时间
- 偏差率 = |actual - estimated| / estimated
- 阈值: 偏差率 > 50%(触发粒度调整)
Token 消耗: ~200 tokensStep 2: 检测粒度不合理情况
检测规则(按优先级从高到低):
规则 1: 执行时间过长(拆分触发)
条件:
- 单个功能项执行时间 > 2 * estimated_hours
- 或 Token 消耗 > 50000 tokens per 功能项
判定:
- 粒度过粗(需要拆分)
- 调整方向: COARSE → MEDIUM 或 MEDIUM → FINE
动作:
- 标记该功能项为"需要拆分"
- 记录到 EVENT_LOG.md(GRANULARITY_ADJUST | SPLIT)
Token 消耗: ~100 tokens
规则 2: 执行时间过短(合并触发)
条件:
- 单个功能项执行时间 < 0.5 * estimated_hours
- 且连续 5 个功能项都过短
判定:
- 粒度过细(需要合并)
- 调整方向: FINE → MEDIUM 或 MEDIUM → COARSE
动作:
- 标记这些功能项为"需要合并"
- 记录到 EVENT_LOG.md(GRANULARITY_ADJUST | MERGE)
Token 消耗: ~100 tokens
规则 3: 失败率异常(拆分触发)
条件:
- failure_rate >= 30%
- 或连续 3 个功能项失败
判定:
- 功能项过于复杂(需要拆分)
- 调整方向: 拆分为更小粒度
动作:
- 标记失败功能项为"需要拆分"
- 记录到 EVENT_LOG.md(GRANULARITY_ADJUST | SPLIT_DUE_TO_FAILURE)
Token 消耗: ~100 tokens
规则 4: Token 消耗异常(拆分触发)
条件:
- 单个功能项 Token 消耗 > 预算的 150%
- 或总 Token 消耗 > 预算的 120%
判定:
- 功能项过于复杂或上下文过大
- 需要拆分以降低上下文负担
动作:
- 标记该功能项为"需要拆分"
- 记录到 EVENT_LOG.md(GRANULARITY_ADJUST | SPLIT_DUE_TO_TOKEN_OVERFLOW)
Token 消耗: ~100 tokensStep 3: 触发粒度调整
调整策略:
策略 1: 拆分功能项(FINE 化)
适用场景:
- 执行时间过长
- 失败率异常
- Token 消耗异常
拆分规则:
- COARSE → MEDIUM: 拆分为 3-5 个功能项(每个 2-4 小时)
- MEDIUM → FINE: 拆分为 2-3 个功能项(每个 1-2 小时)
- 保持功能完整性(拆分后仍可独立验证)
示例:
原功能: FEAT-001: 用户管理(COARSE, 8h)
拆分为:
- FEAT-001-1: 用户注册(MEDIUM, 3h)
- FEAT-001-2: 用户登录(MEDIUM, 3h)
- FEAT-001-3: 用户资料管理(MEDIUM, 2h)
Token 消耗: ~500 tokens per 拆分操作
策略 2: 合并功能项(COARSE 化)
适用场景:
- 执行时间过短(连续 5 个功能项都 < 预估时间的一半)
合并规则:
- FINE → MEDIUM: 合并 2-3 个相关功能项(每个 2-4 小时)
- MEDIUM → COARSE: 合并 3-5 个相关功能项(每个 4-8 小时)
- 保持模块内聚(合并的功能项应属于同一模块)
示例:
原功能:
- FEAT-001: 用户注册接口(FINE, 1h)
- FEAT-002: 用户注册页面(FINE, 1h)
- FEAT-003: 注册表单验证(FINE, 1h)
合并为:
- FEAT-001: 用户注册(MEDIUM, 3h, 包含接口+页面+验证)
Token 消耗: ~500 tokens per 合并操作Step 4: 更新功能清单
工具: Read + Edit
文件: .EnjoyHarness/feature_list.json
更新操作:
操作 1: 重新编号
规则:
- 拆分后: FEAT-001 → FEAT-001-1, FEAT-001-2, FEAT-001-3
- 合并后: FEAT-001, FEAT-002, FEAT-003 → FEAT-001(合并)
- 保持 ID 唯一性(避免冲突)
Token 消耗: ~200 tokens
操作 2: 更新依赖关系
规则:
- 拆分后:
- 原依赖: FEAT-001 依赖 FEAT-002
- 新依赖: FEAT-001-1 依赖 FEAT-002(或 FEAT-002-1)
- 合并后:
- 原依赖: FEAT-001 依赖 FEAT-002, FEAT-003
- 新依赖: FEAT-001(合并)依赖 FEAT-002(合并)
Token 消耗: ~300 tokens
操作 3: 更新预估时间
规则:
- 拆分后: 重新预估每个子功能项的时间
- 合并后: 重新预估合并后功能项的时间
Token 消耗: ~100 tokens
验证:
- JSON Schema 验证(确保格式正确)
- 依赖关系检查(避免循环依赖)
- ID 唯一性检查(避免冲突)Step 5: 记录调整历史
工具: Edit
文件: .EnjoyHarness/EVENT_LOG.md
追加内容:
- 时间戳: {timestamp}
- 事件类型: GRANULARITY_ADJUST
- 调整类型: SPLIT/MERGE
- 原因: {reason}
- 原功能ID: {original_ids}
- 新功能ID: {new_ids}
- 性能对比:
- 原预估时间: {original_estimated}
- 新预估时间: {new_estimated}
- 调整效果: {improvement}
Token 消耗: ~100 tokensStep 6: 输出调整报告
报告格式:
🔧 粒度调整报告
调整时间: {timestamp}
调整类型: {adjustment_type}(SPLIT/MERGE)
调整原因:
- 检测到的问题: {detected_issue}
- 触发规则: {trigger_rule}
- 数据支持: {data_evidence}
调整详情:
原功能项:
- ID: {original_ids}
- 描述: {original_descriptions}
- 预估时间: {original_estimated_hours}
- 实际执行时间: {actual_hours}
新功能项:
- ID: {new_ids}
- 描述: {new_descriptions}
- 预估时间: {new_estimated_hours}
- 预期执行时间: {expected_hours}
性能对比:
- 原预估时间: {original_total} 小时
- 新预估时间: {new_total} 小时
- 时间优化: {time_improvement}%
- Token 优化: {token_improvement}%
更新文件:
- feature_list.json(功能项已更新)
- EVENT_LOG.md(调整历史已记录)
- GLOBAL_STATE.md(粒度等级已更新)
下一步建议:
- 继续执行功能开发(使用新粒度)
- 监控调整后的执行效果
- 如效果不佳,可再次调整
Token 消耗: ~300 tokensPrerequisites
必须满足:
- ✅ 已执行
harness-generate-feature-list(功能清单已生成) - ✅ 功能清单中至少有 5 个功能项(便于统计和调整)
- ✅ 已执行一段时间(至少完成 20% 功能,有统计数据)
如果前置条件不满足:
- 如果统计数据不足 → 等待执行一段时间后再调整
- 如果功能项太少 → 提示"功能项太少,不建议调整"
Success Criteria
成功标准:
- ✅ 成功监控执行进度(完成率、失败率、平均执行时间)
- ✅ 成功检测粒度不合理情况(至少一种异常)
- ✅ 成功触发粒度调整(拆分或合并)
- ✅ 成功更新功能清单(重新编号、更新依赖)
- ✅ 成功记录调整历史(EVENT_LOG.md)
- ✅ 成功输出调整报告
失败情况:
- ❌ 统计数据不足 → 提示等待更多执行数据
- ❌ 功能项太少 → 提示不建议调整
- ❌ JSON 格式验证失败 → 记录错误,拒绝写入
Failure Recovery
错误场景 1: 统计数据不足
检测: 完成功能数 < 5 或完成率 < 20%
处理:
1. 输出提示: "统计数据不足,建议等待更多功能完成后再调整"
2. 显示当前进度:
- 完成功能数: {completed_features}
- 总功能数: {total_features}
- 完成率: {completion_rate}%
3. 建议: "等待完成率 ≥ 20% 后再触发调整"错误场景 2: 功能项太少
检测: 总功能数 < 5
处理:
1. 输出提示: "功能项太少,不建议调整粒度"
2. 显示功能总数: {total_features}
3. 建议: "功能项太少时,调整粒度可能适得其反"错误场景 3: 调整后循环依赖
检测: 调整后的依赖关系包含循环
处理:
1. 检测循环依赖: A → B → C → A
2. 输出循环依赖链
3. 自动解除循环依赖:
- 移除优先级最低的依赖
- 或拆分依赖关系
4. 记录警告到 EVENT_LOG.md错误场景 4: JSON 格式验证失败
检测: Python jsonschema 验证失败
处理:
1. 输出验证错误详情
2. 回滚调整操作(恢复原功能清单)
3. 提示用户手动调整
4. 记录错误到 EVENT_LOG.mdRelationships
Triggers (触发下游)
调整成功:
- 触发 harness-track-feature-progress(使用新粒度继续开发)
- 更新 GLOBAL_STATE.md(granularity_level 字段)Triggered By (被谁触发)
触发时机:
- 定期监控(每隔 10% 完成率触发一次)
- 异常检测(失败率异常、Token 消耗异常)
- 用户显式调用:"调整粒度"Dependencies (前置依赖)
必须依赖:
- harness-generate-feature-list(功能清单生成)Token 消耗分析
单次调整:
- 监控执行进度: ~400 tokens
- 检测粒度不合理: ~400 tokens
- 触发粒度调整: ~500 tokens
- 更新功能清单: ~600 tokens
- 记录调整历史: ~100 tokens
- 输出调整报告: ~300 tokens
总计: ~2300 tokens
性能对比:
- 调整前 Token 消耗: 可能异常高(如 50000+ tokens)
- 调整后 Token 消耗: 优化至正常水平(如 20000 tokens)
- Token 优化: 降低 60%
总体优化:
- 执行时间优化: 30-50%
- Token 消耗优化: 60%
- 失败率降低: 40%Examples
示例 1: 执行时间过长 → 拆分
输入:
监控数据:
- 完成率: 30%
- FEAT-001: 用户管理
- 预估时间: 8 小时
- 实际执行时间: 18 小时
- 偏差率: 125%(触发拆分)
处理:
1. 检测到执行时间过长(18h vs 8h)
2. 判定: 粒度过粗(COARSE),需要拆分
3. 拆分 FEAT-001:
- FEAT-001-1: 用户注册(MEDIUM, 3h)
- FEAT-001-2: 用户登录(MEDIUM, 3h)
- FEAT-001-3: 用户资料管理(MEDIUM, 2h)
4. 更新功能清单
5. 输出调整报告
输出:
🔧 粒度调整报告
调整类型: SPLIT(拆分)
调整原因:
- 检测到的问题: 执行时间过长
- 偏差率: 125%(实际 18h vs 预估 8h)
原功能项:
- FEAT-001: 用户管理(8h)
新功能项:
- FEAT-001-1: 用户注册(3h)
- FEAT-001-2: 用户登录(3h)
- FEAT-001-3: 用户资料管理(2h)
性能对比:
- 原预估时间: 8 小时
- 新预估时间: 8 小时(总和)
- 预期执行时间: 9 小时(优化后)
下一步: 继续执行,监控拆分后的效果示例 2: 执行时间过短 → 合并
输入:
监控数据:
- 完成率: 40%
- 连续 5 个功能项执行时间过短:
- FEAT-010: 1h(预估 3h)
- FEAT-011: 0.8h(预估 2h)
- FEAT-012: 0.9h(预估 2h)
- FEAT-013: 1.1h(预估 3h)
- FEAT-014: 0.7h(预估 2h)
处理:
1. 检测到执行时间过短(连续 5 个功能项)
2. 判定: 粒度过细(FINE),需要合并
3. 合并 FEAT-010 ~ FEAT-014:
- FEAT-010: 用户管理增强(MEDIUM, 4h,包含原 5 个功能项)
4. 更新功能清单
5. 输出调整报告
输出:
🔧 粒度调整报告
调整类型: MERGE(合并)
调整原因:
- 检测到的问题: 执行时间过短(连续 5 个功能项)
- 平均偏差率: -60%(实际时间仅为预估的 40%)
原功能项:
- FEAT-010: 用户头像上传(1h)
- FEAT-011: 用户昵称修改(0.8h)
- FEAT-012: 用户简介编辑(0.9h)
- FEAT-013: 用户密码修改(1.1h)
- FEAT-014: 用户邮箱修改(0.7h)
新功能项:
- FEAT-010: 用户管理增强(4h,包含以上 5 个功能)
性能对比:
- 原预估时间: 12 小时(总和)
- 新预估时间: 4 小时(合并后)
- 时间优化: 66%
下一步: 继续执行,监控合并后的效果示例 3: 失败率异常 → 拆分
输入:
监控数据:
- 完成率: 50%
- 失败率: 35%(异常)
- 连续失败功能项: FEAT-020, FEAT-021, FEAT-022
处理:
1. 检测到失败率异常(35% > 30%)
2. 判定: 功能项过于复杂,需要拆分
3. 拆分失败的功能项:
- FEAT-020: 支付集成(COMPLEX, 10h)→ 拆分为 3 个功能项
- FEAT-020-1: 支付接口对接(MEDIUM, 4h)
- FEAT-020-2: 支付状态同步(MEDIUM, 3h)
- FEAT-020-3: 支付异常处理(MEDIUM, 3h)
4. 更新功能清单
5. 输出调整报告
输出:
🔧 粒度调整报告
调整类型: SPLIT(拆分)
调整原因:
- 检测到的问题: 失败率异常
- 失败率: 35%(阈值 30%)
- 连续失败功能项: 3 个
原功能项:
- FEAT-020: 支付集成(COMPLEX, 10h)
新功能项:
- FEAT-020-1: 支付接口对接(MEDIUM, 4h)
- FEAT-020-2: 支付状态同步(MEDIUM, 3h)
- FEAT-020-3: 支付异常处理(MEDIUM, 3h)
性能对比:
- 原预估时间: 10 小时
- 新预估时间: 10 小时(总和)
- 预期失败率: < 10%(优化后)
下一步: 继续执行,监控拆分后的失败率Implementation Notes
关键设计决策
- 定期监控机制
- 每隔 10% 完成率触发一次监控
- 避免频繁调整(影响执行效率)
- 确保及时发现问题(不过度延迟)
- 多维度检测
- 执行时间维度(偏差率 > 50%)
- 失败率维度(失败率 > 30%)
- Token 消耗维度(消耗 > 预算 150%)
- 双向调整能力
- 拆分(FINE 化):降低复杂度、降低失败率
- 合并(COARSE 化):提高效率、降低切换成本
- 自动回滚机制
- 如果调整后效果不佳(如失败率上升)
- 自动回滚到调整前的粒度
- 记录到 EVENT_LOG.md(ADJUST_ROLLBACK)
性能优化
Token 优化:
- 增量式监控(仅读取必要字段)
- 批量更新(减少重复写入)
- 缓存调整历史(避免重复计算)
执行优化:
- 异步监控(不阻塞主流程)
- 智能触发(仅在异常时调整)
- 快速回滚(调整失败时立即恢复)
总体优化:
- Token 消耗降低 60%
- 执行时间优化 30-50%
- 失败率降低 40%Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

