Skip to main content
A run is one execution of one test in one real Chromium browser, against one address.

Ways to start one

Chat

Describe a test in the project’s chat. The planner writes the steps, then they execute.

Replay a saved test

Run a procedure. No planning: the recorded steps execute directly.

Schedule

A cron expression on a procedure, dispatched server-side. Run now is available from the same screen.

API or CLI

POST /api/runs/trigger, or testorim run. Both accept a saved procedure or an ad-hoc description.
A pull request in a linked GitHub repository also triggers runs automatically.

What a run does

  1. Checks the workspace’s allowance and concurrency limit.
  2. Creates the run record and starts a liveness heartbeat.
  3. Plans the steps (chat and ad-hoc runs only).
  4. Launches a browser at the base address, applying any environment overrides (alternate base URL, extra headers, cookies, timezone, locale, geolocation), and any saved login state.
  5. Blocks every request the page makes to a private or internal host.
  6. Streams screenshots while the steps execute.
  7. Settles the page, takes a final screenshot, scans for accessibility issues and collects performance metrics.
  8. Writes the report, fires alerts, and comments on the pull request if one is linked.

Overriding the address

Every trigger path accepts a base-URL override, so the same test can point at a PR preview without editing it:
Named environments do the same thing plus headers and cookies, and are the better choice for anything you run repeatedly.

Limits

Cancelling

Cancel from the chat, the run page, or the active-runs toast. Cancelling marks the run and tears down the browser within seconds. The remaining steps are marked skipped and any pending prompt is released. POST /api/runs/batch/{batchId}/cancel cancels every run in a batch at once, which is how you stop a fuzz batch.

When a run dies

A live run pings a heartbeat every 60 seconds. A sweeper runs every 5 minutes and cancels a run whose heartbeat is more than 3 minutes old, or whose age has passed its time limit. A separate safety net kills orphaned browser processes. The heartbeat is what lets a legitimate 30-minute scrape survive while a crashed run is reclaimed quickly.