Describe the work. Get a workflow that actually runs.

Apex is a compiler for automations. It turns one sentence into a typed execution graph over thousands of real integration actions, checks every step before anything is saved, and runs it so a crash resumes at the exact node.

No model can read 6,758 schemas. So the compiler narrows them.

Each stage is cheap enough to cast wide and strict enough that the expensive model only sees what matters.

  1. 6,758
    actions and triggers
    from 707 integrations
  2. 100+
    integrations
    kept by embedding search
  3. ≤ 16
    integrations
    picked by the router
  4. ≤ 48
    action schemas
    given to the graph author
  5. 1
    validated graph
    or a clear failure

The hard part is not trusting the model

It can only use what exists

Every node type comes from a closed catalog. A model that invents an action doesn't get a broken step, it gets a validation error naming the type.

Data wiring is type-checked

A reference like {{outputs.fetch.items}} is checked against the outputs that upstream node declares. A field that doesn't exist never reaches a run.

Mistakes go back to the model

Validator errors are returned verbatim for up to two repair rounds. Large graphs are written section by section, so an error in section 5 doesn't rewrite sections 1 to 4.

It never fakes success

There's no fallback graph and no mock output. If a stage can't produce something valid, the compile fails and says why.

Kill the worker. The run keeps its place.

Every node is its own Temporal activity, and independent branches run in parallel. When a worker dies, completed nodes are read from workflow history instead of being called again, so a restart doesn't re-send the email or re-charge the card.

How a run recovers after a worker crash
fetch_chargesCompleted
summarizeCompleted
post_to_slackWorker killed
add_sheet_rowWaiting

Try to break it.

The compiler is live. No account needed: describe something messy and watch every stage work.

Open the playground