The loop above is an SVG, 12 seconds long. There is also a
full-screen animated version, made with the diagram-motion skill’s
motion canvas, and a video fallback:
A person or an agent asks. This happens in the UI, or through wfx from a terminal or from
Claude or Codex via the agent skills.
wfx calls wfx-server over its REST and SSE API (internal/api). The CLI resolves the
host from --url, then $WFX_API, then the current context, then http://127.0.0.1:8090.
The engine runs the steps (internal/engine). It runs one toolnexus agent per agent step,
or a shell node for run:, ordered as a list or a graph (internal/planner), with state in
SQLite or Postgres (internal/store).
Each step resolves its provider from the catalog (internal/catalog, loaded from
registries.json): an http model, a cli agent, or an acp agent through
internal/devinadapter (devin, opencode, codex). A step can go to another machine through a
worker.
The classifier decides where a question has a typed answer (internal/judge): decide:
before an agent, judge: as a step, or wfx judge in a shell step. Uncertain verdicts go to a
person.
A human gate pauses the run (requires_approval, needs_input, ask_human) until
someone runs wfx approve, wfx reject or wfx answer. internal/notify tells them.
Git keeps the receipt. Templates publish their work as a branch and a PR. A change to the
workflow itself becomes a proposal (internal/proposal). A
finished workflow ships as a bundle (internal/bundle) with wfx publish to a host or to a git
remote.