Tooling
Workflow builder
Assemble an Arcturn workflow visually — stages, parallel branches, model tags and roles — and take away the markdown file the CLI runs. Everything happens in your browser; nothing is uploaded or stored.
Frontmatter
The keys between the --- fences. Only the name is required; everything left empty stays out of the file.
Preamble — prose before the first stage, kept verbatim
Pipeline
Placeholders: {{input}} is the text the workflow was invoked with, {{prev}} the previous stage's output, {{journal}} the run journal so far — the last two have no value in stage 1.
- Stage 1
- Stage 2
Markdown
---
name: my-workflow
---
1. @architect Plan the change described here, as a numbered brief: {{input}}
2. @developer Implement the plan below and report what you ran. Plan: {{prev}}
Valid — the CLI's parser accepts this file.
Import
Paste a workflow file or pick one from disk. Importing replaces what is in the editor; a file the parser rejects changes nothing.
The format
What the file means
A workflow is one markdown file: optional frontmatter, optional prose, then a numbered list where every line is a step. The engine's parser is strict on purpose — a typo fails loudly instead of silently reaching a model.
Stages, branches, prefixes
Stages are numbered consecutively from 1, one physical line each. Indented - bullets under a stage run as parallel branches; the parent line is then empty or a label ending in :. A step line reads [model-tag] @role prompt, in that order, both prefixes optional — a tag may name a tier (tier:judgment) or a concrete model id.
Three placeholders exist: {{input}} is the text the workflow was invoked with, {{prev}} the previous stage's output, and {{journal}} the run journal so far. The last two have no value in stage 1, and anything else in double braces is a parse error, not passed-through text.
---
name: review-and-fix
description: Reproduce, fix, then verify from two angles at once.
budgetUsd: 10
---
Prose before the first numbered line is documentation — the parser skips it.
1. @qa Reproduce the bug and write a failing test. Report: {{input}}
2. @developer Fix the code until that test passes. Repro: {{prev}}
3. Verify in parallel:
- [tier:fast] Run the full suite over the fix: {{prev}}
- @qa-adversarial Try to break the fix from a new angle: {{prev}}Frontmatter keys
name- Required. Lowercased and stripped to letters, digits and "-" — the builder warns when what you typed is not what installs.
description- One free-text line. Only the first colon on the line separates key from value.
continueOnError- Exactly "true" or "false". When true, a failed stage does not stop the run.
stepTimeoutMs- Wall clock per step, a whole number of milliseconds above zero.
maxStepRetries- Transient-failure retries per step. A whole number; 0 disables retry.
budgetUsd- Run-level spend ceiling in US dollars. Decimals are legal; 0 disables it.
budgetTokens- Run-level token ceiling. A whole number of tokens; 0 disables it.
| Key | Rule |
|---|---|
name | Required. Lowercased and stripped to letters, digits and "-" — the builder warns when what you typed is not what installs. |
description | One free-text line. Only the first colon on the line separates key from value. |
continueOnError | Exactly "true" or "false". When true, a failed stage does not stop the run. |
stepTimeoutMs | Wall clock per step, a whole number of milliseconds above zero. |
maxStepRetries | Transient-failure retries per step. A whole number; 0 disables retry. |
budgetUsd | Run-level spend ceiling in US dollars. Decimals are legal; 0 disables it. |
budgetTokens | Run-level token ceiling. A whole number of tokens; 0 disables it. |