revyl test create --from-file my-test.yaml).
Every block uses an explicit type: field plus a step_description: payload. The shape is uniform across all step types, which keeps the schema parser-friendly and round-trippable through the editor and CLI.
Schema
open_app step.
Build Selection
A test’s choice lives undertest.build. See
How a run picks its build for the
model.
- No
branch_idmeans Default branch: runs from the CLI, MCP, and the Revyl GitHub Actions try their Git branch first, then the app’s default branch. YAML never records the Git branch. - YAML takes a branch ID, not a name. Find IDs with
revyl app branch list --app "My App" --json. - On update, omitting
branch_id,build_selection, andpinned_build_idkeeps the saved choice;build_selection: inheritwith no IDs saves Default branch. - A new test from YAML with no choice starts on Default branch.
revyl test pullomitslatest_all_branches; add it back before creating a new test from pulled YAML.
pinned_version key (a version label) is still accepted. A
file with both pinned_version and the fields above must name the same build,
branch, and version.
Example
Block Types
Action and validation blocks use
step_description; code-execution blocks can
use script without a description.
Code-execution timeout_seconds accepts an integer from 1 to 300 and defaults to
60 when omitted. The deadline starts when the script is submitted. YAML/API
configuration is preserved by visual-editor saves. You can also set Timeout
on a script step in the test or reusable module editor; clearing the field
restores the 60-second default. The limit applies to that step, not every use of
the saved script. Only successful stdout is captured into variable_name. Reports display
stdout followed by stderr in one output block, without preserving interleaving.
Failed, timed-out, and empty output leaves an existing
variable unchanged. A worker-enforced timeout reports exit code 124.
Output retrieval errors preserve the script’s exit code. If stdout cannot be
retrieved for a step with variable_name, the step fails and leaves the variable
unchanged, even if the script exited successfully. Without an output variable,
a stdout retrieval error is a warning. Stderr retrieval errors are diagnostic
and do not fail the step or discard captured stdout.
The report’s script details show the timeout recorded for that execution,
separately from elapsed duration. Editing the test later does not change it.
Reports without a captured limit show Timeout: not recorded. CLI report JSON
and report APIs expose it as steps[].type_data.timeout_seconds; CLI run-summary
JSON uses steps[].timeout_seconds and omits it when unavailable.
With fail_fast enabled, a failed code step stops the test before the next step.
Disabling it allows continuation, but the test still fails. Transient provisioning
failures may receive up to three creation attempts. Once submitted, customer code
is never automatically resubmitted. Setup failures report that the script did not
run.
Manual Steps
Themanual block runs framework-level actions. The step_type field picks which one:
Control Flow
Modules
Reusable groups of blocks live in modules. Import one by UUID:revyl module list (CLI) to find module IDs, or revyl module insert <name> to print a ready-to-paste snippet.
Variables
Variables use Mustache-style{{name}} syntax. They can be defined up front, extracted at runtime, or pulled from org-level globals via {{global.name}}.
Validation
The CLI validates YAML before it ever runs:revyl test create --from-file and revyl test push. It checks: required fields, valid block types, valid manual step_type values, platform values, and variable definitions before use.
Authoring tests for AI agents?
revyl schema --format llm prints the full
schema with best practices and step-generation guidance; MCP’s get_schema
tool returns the same schema in the core and full profiles.