Step reference

All eight step types — prompt, check, command, git, notify, publish, preview, loop — with every field.


Eight step types cover the pipeline. Steps run in order within their phase; prompt-driven steps (prompt, publish, preview) accept a per-step agent override.

prompt — hand the agent an instruction

- type: prompt
  prompt: Implement the approved spec.
  persona: engineer        # optional — see Personas
  allowQuestions: true     # optional — may ask you mid-run questions
  agent: { provider: claude, model: opus-4.8, effort: high }

Peractor prepends the task itself — title, description, attachment paths — so write prompts against "the task", not a restatement of it. Long instructions can live in a shared markdown file instead: promptFile: prompt/spec.md. The closing message of a phase's last prompt step becomes the phase summary used in the pull request and commit message.

check — verification that must pass

- { type: check, name: test, run: pnpm test }

Runs a command in the workspace. On failure the output goes back to the preceding prompt's agent with a fix instruction — root-cause fixes, not disabling the check — for up to two attempts; still red, the phase fails and parks at its gate for a human. A check needs a preceding prompt step in its phase (someone has to be there to fix it).

command — a step that just runs

- { type: command, name: install, run: pnpm install }

Same shape as check, different contract: a failure here is your problem, not the agent's — the phase halts rather than asking the agent to fix your infrastructure. Commands run at the workspace root with the run's environment (declared secrets, the git token as GITHUB_TOKEN).

git — VCS actions, where you declare them

- { type: git, action: open-pr, draft: true }
- { type: git, action: ready-pr }
- { type: git, action: merge, method: squash }   # merge | squash | rebase

Branching and committing are automatic — phases commit and push on completion — so git steps are for the VCS side-effects: open-pr (optionally draft), ready-pr to undraft, merge into main. Each runs at its declared position: work so far is committed and pushed first, then the control plane performs the action with its own credentials — so "open a draft PR early, keep working, undraft at the end" behaves exactly as written. See Git & credentials.

notify — tell the team

- type: notify
  to: [slack, telegram]    # slack | discord | telegram | teams | googlechat | mattermost | webhook
  message: Spec is ready for review

Posts your message through the named notifier connectors, threaded under the run's notification thread. Channels come from each connector's own configuration — the step never picks one. Notify steps send at phase end, only when the phase succeeded, and an outage never fails a run.

publish — render and deliver artifacts

- type: publish
  to: [issue, pr, notify]
  prompt: Render each design/ui page to a PNG with a headless browser you install.

A prompt run whose job is to produce reviewable artifacts — screenshots, diagrams, rendered pages — and list them in a manifest. On phase success Peractor delivers them to the tracker issue, the pull request, and/or your notifiers. See Artifacts & previews for the manifest contract.

preview — park the run at a live URL

- type: preview
  name: live preview
  prompt: Serve the built site.

The agent starts a server on the sandbox's reserved port (PERACTOR_PREVIEW_PORT; a static serve is pre-installed), and the run parks with the result reachable at a per-run URL — reviewers click around the real thing, then Continue or Request changes. The sandbox is held open while parked, with a 30-minute ceiling (timeout counts as continue). Use an inline prompt on preview steps.

loop — iterate until it's actually done

- type: prompt
  prompt: Implement the task with tests.
  id: impl                   # loop target
- { type: check, name: tests, run: pnpm test }
- type: loop
  to: impl
  until: checks-pass         # checks-pass | agent-verdict, or both
  max: 4                     # default 3
  onMax: fail                # fail (default) | continue

A bounded back-edge inside the phase: while the condition is unmet, execution jumps back to the target step, threading the failing output into the next attempt. checks-pass means every check and command in the body went green; agent-verdict asks the body's last prompt to declare done — combine them and the loop runs until both hold. At max, fail parks the phase at its gate; continue moves on regardless. Loops can't nest or overlap, and never leave their phase.