What an Experience is
An Experience describes a customer, a goal, a starting URL, and what successful completion looks like. A scenario is that saved setup. A run is one attempt to carry it out. For example, test whether a founder comparing SaaS plans can find the right plan and understand its price. You can save that setup, run it after a pricing-page change, and compare the reports without writing the instructions again. Treat findings as evidence from a synthetic session. Check the report’s observations and limitations before deciding what to change for real customers.Before you start
You need Node.js22.12 or newer, a signed-in Custory account, and edit access to the workspace to create or run an Experience. Viewers can read scenarios and reports.
Install or update the CLI:
0.10.0; the copy command below uses the 0.11.0 workflow. If commands or tools are missing, update the CLI and check custory tools list.
Experience runs use the workspace credit balance, with a free first report for eligible users. Preparing a scenario also uses AI assistance. Saving a scenario does not itself start a browser run.
Create and review a scenario
Start with the interactive flow:--file ./scenario.json or --stdin. Inspect the current input contract before preparing a file:
--run when you deliberately want creation to launch the saved scenario too.
Find, update, or copy saved setup
List scenarios, then inspect one using its returned ID:SCENARIO_ID and RUN_ID in these examples with IDs returned by Custory. Changing execution settings creates a new version, so earlier runs keep the setup they used. Name and description edits do not rewrite those versions.
To use an existing scenario as a starting point:
--from-version VERSION_ID with --from to copy a specific saved version.
Run on desktop or mobile
After you confirm that you are authorized to test the website, start a run:--confirm-target-authorization only after a person has confirmed it.
Use --device mobile for a mobile browser or --device both for desktop and mobile. These are browser sessions, not native mobile-app tests. Running both creates separate runs with independent outcomes and reports. Existing-account login supports one device at a time.
The command returns run IDs without waiting for completion. Add --wait to wait, or observe an existing run:
--group to cancel both devices in the same run group. Cancellation is a request; check status again for the final state and cleanup.
Keep human confirmations separate
Website authorization confirms that the site may be tested. Approval of a specific consequential action is a separate decision. Neither can be supplied by--yes.
If a run pauses for approval, read its current status and review the exact action before deciding:
deny instead of approve to reject it. Scripts require --confirm-action after that specific human decision.
For existing-account login, use the protected credential handoff offered by the CLI. MCP callers receive an app link for the person to enter credentials. Keep passwords out of scenario JSON, ordinary tool arguments, and chat.
Review history and reports
Find earlier runs for a scenario and read a run’s findings:--device desktop, --device mobile, or --status. Use --limit and the returned --cursor to read more pages.
Check the goal outcome, findings, limitations, and any linked journey. A completed run does not by itself mean the customer goal passed. A pending or unavailable report has no score; that is different from a score of zero.
Export the same Markdown report available in the app:
--json for structured output, or --full --json for detailed report data. Do not combine --json with --format markdown.
Recover an interrupted request
Use--resume with the same workspace and operation to recover its saved request:
--resume only when you want another attempt.