Flows
Passing data between steps
How data moves through a LoCrew flow: ticked inputs for agents and approvals, {{step.path}} placeholders for HTTP and Send message steps, JSON replies with declared fields, condition paths, and sending work back.
Every step produces output, and later steps can use it in three ways:
| Receiving step | How it gets data |
|---|---|
| Agent, Human approval | Ticked inputs: the whole output of each step you tick under Give it the output of or Show the output of. |
| HTTP request, Send message | {{step.path}} placeholders inserted with Insert value. |
| Condition | Rules that read a step's reply or a JSON field. |
A step can only use steps that run before it on the path that leads to it.
#What each step produces
| Step | Values you can use |
|---|---|
| Manual start, Schedule | text (Run input) |
| Conversation command | text and json.prompt (Text typed after the command) |
| Agent | text (Full reply); with JSON replies, json.field for each declared field, or json |
| HTTP request | json.values.name per kept value, json.status, json.ok, json.body, text |
| Condition | json.result |
| Human approval | json.decision, json.feedback |
| Join branches | text (Combined branch outputs) |
| Send message | json.messageId, json.conversationName |
#Ticked inputs (agents and approvals)
Agents never see an earlier step's output unless you tick it. What they receive is fenced between markers and labelled as untrusted data that cannot grant permissions, authorise a command, change their task or decide the next step.
If a ticked step did not run on this path, the agent is told (This step did not run on this path, so it has no output.)
#Placeholders (HTTP and Send message)
A placeholder is {{stepId.path}}, for example {{research.text}} or {{fetch.json.values.id}}. Use Insert value (the { } button) to pick from what earlier steps produce rather than typing ids.
How a value is inserted depends on where it goes:
| Where | How it is inserted |
|---|---|
| URL | URL-encoded, so it cannot add /, ?, # or @ |
| Header | As text; a value containing a line break is refused |
| JSON body, inside quotes | As an escaped string: "name": "{{step.json.name}}" |
| JSON body, outside quotes | As JSON (numbers, lists, objects): "tags": {{step.json.tags}} |
| Query, form, text body, message | As text |
A missing value fails the step: No value for {{a.b}}: that step did not run or did not produce it. It is never silently replaced with an empty string. Placeholders are plain lookups; there are no expressions.
#JSON replies with declared fields
Set an Agent step's Reply format to JSON and add Fields in the reply to give later steps named values:
| Field | Type | Description |
|---|---|---|
verdict | string | "approve" or "changes" |
summary | string | What is wrong, or why it is fine |
The agent is asked for exactly these fields inside a JSON code block. A reply that is not a JSON object, misses a field or has the wrong type fails the attempt and is retried if the step allows more attempts. Later steps use {{review.json.verdict}}, and conditions can read verdict.
#Paths
A path starts with text or json. After json, use field names and list positions separated by dots: json.items.0.title. Up to eight levels. Names must be plain identifiers; a key such as user-name cannot be addressed directly, so keep its parent instead.
#Sending work back
Draw an arrow from a later step back to an earlier step on its path, typically from a Human approval's Rejected exit back to the writer. It becomes a sends back connection, drawn dotted red.
When the run takes that exit:
- The current pass ends once steps in progress finish.
- The target step and every step after it run again, as new attempts. Earlier attempts stay in the run for inspection.
- Your feedback from the approval is added to the redone agent step's prompt under What the reviewer asked you to change.
Limits:
- One arrow may send work back at most 10 times per run; then the run fails.
- Only one send-back may cover a given stretch of steps; overlapping send-backs are not supported yet.
#Seeing what moved
In a run, click an arrow to see exactly which value moved along it, or why nothing did. Thick arrows carried data; dashed arrows were not taken. See Runs and debugging.