{/* This page is auto-generated from the skill's SKILL.md by website/scripts/generate-skill-docs.py. Edit the source SKILL.md, not this page. */}

Dynamic Workflow

代码内计划扇出、对抗验证、波次。

Skill 元数据

来源可选——用 hermes skills install official/autonomous-ai-agents/dynamic-workflow 安装
路径optional-skills/autonomous-ai-agents/dynamic-workflow
版本2.0.0
作者Teknium + Hermes Agent
许可证MIT
平台linux, macos, windows
标签orchestration, fan-out, subagents, delegation, verification, migration, audit, research, campaign
相关 skillhermes-agent、simplify-code

参考:完整 SKILL.md

INFO

以下是 Hermes 在触发该 skill 时加载的完整 skill 定义。这是 agent 在 skill 激活时所看到的指令内容。

Dynamic Workflow Skill

把大扇出工作作为工作流运行:计划、循环和每个中间结果住在脚本和磁盘上,因此父上下文只持已验证结果。覆盖一次性扇出、对抗收敛(尝试 + 反驳者)和整合数十 worker 分支的多波战役。它不使 delegate_task 跨重启持久;那是看板 swarm 的事。

何时使用

当工作单元清晰(一个文件、一个端点、一条记录)且单元数超过一个上下文容量时用它。约 10 单元以下或串行链跳过。对 hermes-agent 自身的重构或修复战役,并行加载 hermes-agent(开发工作流);本 skill 拥有扇出形态。

前置条件

  • delegate_task 可用,且 delegation.max_concurrent_children 为波次调好(默认 10;运行时会以明确错误拒绝更大的 tasks=[],而非排队)。仅当子代理须自己扇出时 delegation.max_spawn_depth >= 2。
  • 从 terminal 环境临时目录解析的可写运行目录($TMPDIR,否则平台临时目录)。绝不字面 /tmp:Termux 无此目录,原生 Windows 会坏。用 <tmp>/wf_<name>_<uuid>/,每次运行唯一,使中断的早先运行不留过期输出被误读。
  • execute_code 用于确定性层(其内仅有 web_search、web_extract、read_file、write_file、search_files、terminal、patch)。

运行方式

两层,按真实能力边界分:

A 层——execute_code 脚本B 层——delegate_task 批
用于确定性工作:抓 N URL、解析 N 文件、跑 N 命令、模板化 N 输出、构建清单、合并输出LLM 判断工作:分类、评审、决定、写、反驳、重构一个单元
持有循环、分支、中间变量无;一次带 tasks=[...] 调用,每任务自己隔离 agent
工具上面沙箱集;它不能调 delegate_task父工具集,原样继承(无逐任务收窄);子代理丢 delegate_task、clarify、memory、send_message、cronjob_manage
并发你的(ThreadPoolExecutor、批)由 delegation.max_concurrent_children 限定
成本仅工具调用每任务一棵完整 agent 树;线性倍增

先在 A 层做确定性部分,仅把不可约 LLM 步骤扇出到 B 层,在父上综合。

后台优先:结果作为消息重入

顶层 delegate_task 立即返回,每任务一个句柄;每个子代理结果完成时作为新消息重入对话。你不能在调用下一行读 out_*.csv。完成不依赖子代理的事,给一行状态,然后结束你的轮次;结果消息落地时逐个处理。普通后续用户消息不取消子代理;/stop、/new 和进程退出会。仅编排者子代理(深度 > 0)发出的委派是同步的。

快速参考

  • 单元必须在无兄弟输出下可答,否则是串行。
  • 清单:<run>/manifest.jsonl 每行一单元;打印计数 + 运行目录。
  • 每子代理:约 8-12 处机械编辑,或约 2-3k 行阅读,或约 50-70 KB 语料;按最大单元定大小。结构化输出进文件,绝不进 summary 字段(负载下截断);用分隔符分行而非 JSON。
  • 父在合并前验证文件数和逐运行新鲜度。
  • "stalled" 子代理通常已完成写入;先查文件系统。
  • 先范围切片(一目录、20 记录),报告 token 成本,再扩展。

流程

一次性扇出

  1. 分解为独立单元。
  2. A 层预遍写清单。
  3. 对照上述限制定块大小;任务数超过 max_concurrent_children 时自己发有界波次。
  4. B 层:一次 delegate_task(tasks=[...]);每任务读自己切片,写 <run>/out_<i>.csv,打印状态词,停。
  5. 结束轮次。结果消息到达时,读文件、验证、合并;横切综合留在父上。

