A step is a contract
Each step is a prompt, a scoped set of agent skills and tools, and a JSON-schema output contract. The engine refuses to advance until the step's output validates, and a failed validation comes back to the agent as a tool result so it corrects itself mid-turn.
Free dry run
wfx dryrun checks whether a workflow would run here with no model call, no clone and no write.
Cost per step, while it runs
Tokens and cost are aggregated per step and written while the step runs, not at the end.
Human approval gates
A workflow stops for a person where it says so: approve, reject, give input, retry or cancel.
Live view
The agent's tool calls stream to the UI over SSE, and every step's state is stored (SQLite or Postgres).
Runs on the agent you already use
The same workflow runs on claude, codex, copilot, opencode or devin, or on your own HTTP model.
Self-host it
One Go binary and your repo, on SQLite and a folder with no configuration. Or Docker Compose: wfx-server plus Postgres.
Git is the registry
wfx publish <file.yaml> --version <semver> --to <git remote> writes the workflow, its skills and MCP declarations into a git repo, tagged and immutable.