Skip to main content
Apragya AI
Docs · AI & Automation

Pipeline basics: nodes, edges, runs

What a pipeline is, the node types you can drop on the canvas, how runs flow through, and how to debug a stuck run.

A pipeline is the orchestration layer above individual agents. Where an agent does one thing (review the invoice, score the lead, draft the reply), a pipeline strings them together with control flow - run agent A, branch on its output, fan out to three parallel sub-runs, gather the results, ask a human, post to the ERP. The Workflow Canvas is the visual editor you build pipelines in.

Open the Workflow Canvas

  • Sidebar > Suites > Solution > Workflow Canvas
  • New Pipeline starts from blank; New from Template starts from one of the bundled industry pipelines (see the Industry Pipelines guide)
  • Pipelines are scoped to your tenant; bindings, triggers, and runs all live inside the tenant boundary

Node types

  • agent_call - invokes a specific agent with mapped inputs; the agent's output becomes available downstream
  • condition - if/else split based on a JSON-path expression against the run state
  • switch - multi-way branch based on a value; more readable than chained conditions
  • loop - for-each over a list, or while a condition holds; configurable max iterations as a guardrail
  • parallel - fan out to N parallel child nodes, gather all results before continuing (fan-in)
  • human_review - pause for a HITL approval (see the HITL Checkpoints guide)
  • http_call - hit an external HTTP endpoint with mapped headers + body
  • db_query - read/write the tenant's data via the platform's typed query API
  • email - send a templated email (uses the Email Templates pipeline you built in CRM)
  • rule - a no-LLM deterministic transform, useful for cheap normalisation steps

Edges: data flow + control flow

Edges between nodes carry both data (the upstream node's output becomes the downstream node's input) and control (which node runs next). The default mapping is pass-through; tighten it on the edge panel with explicit field mappings when you want to be precise.

Runs

  • Trigger a run via: API push, scheduled cron, app event binding (most common), or manual button on the Canvas
  • Each run writes a PipelineRun row and a PipelineStepRun row per node executed
  • Status transitions: pending -> running -> [completed | failed | paused_for_review | cancelled]
  • Open the Runs tab to see each run's full trace - inputs, outputs, durations, costs per node
If a run looks stuck, check the Runs tab > Live View. The platform separates true "running" from "paused for HITL" - a paused run isn't stuck, it's waiting for a human. Properly stuck runs (worker crashed, infinite loop, external API hanging) are caught by the per-step timeout and the wall-clock cap on the pipeline.

Debugging

  • Click any step in a failed run to see its inputs, outputs, error, and stack trace
  • Replay the step in isolation via the Replay button - re-runs that one node with the same inputs
  • Branch into a debug pipeline that copies your run state and lets you tweak + re-run
  • Set breakpoints on the canvas: nodes can be marked "pause here on next run" for inspection

Need help building this? Talk to a real engineer

← All docs
Ask Vippy anything