对抗收敛(发现质量工作)

  1. 独立尝试:同一问题给 N 个子代理(2-4),每个 context 用不同框架,每个每行写一条论断到 <run>/attempt_<i>.md。仅定位、可单独证伪的论断("src/routes/users.ts:142 中 POST /api/users/:id/role 无角色检查");反驳者打不破"认证层有问题"。
  2. 在父上合并去重;记每论断的一致数。
  3. 反驳者:第二批奉命用反证打破每论断,发 claim_idx|survives|counter_evidence。给它们来源,不给尝试的推理。
  4. 仅呈交存活者;以一行理由丢弃被驳论断。
  5. 把第 2 轮新论断再喂一轮反驳;某轮无存活者时停,封顶 3 轮。

同一机制保护父免受自己错误前提:当你给子代理一个启发式("facade 上每个 patch 目标都是死接缝"),告诉它们在行动前用证据反驳它。四个小队这样做,把 647 处的 blanket 重写变成 59 个真实修复,保住 130+ 绿测试。

战役形态(数十 worker、数波、数小时)

一次性配方扩展不到全代码库遍历。有效的是:

  1. 先度量(LOC、热点、死符号、oracle 语料),写一份共享 BRIEF.md 加每簇 task_<cluster>.md。每个子代理读两者。舰队漂移时(子代理削 docstring 而非删代码),一次 patch brief 并转向;重派子代理继承修复。
  2. 排他所有权:每 worker 一簇文件,其外编辑在集成时丢弃。单文件内子扇出拥有行范围,在范围内定义 helper,使 diff 干净合并。
  3. 每验证步骤本地 commit,不 push、不 PR、不子代理 rebase。已提交状态是唯一交接;每个战役中途死掉的 worker 恰好丢它未提交的尾部。共享 worktree 索引的 worker 仅用 git commit -- <paths> 提交;裸 commit 会卷走兄弟暂存的 hunk。
  4. 舰队规模 12-16 并发。单一 OAuth grant 上约 40 进程以上,每小时 token 刷新会踩踏成 401 并杀掉波次。其余排队。
  5. 父存活性:报告 completed 但只有几十行日志、或其分支 0 commit 的子代理并未完成;找它的子分支或用前驱的 worktree 和 diff 重派。
  6. 逐轮集成:冻结 base SHA,机械 rebase 干净分支,给每个冲突分支自己的 rebase worker("main 行为胜出,在新结构内重应用"),合并到一个集成分支,在合并树上跑全套测试。每个分支单独通过的碰撞只在这里出现。下轮从集成 commit 分支,使其 worker 互不冲突。
  7. 宣布一轮集成前:每个分支 git rev-list --count <integration>..<branch> 为 0。worker 在你合并其 tip 后继续提交;六个切片跨 168 commit 曾这样被丢下。
  8. 测试运行:机器上恰好一个 runner,在锁文件后,高 -j。多个并行低 -j runner 更慢且互相杀进程组。红文件在同一 venv 的裸 origin/main worktree 重跑;逐文件失败集相同的是既有,非你的。
  9. 末尾 forward-port,而非逐轮:冻结 main SHA,按目录把冲突文件扇出给编辑一个无 commit merge worktree 的 worker,然后父提交一次 merge。CI 从不在冲突 PR 上跑,因此每次 push 前重 merge main。
  10. 实时 QA 自成一波:每表面一小队,隔离 HERMES_HOME,检查前写期望,证据落盘,仅报告,且 PR-vs-main 差异才算回归。绿单元测试漏了那一个 P0(无测试覆盖的已登录代码路径)。
  11. 评审者论断受与子代理论断同等待遇:在"恢复"任何东西前对照 base 做 A/B。几个自信陈述的评审 delta 在 base 上早已如此。
  12. 父重启需 HANDOFF.md:为何死、哪些句柄死、逐分支记分卡(LOC delta、import 冒烟、目标测试)和确切重派文本。先把每个脏 worktree 快照成 wip: commit。

常见陷阱

  • 在 execute_code 脚本内调 delegate_task:不在沙箱里。
  • 与扇出调用同轮综合:文件还不存在。
  • 承诺 delegate_task 后台持久数天:它轮次作用域,随进程死。持久图 = 看板 swarm;一次性 = cronjob。
  • 信 summary 拿内容,或信 status=completed 拿完成。
  • 每个"独立"尝试同框架:它们塌成一个答案。
  • worktree 战役里任何地方 git stash:refs/stash 跨 worktree 共享,另一 worker 会 pop 你的编辑。经临时 worktree 比较。
  • 诚实数字更低时却报命中目标数。说"目前 16%,这是到 30% 的路径",跑下一轮。

验证

  • 清单行数匹配预期单元数。
  • 每个 out_*.csv 存在且本次运行写入。
  • 每个丢弃论断有记录反证;每个呈交论断经反驳。
  • 战役:每分支 0 未合并 commit,集成树全套测试且红对照裸 main 分拣,每表面实时 QA 报告,范围切片在全量运行前报告 token 成本。