Netflow
Netflow is Paracord's runtime view. It streams live from your node and shows work as it executes — as a goal tree rather than a log.
A goal tree shows structure. You can see which goal led to which, where execution paused, and where it stopped, without reconstructing any of it from timestamps.
Netflow has two tabs, selected in the left panel.
Goal Trees
The left panel lists the goal trees your node has streamed, newest first. Each entry shows the goal that started the run, the actor executing it, when it started, and its overall state. Filter the list by state, or search by actor.
Select a run to open its tree.
Reading a tree
The tree starts at the root goal — the piece of work the run was asked to do. Beneath it sit the subgoals it decomposed into, in execution order, each with its own state:
| State | Meaning |
|---|---|
| Planned | scheduled, not yet started |
| Active | currently executing |
| Complete | finished successfully |
| Failed | stopped with an error |
| Canceled / Dead end | abandoned before completion |
| Not run | never reached, because execution stopped earlier |
Only failures are filled in colour. Everything else is marked with a thin rail and a small state chip, so a failure is the one thing that stands out in a large tree.
"Not run" is worth its own mention: it means the goal was part of the plan but execution never got there. That is different from a goal that ran and was skipped, and the tree distinguishes the two.
Each goal shows the arguments it introduces. Arguments carried down unchanged from the parent goal are omitted, so a row shows what that step added — often the single value that explains what happened.
Delegation between actors
When an actor needs a skill it does not provide, it issues a skill request. The paranet matches a fulfiller, a new conversation opens between them, and the result returns to the original actor, which keeps its own goal throughout.
Netflow draws this as a nested band around everything the fulfilling actor runs:
DayView Failed
├─ AskBoundary Failed
│ ╭─ disclosure ─────────────────── 233ms 📒 ─╮
│ │ Ask Complete │
│ │ ├─ CheckGrant decision: no_grant Complete │
│ │ └─ Route Complete │
│ ╰──────────────────────────────────────────────╯
└─ RenderDay Not run
Nesting depth is delegation depth. The band header names the actor, shows how long its conversation took, and links to that conversation in the Ledger.
Inspecting a goal
Select any goal to open the inspector on the right. It shows:
- Why it failed — for a failed goal, the reason reported by the actor that raised it
- Context — the actor running the goal, and how many subgoals it has
- Conversation — a link to the Ledger record, with elapsed time and message count
- Arguments — every argument in full, including those the tree row omits
- Raw — the unparsed goal string, for when you need exactly what the runtime emitted
Elapsed time is measured across a conversation, from its first message to its last. It covers every goal in that conversation rather than the selected goal alone, and it becomes available once the conversation is recorded in the Ledger.
Close the inspector to give the tree the full width.
Logs
The Logs tab streams raw output from your actors: level, timestamp, actor, and message. Multi-line entries such as stack traces are collapsed to two lines and expand on click.
Filter by actor and by level in the left panel. Auto-scroll keeps the newest line in view; turn it off to read back through the stream without being pulled to the bottom.
Logs are scoped by actor, not by run. The log stream carries no run identifier, so a filtered view shows everything that actor emitted in the window, not only the lines belonging to the goal tree you were looking at. Use it to get the detail behind a failure — the exception, the stack trace — after the tree has told you where to look.
A typical investigation
- A run shows Failed in the list. Open it.
- The tree shows which goal failed, and which of its children completed. The deepest failure is the one to read.
- Select that goal. The inspector names the reason and the arguments it ran with.
- If you need more than the reason, switch to Logs, filter to that actor, and read around the time of the failure.
- Follow the conversation link to the Ledger for the full message exchange.
Scope
Netflow shows what your node is streaming now. It is a live view, not a history: closing the page does not preserve it, and a run that finished before you opened the tab may not appear.
For history, use the Ledger — every conversation Netflow shows is recorded there permanently, and goals link to it directly.