The workflow editor
Arrange the agents, steps, inputs, and tool access in a workflow.
A workflow is a small, ordered spine of agents, each with its own steps. This page covers what you're actually authoring in the editor: agent slots, step kinds, inputs, integrations, and how one step refers to another's output.
Agents are the top-level rail
The editor's left rail lists agents, not a flat list of steps. Each agent is its own row with a slot name, a harness, and a model. Add up to 20 agents, and each keeps its own session for the whole run. Expand an agent to see and reorder its steps underneath it.
- Slot is the agent's address: lowercase, starting with a letter
(
triage,fix_agent). Other steps and refs point at an agent by its slot, so renaming one after you've referenced it will break those references. - Harness and model pick which coding agent runs that slot's steps. Switching harness mid-workflow means adding a new agent, not changing an existing one. A single agent's session never changes harness. To swap the model partway through the same agent's steps, use a Switch model step instead (see below).
An agent doesn't have to run alone in the spine. Add one in parallel with another and the two run side by side instead of one after the other. See Parallel agents for how a group like that works, what its lanes can see of each other, and what happens if one of them fails.
Steps
Every step belongs to exactly one agent and runs in that agent's own session, in the order it appears. Each step also has an optional one-line label (the skim register shown on the rail) and an on-fail behavior: stop the run, retry, or continue to the next step.
The step kinds:
| Step | What it does |
|---|---|
| Prompt | Sends a prompt to the agent. Can be armed with a goal (an objective, a turn/time/token budget, and what to do if it stalls) instead of a single turn. |
| Write output | Sends a prompt and captures a named, typed result (a JSON Schema) other steps can reference. Re-asks the agent (default 3 attempts) if the response doesn't match the schema. |
| Switch model | Changes the model for the rest of this agent's steps. Same harness only. |
| Script | Runs a shell command in the workspace. |
| Open PR | Opens a pull request, with an optional templated title/body and base branch. |
| Notify | Posts a message to a Slack channel. Can optionally have an agent fill named fields right before it sends, referenced in the message as {{fields.<name>}}. |
| Branch | Switches on a prior Write output field. A case can continue or end the run; inside a parallel group it ends only that lane. |
| Include | Inserts another workflow's steps at run start, mapping this workflow's values onto the included workflow's inputs. |
An Include step is validated when you save, but its child definition is not copied into the parent. Each run resolves the included workflow's current version when the run starts. Editing the child after you save the parent can therefore change the parent's next run.
Adding a step to an agent that already has a Switch model or a Branch doesn't reorder anything for you. Steps run top to bottom exactly as listed under that agent; drag to reorder them.
A run holds every session it opens in the harness's most permissive mode (Claude's bypass-permissions or Codex's full access) for as long as the run has it. There's no one watching an unattended run to answer a permission prompt, so a step never stalls waiting for one.
Inputs
Inputs are the values a run is started with: named, typed, and either
required or optional with a default. Types are text, number, choice (pick
from a fixed list), and boolean. Reference an input from any step's
templated fields with {{inputs.<name>}}.
References between steps
A Write output step's captured fields become available to every step
that runs after it, anywhere in the workflow (later steps in the same agent,
or steps in a later agent), not to steps before it and not to itself.
Reference one with {{<name>.<field>}}, where <name> is the Write output
step's own name, not the agent's slot.
{{inputs.issue_id}}— theissue_idinput.{{triage_result.severity}}— theseverityfield a Write output step namedtriage_resultcaptured earlier in the run.
The editor's reference popover only suggests inputs and Write output steps that are actually in scope at the step you're editing. An output from a step later in the run, or from the step itself, won't show up, and won't resolve at runtime either.
inputs, steps, and fields are reserved. You can't name a Write output
step any of those. fields is reserved for a Notify step's own agent-filled
fields, below.
Notify's agent-filled fields
A Notify step's message is normally a straight template, but it can also
have an agent fill in named fields right before the notification sends. Pick
which agent slot fills them and declare a flat schema (string, number, or
boolean, each with an optional description). The message then references
any field in that schema as {{fields.<name>}}, the same way it would
reference a Write output step's field. It is scoped to that one Notify step
rather than visible workflow-wide.
Integrations
Integrations are explicit and workflow-wide today. A workflow does not inherit tools from the chat or workspace that launched it. Turning on Issues or Slack grants the run every tool in that provider's namespace; there is no per-tool picker. Integrations require a cloud run.
The agent panel also shows an Integrations row for recording a narrower subset on an individual slot. The definition records that selection, but all agents currently share one run-level gateway token. Because a tool call does not identify its agent slot, gateway enforcement uses the union of every slot's grants.
Turning an integration off on one agent is not an access boundary yet. Grant an integration only if every agent in the workflow may use it.
Where to go next
Running a workflow
Launching a run, watching it live, and taking back control.
Parallel agents
Run independent agents together in isolated cloud lanes.
Scheduling a workflow
Choose a recurrence, location, overlap policy, and missed-run behavior.
Polling triggers
Register a feed workflows can poll for new items, and how deduping works.