Install
openclaw skills install @thcjp/workflow-orchestrator-freeopenclaw skills install @thcjp/workflow-orchestrator-free构建可复用的自动化流水线。节点间数据流+状态管理+并发锁,让流水线可中断、可恢复、可复用。
工作流 = 可复用组件 + 流程定义 + 状态管理。所有节点输出持久化到磁盘,支持中断恢复与并发控制。
workflows/
├── index.md # 流水线清单(含标签)
├── components/
│ ├── connections/ # 认证配置(复用)
│ ├── nodes/ # 可复用操作(复用)
│ └── triggers/ # 事件源(复用)
└── flows/{name}/
├── flow.md # 流程定义
├── config.yaml # 参数配置
├── run.sh # 可执行脚本
├── state/ # 持久化状态
│ ├── cursor.json # 游标:上次执行到哪
│ ├── seen.json # 已处理:避免重复
│ └── checkpoint.json # 检查点:多步恢复
├── data/ # 节点间数据流
│ ├── 01-fetch.json
│ ├── 02-filter.json
│ └── 03-transform.json
└── logs/ # 运行日志(JSONL)
# 1. 创建工作流目录结构
mkdir -p workflows/components/{connections,nodes,triggers}
mkdir -p workflows/flows/my-first-flow/{state,data,logs}
# 2. 创建流程定义
cat > workflows/flows/my-first-flow/flow.md << 'EOF'
# My First Flow
**结果处理**: 执行完成后,查看输出结果确认操作状态。成功时输出包含处理摘要和结果数据;失败时根据错误信息排查问题,查阅错误处理章节获取恢复步骤。
## Nodes
1. fetch: 获取数据 (on error: retry(3))
2. filter: 过滤数据 (on empty: skip)
3. transform: 转换格式 (on error: fail)
4. output: 输出结果
EOF
# 3. 创建可执行脚本
cat > workflows/flows/my-first-flow/run.sh << 'EOF'
#!/bin/bash
set -euo pipefail
LOCKFILE="/tmp/workflow-my-first-flow.lock"
exec 200>"$LOCKFILE"
flock -n 200 || { echo "另一个实例正在运行"; exit 0; }
# 节点1:获取数据
curl -s "https://api.example.com/data" > data/01-fetch.json
# 节点2:过滤数据
jq '[.[] | select(.status=="active")]' data/01-fetch.json > data/02-filter.json
# 节点3:转换格式
jq '[.[] | {id, name, status}]' data/02-filter.json > data/03-transform.json
# 节点4:输出结果
cp data/03-transform.json output.json
EOF
chmod +x workflows/flows/my-first-flow/run.sh
# 4. 执行工作流
cd workflows/flows/my-first-flow && ./run.sh
| 工具 | 用途 | 必需 |
|---|---|---|
| jq | JSON处理 | 是 |
| yq | YAML配置解析 | 是 |
| curl | HTTP请求 | 是 |
| flock | 锁文件防并发 | 是(Linux/macOS) |
每个节点将输出写入data/{NN}-{name}.json,下一节点读取它。
# 节点1:获取数据
curl -s "$API_URL" > data/01-fetch.json
# 节点2:过滤数据(读取节点1的输出)
jq '[.[] | select(.active==true)]' data/01-fetch.json > data/02-filter.json
# 节点3:转换格式(读取节点2的输出)
jq '[.[] | {id: .id, name: .name}]' data/02-filter.json > data/03-transform.json
核心规则:打破此模式 = 节点无法通信。
输入: 用户提供数据流模式所需的指令和必要参数。 处理: 按照skill规范执行数据流模式操作,遵循单一意图原则。 输出: 返回数据流模式的执行结果,包含操作状态和输出数据。
input_params参数,支持创建/查询/导出操作每个节点在flow.md中必须声明错误处理策略:
| 错误类型 | 处理选项 | 说明 |
|---|---|---|
| On error | retry(N) | 重试N次后失败 |
| On error | fail | 立即失败 |
| On error | continue | 继续下一节点 |
| On error | alert | 告警并暂停 |
| On empty | skip | 跳过后续节点 |
| On empty | continue | 继续处理 |
| On empty | fail | 失败 |
未声明 = 不可预测的工作流。
输入: 用户提供错误声明所需的指令和必要参数。 处理: 按照skill规范执行错误声明操作,遵循单一意图原则。 输出: 返回错误声明的执行结果,包含操作状态和输出数据。
LOCKFILE="/tmp/workflow-${NAME}.lock"
exec 200>"$LOCKFILE"
flock -n 200 || { echo "另一个实例正在运行"; exit 0; }
防止同一工作流被并发执行,避免状态冲突。
输入: 用户提供锁文件(防并发)所需的指令和必要参数。 处理: 按照skill规范执行锁文件(防并发)操作,遵循单一意图原则。 输出: 返回锁文件(防并发)的执行结果,包含操作状态和输出数据。
input_params参数,支持创建/查询/导出操作| 文件 | 用途 | 示例 |
|---|---|---|
| cursor.json | "上次执行到哪?" | {"last_id": 12345} |
| seen.json | "已处理过什么?" | {"ids": [1,2,3]} |
| checkpoint.json | "多步恢复点" | {"phase": "transform", "step": 2} |
# 读取游标继续处理
LAST_ID=$(jq '.last_id' state/cursor.json)
curl -s "$API_URL?since=$LAST_ID" > data/01-fetch.json
# 更新游标
NEW_ID=$(jq '.[-1].id' data/01-fetch.json)
jq --arg id "$NEW_ID" '.last_id = ($id|tonumber)' state/cursor.json > state/cursor.json.tmp
mv state/cursor.json.tmp state/cursor.json
输入: 用户提供状态文件所需的指令和必要参数。 处理: 按照skill规范执行状态文件操作,遵循单一意图原则。 输出: 返回状态文件的执行结果,包含操作状态和输出数据。
创建新连接/节点/触发器前,先检查已有组件:
# 列出已有组件
ls workflows/components/connections/
ls workflows/components/nodes/
ls workflows/components/triggers/
# 复用已有连接(而非新建)
source workflows/components/connections/api-auth.sh
输入: 用户提供组件复用所需的指令和必要参数。 处理: 按照skill规范执行组件复用操作,遵循单一意图原则。 输出: 返回组件复用的执行结果,包含操作状态和输出数据。 能力覆盖范围:本skill的核心能力覆盖以下场景关键词:构建可复用的自动、化流水线、支持节点间数据流、状态管理与并发锁、工作流编排器免费、版为自动化开发者、提供轻量级的流水、线编排能力、聚焦可复用组件、节点间数据流与状、态管理、文件即状态、的极简理念、所有节点输出与状、态持久化到磁盘、支持中断恢复、Use、when、需要提升效率、自动化流程、批量处理、工作流优化时使用、不适用于需要人工、创意判断的任务、适用于独立开发者、企业团队和自动化、工作流场景等。
input_params参数,支持创建/查询/导出操作痛点:ETL流程需要定时执行,中断后要能从断点恢复,避免重复处理。
对策:用游标+seen状态管理实现增量ETL。
# ETL工作流
./run.sh
# 中断后恢复(从游标继续)
./run.sh # 自动读取cursor.json,从上次位置继续
效果:中断恢复零数据丢失,避免重复处理。
痛点:每周需要从多个API聚合数据生成报表,手动操作易遗漏。
对策:用工作流编排多数据源聚合。
# 报表生成工作流
# 节点1:获取销售数据
curl -s "$SALES_API" > data/01-sales.json
# 节点2:获取库存数据
curl -s "$INVENTORY_API" > data/02-inventory.json
# 节点3:合并数据
jq -s '[.[][]]' data/01-sales.json data/02-inventory.json > data/03-merged.json
# 节点4:生成报表
jq '[.[] | {date, sales, inventory}]' data/03-merged.json > report.json
痛点:批量处理大量文件,需要断点续传与去重。
对策:用seen状态管理避免重复处理。
# 批处理工作流
for FILE in input/*.csv; do
FILENAME=$(basename "$FILE")
# 检查是否已处理
if jq --arg f "$FILENAME" 'index($f)' state/seen.json | grep -q null; then
# 处理文件
process "$FILE" > "data/$(date +%s)-$FILENAME.json"
# 标记已处理
jq --arg f "$FILENAME" '. += [$f]' state/seen.json > tmp && mv tmp state/seen.json
fi
done
免费版聚焦核心编排能力(目录结构/数据流/状态管理/错误声明/锁文件/组件复用),不限使用次数。高级调度(cron)、复杂重试策略、并行执行、监控告警、分布式执行等高级功能需升级专业版。
能。通过cursor.json(游标)和checkpoint.json(检查点)实现断点恢复。重新执行run.sh会自动从上次位置继续。
用flock锁文件。脚本启动时获取锁,若已被占用则退出。确保同一工作流不会并发执行。
核心支持JSON(jq处理)。也支持CSV、YAML、纯文本,但需要额外工具(如mlr处理CSV)。
将通用连接、节点、触发器放入workflows/components/目录。新工作流通过source或引用方式复用,避免重复定义。
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| LLM API | API | 必需 | 由Agent平台内置LLM提供(免费版路由GPT-4o-mini) |
| jq | JSON处理 | 必需 | 系统包管理器安装 |
| yq | YAML解析 | 必需 | 系统包管理器安装 |
| curl | HTTP工具 | 必需 | 系统自带 |
| flock | 锁文件 | 必需 | Linux自带/macOS需安装 |
本技能基于原始开源作品改进,保留原始版权声明:
本改进作品在原始作品基础上进行了深度差异化改造,包括但不限于:
原始MIT license允许使用、复制、修改和分发,需保留版权声明。本改进作品在保留原始版权声明的基础上添加自有署名,符合MIT license要求。
本免费体验版限制以下高级功能:
解锁全部功能请使用专业版:workflow-orchestrator-pro
### 120秒上手
```bash
| 错误场景 | 原因 | 处理方式 |
|---|---|---|
| 配置错误 | 参数缺失或格式错误 | 检查依赖说明中的配置要求 |
| 运行时错误 | 运行环境不满足 | 确认运行环境符合依赖说明 |
| 网络错误 | 连接超时或不可达 | 执行ping命令测试网络连通性,检查防火墙和代理设置连接后执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令,参考国内替代方案 |