返回 Skill 列表
extension
分类: 开发与工程无需 API Key

Workflow

使用可复用组件构建自动化流水线,实现节点间数据流与状态管理

person作者: ivangdavilahubclawhub

Architecture

Workflows live in workflows/ with components and flows:

workflows/
├── index.md                 # Inventory with tags
├── components/
│   ├── connections/         # Auth configs
│   ├── nodes/               # Reusable operations
│   └── triggers/            # Event sources
└── flows/{name}/
    ├── flow.md              # Definition
    ├── config.yaml          # Parameters
    ├── run.sh               # Executable
    ├── state/               # Persistent between runs
    └── logs/

Quick Reference

| Topic | File | |-------|------| | Directory layout, naming, formats | structure.md | | Data passing between nodes | data-flow.md | | Cursor, seen set, checkpoint | state.md | | Retry, rollback, idempotency | errors.md | | Connections, nodes, triggers | components.md | | Create, test, update, archive | lifecycle.md |

Requirements

  • jq — JSON processing
  • yq — YAML config parsing
  • curl — HTTP requests
  • flock — Lock files to prevent concurrent runs
  • Secrets in macOS Keychain (security find-generic-password)

Data Storage

  • Location: workflows/ in workspace root
  • State: flows/{name}/state/ — cursor.json, seen.json, checkpoint.json
  • Logs: flows/{name}/logs/ — JSONL per run
  • Data: flows/{name}/data/ — intermediate files between nodes

Core Rules

1. Data Flow Pattern

Each node writes output to data/{NN}-{name}.json. Next node reads it.

curl ... > data/01-fetch.json
jq '...' data/01-fetch.json > data/02-filter.json

Breaking this pattern = nodes can't communicate.

2. Error Declaration

Every node in flow.md MUST declare:

  • On error: retry(N) | fail | continue | alert
  • On empty: skip | continue | fail

Undefined behavior = unpredictable workflow.

3. Lock Files

Prevent concurrent runs:

LOCKFILE="/tmp/workflow-${NAME}.lock"
exec 200>"$LOCKFILE"
flock -n 200 || exit 0

4. State Files

| File | Purpose | |------|---------| | cursor.json | "Where did I leave off?" | | seen.json | "What have I processed?" | | checkpoint.json | "Multi-step recovery" |

5. Component Reuse

Before creating new connections/nodes/triggers:

ls workflows/components/connections/
ls workflows/components/nodes/

Use existing. Update "Workflows Using This" when adding.


Related: For LLM-driven multi-phase processes, see the cycle skill.