Debutly
Docs menu

Configuration

A run reads its settings from debutly.json in the folder you run it in. Flags on the command line override the file for that run, so npx debutly --tier standard runs a bigger rehearsal without editing anything.

{
  "$schema": "https://debutly.dev/schema.json",
  "url": "http://localhost:3000",
  "goal": "Sign up, choose a plan and invite a teammate",
  "icp": "Owners of small marketing agencies, 2 to 15 people",
  "unit": "business",
  "employees": 2,
  "tier": "quick",
  "maxCost": 1
}

The $schema line gives you completion and checking in editors that support JSON Schema, such as VS Code.

Settings

In debutly.json a setting is camelCased; as a flag it is written with dashes: maxCost is --max-cost.

Setting Default What it does
url (required) Where the test copy of your app runs.
goal (required) What the agents try to get done, in a sentence.
icp (required) Who your customers are. Debutly casts people like them.
unit individual individual: one person per customer. business: an owner and teammates per customer. See Teams and invites.
tier quick Run size. quick: 3 customers, owners only. standard: 10 customers with 2 teammates each. deep: 30 with 3 each.
agents from the tier How many customers (people or businesses).
employees from the tier Teammates per business, 0 to 4.
maxCost none Refuse to start a run that could cost more than this, in US dollars.
maxSteps 30 Most actions one agent takes before it stops.
inclusion on off leaves out the screen-reader, low-vision, slow-connection and non-native English agents.
languages none Your customers' first languages as codes, such as ar,en. Agents take them in turn, each with their browser set to their language. An Arabic-first agent switches the site to Arabic when it can, writes its name in Arabic script, and types numbers as an Arabic phone keyboard does (٠٥٠…).
concurrency 3 How many agents use the app at once.
mailpit none Address of a Mailpit mail catcher, which gives each agent an inbox for confirmation links and invites.
emailDomain agents.test The domain of the agents' email addresses.
sandboxOutbox none Your app's sandbox outbox, so failures the test environment caused are listed apart. See Test environments.
app the repo name in GitHub Actions The app's name in the dashboard.
evaluators none After the run, this many skeptical-buyer evaluators judge the pages the agents saw. See What buyers think.
agentTokenCap none Most model tokens one agent may use.
agentMinutes none Most minutes one agent may run.
screenshotDays 7 Days to keep screenshots stored in the database.

Only on the command line:

Flag What it does
--out <folder> Where the report goes. Default: .debutly/runs/<time>.
--store <postgres url> Record the run in a database for the dashboard. DEBUTLY_STORE_URL does the same and keeps the address out of your shell history.
--queue <redis url> Hand the agents to workers (npx debutly worker) instead of running them here.
--browser-state <folder> Keep each agent's signed-in browser (cookies, storage) there when it finishes, so npx debutly hear can open pages behind sign-in. It holds session cookies for your test copy: keep it out of reports and repos.
--trigger, --ci-url What started the run and its CI page, for the dashboard. GitHub Actions fills these in.

The address of a database holds a password, so debutly.json can't name one: set DEBUTLY_STORE_URL instead.

Environment variables

Debutly reads these from your shell and from a .env file in the folder it runs in. Values already set in your shell win.

Variable What it does
DEBUTLY_API_KEY Your model key. OPENROUTER_API_KEY or ANTHROPIC_API_KEY is used when this isn't set.
DEBUTLY_STORE_URL A Postgres address to record runs in, for the dashboard.
DEBUTLY_SANDBOX_TOKEN The token for your app's sandbox outbox.
DEBUTLY_PROVIDER openai-compatible or anthropic. Worked out from the key when unset.
DEBUTLY_BASE_URL The provider's API address, for openai-compatible. OpenRouter when the key is an OpenRouter key.
DEBUTLY_NAV_MODEL The model that drives the agents. Default with OpenRouter: z-ai/glm-5.3-flash.
DEBUTLY_JUDGE_MODEL The model that casts the customers and judges pages. Default with OpenRouter: deepseek/deepseek-v4-flash.
DEBUTLY_REASONING_EFFORT low, medium or high: how much the agents' model thinks before each step. Default with OpenRouter: low.
DEBUTLY_NAV_ROUTING OpenRouter provider routing for the agents' model, as JSON, e.g. {"order":["google-ai-studio/flex"]}.
DEBUTLY_JUDGE_ROUTING The same for the judge model.
DEBUTLY_ZERO_RETENTION With OpenRouter, requests go only to providers that keep no copy of prompts and don't train on them. off allows any provider. See Data and privacy.

A .env in the folder can only change where your key is sent (DEBUTLY_BASE_URL) if it holds the key too. That way a .env in a repository you cloned can't send the key from your shell somewhere else.

Commands

Command What it does
npx debutly init Asks a few questions and writes debutly.json, and a GitHub workflow if you want one.
npx debutly Runs the agents (the same as npx debutly run).
npx debutly doctor Checks the key, the browser, the config and that the app answers.
npx debutly perceive Skeptical-buyer evaluators judge your pages, two versions of a page, or an idea.
npx debutly hear [report] Checks a run's screen-reader findings with a real screen reader: NVDA on Windows, VoiceOver on macOS. See Reports.
npx debutly cancel <run id> --store <url> Stops a recorded run from anywhere.
npx debutly import Loads earlier runs from GitHub Actions report artifacts into the dashboard's database.
npx debutly costs Your OpenRouter key's spend, and what each app's latest run cost.

Press Ctrl+C once during a run and the agents stop at their next step and the report is still written. Press it again to quit at once.

Edit this page on GitHub