Graph Compose: API orchestration and AI agent workflows on Temporal (declarative DAGs, JSONata, BYOK)

Hey everyone. I’ve been building Graph Compose, a workflow orchestration platform built entirely on Temporal, and wanted to share it with this community.

What it is

Graph Compose sits in the API orchestration / workflow automation space, adjacent to AWS Step Functions, Airflow, Argo Workflows, n8n, and Zapier, but with a different execution model. Workflows are declarative DAGs defined in JSON (or built visually), not code. The expression language is JSONata, so dynamic data flow between nodes doesn’t require writing Python or TypeScript. Under the hood, every workflow compiles to Temporal workflows + activities, so you inherit durability, retries, and event history without having to learn the Temporal SDK.

Users submit graphs via REST API or the TypeScript SDK (@graph-compose/client). Nodes can be HTTP calls, AI agents, iterators, error boundaries, webhooks, polling, conditionals, and forEach batching. There’s also a visual drag-and-drop builder (React Flow) and an AI assistant that generates workflows from natural language. All three interfaces submit to the same REST API.

Four Temporal patterns that might be interesting

forEach as child workflows. Each item in a batch spawns its own child workflow with a deterministic ID. 1 failure in 10k doesn’t affect the rest. Parent workflow uses signals to track completion and can fan back in with an endForEach node for continuation.

ADK agents as Temporal child workflows (Python). AI agents run as Python child workflows. State persists across turns using signals (receive_message, confirm_action, end_conversation). If the worker crashes between LLM calls, Temporal replays the conversation state from event history. Full writeup coming in a follow-up thread.

Human-in-the-loop via signals. Confirmation nodes set a flag, expose the pending action via query, and block on condition() until the signal arrives. Used for approval gates before agents take expensive actions or before workflows proceed to costly operations.

Error boundaries as subgraph isolation. Try/catch semantics at the workflow level. Protected nodes link via PROTECTS edges in a multigraph. A failed protected node routes to the boundary’s recovery handler (an HTTP call) instead of failing the parent. They nest.

What’s open source

The execution kernel, core types, and runtime are open source (AGPL-3.0):

  • @graph-compose/execution-kernel: graph building, scheduling, validation, state, expression resolution, plugin/handler contracts

  • @graph-compose/core: schemas, shared types, JSONata utilities

  • @graph-compose/runtime: HTTP-only DAG execution on your own Temporal

The kernel is extensible beyond HTTP via a generic handler contract. Adding gRPC, message queues, or custom protocols is a matter of implementing a handler. GitHub: graph compose · GitHub

BYOK Temporal (short version)

If you run Temporal Cloud, you can plug in your address, namespace, and API key, and your workflows execute on your cluster. Implementation is a shared worker pool pattern with per-org task queues. Full architecture writeup coming in a follow-up thread.

Would love feedback on the execution patterns, especially from folks who’ve built similar things. Follow-up threads on the BYOK worker architecture and the ADK agent pattern coming soon.

Docs: Graph Compose Docs: API Workflow Automation Platform | Graph Compose