Skip to Content
Flows

Flows

Flows are directed graphs of agent steps, conditional branches, and human approval gates. In the app they are accessed via Automations → Flows (G W).

The Flows UI

Cendriix provides two editors for creating and managing flows:

DAG Editor

The visual DAG editor (/workflows/dag) renders your flow as a directed acyclic graph. Drag to add nodes, connect edges, and configure per-step settings (agent, action, inputs, budget). Each node shows live status during execution.

Linear Composer

The linear composer (/workflows/linear) generates a flow from free-form intent using AI. Describe what you want (“deploy to staging after tests pass”) and the composer proposes a DAG you can accept, edit, or reject.

POST /workflows/compose { "intent": "Deploy to staging after tests pass" } → { "proposal": { "steps": [...], "estimatedCostUsd": 0.45 } }

Once accepted, call POST /workflows/compose/approve to persist it as a real flow.

Anatomy

  • Metadata — slug, display name, description
  • Inputs — typed parameters (ticket key, target env, etc.)
  • Steps — ordered graph of tasks and gates
  • Outputs — values emitted on completion (PR URL, deploy status, cost)

YAML definition

slug: ship-from-ticket name: Ship from ticket description: Ticket → code → PR → CI → preview → approval → merge. inputs: ticket: type: string required: true steps: - id: plan agent: orchestrator action: plan-from-ticket inputs: { ticket: "{{ inputs.ticket }}" } - id: implement agent: dev action: implement-plan inputs: { plan: "{{ steps.plan.output }}" } - id: ci agent: dev action: run-ci inputs: { branch: "{{ steps.implement.output.branch }}" } - id: approve type: approval-gate roles: [maintainer, admin] timeout: 24h - id: merge agent: dev action: merge-pr inputs: { pr: "{{ steps.implement.output.pr }}" } dependsOn: [approve] outputs: pr_url: "{{ steps.implement.output.pr.url }}" status: "{{ steps.merge.output.status }}"

Step types

TypeDescription
agentExecute an agent action
approval-gatePause until a human approves
conditionalBranch on a JSONPath expression
parallelExecute steps concurrently
webhookWait for an external HTTP callback

Templates

The Flow Library ships pre-built templates for common patterns:

GET /workflows/templates POST /workflows/from-template/:idOrSlug

Instantiate a template with { "name": "My Flow", "costCapUsd": 5.00 } to create a new editable flow from a proven pattern.

Live execution stream

Once a flow starts, subscribe to real-time events via SSE:

GET /workflow-runs/:runId/stream

Events: NODE_RUN_STARTED, NODE_RUN_COMPLETED, NODE_RUN_FAILED, RUN_COMPLETED.

Blast-radius overlay

Each node in the DAG can resolve its infrastructure blast radius via the Cortex API. This shows which downstream services would be affected if that step fails — enabling informed approval decisions.

Versioning

Flows use semver. New runs pick the latest published version; in-flight runs keep their pinned version.

cendriix workflow publish --file flow.yaml cendriix workflow versions ship-from-ticket

See also: Agents, Skills, Runs & Orchestration, Policies

Last updated on