Skip to main content

Reading a Flow

Understanding what an agent flow is doing while it runs, or after it's finished. Essential for debugging multi-agent work.

Viewing a flow run​

When you run a flow, the UI opens a dedicated view (described below) — DAG with status icons per node, click any node for input/output/trace.

The flow view​

Inside the desktop:

┌────────────────────────────────────────────────────┐
│ flow: plan-execute-review · run abc123 │
├────────────────────────────────────────────────────┤
│ │
│ ┌──plan──┐ ┌─execute─┐ ┌─review─┐ │
│ │ ✓ │─────▶│ ▶ │───▶│ │ │
│ └────────┘ └─────────┘ └────────┘ │
│ 12s 45s --- │
│ │
│ current: execute │
│ elapsed: 57s │
└────────────────────────────────────────────────────┘

Each node shows:

  • Status icon — ✓ done, ▶ running, ⏸ waiting, ✗ failed.
  • Timing — how long this node took (or has been running).
  • Connecting edges — arrows showing data flow.

Click a node for its full detail.

Node detail​

Clicking a node opens:

  • Agent — which agent is running this stage.
  • Input — the data this stage received (JSON).
  • Output — the data this stage produced (JSON), once complete.
  • Trace — link to the full phase trace for this stage's run.
  • Duration — start and end times.
  • Child runs — if this stage spawned sub-agents, their tree.

Understanding flow structure​

The flow definition lives in YAML (see Agent Flows). Use codebolt flow show <flow-name> (CLI) or Flows panel → Definition (desktop) to see the YAML — useful for understanding "why did the flow route to node X?" by checking the edge conditions.

Common "why is my flow doing X" questions​

"Why is it stuck at this node?"​

The node is waiting on something. Check:

  • Is its agent's run actually running? (It could be queued if concurrency limits are hit.)
  • Is it waiting on a child agent that's hung?
  • Is it waiting on a human approval (human node type)?

The trace of the current node shows its last activity. If the last activity is old, something's stuck.

"Why did it take the reject path?"​

Conditional edges fire when their when condition is true. Check:

  • The output of the previous node. Is it what you expected?
  • The edge's condition in the flow YAML. Does it match the output shape?

"Why are there so many iterations?"​

Flows with feedback loops (review → execute → review) can iterate. Check:

  • max_iterations on the back-edge. Is it too high?
  • The reviewer is rejecting more than expected — investigate why.

"Why did a node use a different model than I expected?"​

Node-level model override > agent default > flow default > project default. Check the flow YAML for a model: override on the node.

Replay​

Any flow run can be replayed:

codebolt flow replay <run_id>

Re-runs the flow with the same inputs. Useful for:

  • Testing a change to the flow definition against a known input.
  • Reproducing a failure deterministically (within the limits of LLM non-determinism).

Exporting a flow run​

codebolt flow export <run_id> --format json > flow-run.json
codebolt flow export <run_id> --format dot | dot -Tpng > flow-run.png

JSON for programmatic analysis; DOT for rendering the graph with Graphviz.

See also​