用途:esflow 用于编排 Python DAG workflow。先把需求压成最小 DAG 设计:明确输入(必填、可默认、需 pass_check)、产物(最终输出文件与 stdout envelope 暴露的路径或字段)、节点(一个节点只做一件事,命名用业务动作)、边(只表达真实数据依赖,无依赖任务同轮并行)、暂停点(人工确认用 TO_HUMAN,Agent 写产物用 TO_AGENT)、复用点与兜底链。设计不清楚时应先问用户。
核心能力:DAG 拓扑执行,节点 run(ctx) 返回 artifact,下游用 ctx.get("upstream_id") 读取,同轮就绪节点并行;checkpoint 支持暂停与续跑,--out 配合 --from / --resume 复用上游;replicas 静态副本、FanOut 动态扇出、serial 控制同层 fallback 顺序。ctx.gather("base") 只收同 base 副本,self.depth 为拓扑深度,入口节点为 0。
使用方式:安装 pip install esflow;esflow new my_skill;python my_skill/scripts/run.py --out ./runs/a。标准结构含 SKILL.md、scripts/flow.py、scripts/run.py、nodes/(一个文件一个 Node,id 非空唯一)。新 skill 默认用 run_flow_script(...) 写入口,自动获得 --out / --resume 行为;仅在自定义 stdout envelope、复杂清理、二次 TO_AGENT 编排时才手写 Runner.load(...)。TO_AGENT 模式下 run 退出码 2 并提示 node_dir,写完产物后 python3 scripts/run.py --resume ./runs/a 续跑。
限制:run(ctx) 必须返回 artifact;大文件写 self.output_dir,artifact 只存路径和元数据;accept=False 为合法 skip,deliver=False 为产物错误导致流程失败;--from / --from-depth 必须搭配 --out;--resume 仅用于 TO_AGENT 产物写完后续跑并自动继承首跑 node_args;resume 时不要传 parser 默认值构造的完整 node_args,需 resume 的业务参数用可选参数并只在首跑校验;nodes/*.py 顶层只能 import esflow 和标准库;esflow view 与 esflow debug 是交互式 web 服务,无 GUI 或远程 SSH 无端口转发时不适合依赖。具体代码写法见 reference.md(资料未提供其内容)。