# Where Composal fits in testing and engineering

> Composal is a QA product for end-to-end testing: it sends AI browser agents to use a web app the way a person would. It runs journeys as plain-English Scenarios, which only look around unless they are allowed to write, and explores areas nobody scripted, against staging, pull request previews or production. It fits pull request review, release sign-off, dependency and framework upgrades, and code written by coding agents. A browser Run keeps recordings, a step timeline, console errors and failed requests, and reports Findings with steps to reproduce when something breaks. Coding agents drive it with the com CLI and composal skill.

Page: https://composal.ai/usecases

## Terms

- **Project**: The product under verification. It owns its Scenarios, Personas and Environments.
- **Environment**: The URL a Run points at: staging, a pull request preview, production or a private app.
- **Persona**: Who a Scenario acts as, such as a signed-out visitor, a member or an admin.
- **Scenario**: One user journey in plain English: a name, starting conditions, ordered steps and the Outcomes that must hold.
- **Outcome**: An observable result that must hold for a Scenario to pass.
- **Run**: One execution of chosen Scenarios against an Environment. Each Scenario passes, fails, is blocked, is cancelled or times out.
- **Finding**: One bug, written as a report someone can act on, with steps to reproduce and evidence.

## What Composal is made of

- [Discovery](https://composal.ai/product/discovery): Agents explore an undocumented app and return recordings and gaps; a separate pass saves observed journeys as Scenarios to review.
- [Scenarios](https://composal.ai/product/scenarios): Regression journeys in plain English with no selectors, stored as YAML and run in parallel on pull requests or from your CI.
- [Deep Scan](https://composal.ai/product/deep-scan): Agents given one area and a goal try messy input, interrupted flows and unscripted paths, then report reproduced or suspected Findings.
- [CLI](https://composal.ai/product/cli): The com CLI lets a coding agent or CI job upload Scenarios, start Runs and read Findings, guided by the composal skill.

## On every pull request

What happens when a pull or merge request opens: which Scenarios run, what a reviewer sees, and what is left untested.

Read more: [Developers deep dive](https://composal.ai/usecases/dev)

### Review without pulling the branch

A reviewer would normally run the branch locally and click around. Instead the relevant Scenarios run on a preview of the exact commit, and the pull request comment links to the Run and its recordings.

Covered in: [Pull requests](https://composal.ai/docs/verify/source-control), [Scenarios](https://composal.ai/product/scenarios), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#review-without-pulling-the-branch

### Scenarios chosen from the diff

PR verification reads the changed files and hunks, picks the saved Scenarios that look relevant and records a reason for each choice, so a reviewer can see why one journey ran and another did not.

Covered in: [Pull requests](https://composal.ai/docs/verify/source-control), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#scenarios-chosen-from-the-diff

### The author sees the failing step

The pull request comment lists each Finding with what was expected and what happened. Open the Run to see the step it stopped on, with the recording, console errors and failed requests beside it.

Covered in: [Pull requests](https://composal.ai/docs/verify/source-control), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#author-sees-the-failing-step

### Untested stays visibly untested

A Scenario the selection was not sure about is listed as untested, never as a pass. An admin who wants it can pick it from the PR page and run it against the same exact-commit preview.

Covered in: [Pull requests](https://composal.ai/docs/verify/source-control), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#untested-stays-untested

### A change to a shared component

A tweak to a shared button, modal or form reaches screens the author never opened. Scenarios from different features can land in the same Run, and anything the selection could not map stays listed as untested.

Covered in: [Pull requests](https://composal.ai/docs/verify/source-control), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#change-to-a-shared-component

### Start a Run from a comment

With the opt-in comment and label triggers turned on, a repository owner, member or collaborator can start a Run by posting /qa as the whole comment, or a custom label can start one. Drafts wait until ready.

Covered in: [Pull requests](https://composal.ai/docs/verify/source-control)

Link: https://composal.ai/usecases#run-from-a-pr-comment

### Copy and docs-only changes

When every changed path is one you excluded, such as docs/** or README.md, the browser is skipped and the reason is recorded. A wording change in the app still goes through normal selection.

Covered in: [Pull requests](https://composal.ai/docs/verify/source-control), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#copy-and-docs-only-changes

### GitLab merge requests

On GitLab, a CI job hands the merge request's preview to Composal and waits. One note on the MR then carries the commit that ran, each Scenario's result, why it was chosen and links to the recordings.

Covered in: [Pull requests](https://composal.ai/docs/verify/source-control), [CI](https://composal.ai/docs/verify/source-control#cli), [CLI](https://composal.ai/product/cli), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#gitlab-merge-requests

## Releases and deploys

Running the same Scenarios around shipping: before promotion, right after a deploy, behind a flag and after a rollback.

Read more: [Regressions deep dive](https://composal.ai/usecases/regressions)

### Smoke run after every deploy

Keep the journeys that must never break, such as sign-in and checkout, as a small set of Scenario files. Your CI runs them with com verify scenarios run as the last step of a deploy, and the Run reports what broke, with recordings.

Covered in: [CI](https://composal.ai/docs/verify/source-control#cli), [Scenarios](https://composal.ai/product/scenarios), [Environments](https://composal.ai/docs/verify#what-verify-does), [CLI](https://composal.ai/product/cli)

Link: https://composal.ai/usecases#smoke-run-after-every-deploy

### Release candidate sign-off

Before a build is promoted from staging, run the Scenarios for the main journeys against it. The person signing off reads what passed, failed or was blocked, with recordings where captured, and which Scenarios were included.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Environments](https://composal.ai/docs/verify#what-verify-does), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#release-candidate-sign-off

### Hotfix verification

A hotfix cannot wait for a full regression pass. Run the Scenarios around the fix, plus the smoke label, against the patched Environment and watch the recordings before telling support the problem is gone.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Environments](https://composal.ai/docs/verify#what-verify-does), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#hotfix-verification

### Feature flag rollouts

Point the same Scenarios at a flag-on Environment and a flag-off one, or at Personas whose accounts have the flag set. A journey that works in one state and breaks in the other shows as a failed Outcome with a recording.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Environments](https://composal.ai/docs/verify#what-verify-does), [Personas](https://composal.ai/docs/verify/agent#personas)

Link: https://composal.ai/usecases#feature-flag-rollout

### Confirming a rollback worked

A rollback restores the old build but not always the old state. Run the Scenarios that passed before the release against the rolled-back Environment and read what is still broken, with recordings.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Environments](https://composal.ai/docs/verify#what-verify-does), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#confirm-a-rollback

### Infrastructure changes with no app diff

A CDN rule, proxy setting or config value changes no application code, so no pull request selects anything. Have your pipeline run a small set of Scenario files against that Environment once the change is applied.

Covered in: [CI](https://composal.ai/docs/verify/source-control#cli), [Scenarios](https://composal.ai/product/scenarios), [Environments](https://composal.ai/docs/verify#what-verify-does), [CLI](https://composal.ai/product/cli)

Link: https://composal.ai/usecases#infrastructure-change-with-no-app-diff

### Launch-day run

At launch, run the read-only Scenarios against the live Environment and keep the Browsers grid open to watch each session as it goes. The team sees a break while the announcement is still fresh.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Environments](https://composal.ai/docs/verify#what-verify-does), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#launch-day-run

## Upgrades and migrations

Changes that should leave the product looking the same to a user: dependency bumps, framework upgrades, migrations and rewrites.

Read more: [Continual verification deep dive](https://composal.ai/usecases/continual-verification)

### Dependency bump PRs

A Renovate or Dependabot bump passes unit tests, then breaks a screen. Its PR runs the Scenarios the diff plausibly touches in a real browser, so a broken screen shows up on the PR as a failed Outcome with a recording.

Covered in: [Pull requests](https://composal.ai/docs/verify/source-control), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#dependency-bump-prs

### Framework major upgrade

A new major version of your framework changes routing, rendering and forms everywhere, and the diff is too wide to reason about. Run every saved Scenario against the upgrade branch's preview and read the failures with recordings.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Environments](https://composal.ai/docs/verify#what-verify-does), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#framework-major-upgrade

### Backend or API migration

Moving to a new service or database should change nothing a user sees. Run the saved Scenarios against the migrated stack, and a browser Run keeps the failed requests and console errors that point at what moved.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Evidence](https://composal.ai/docs/verify/agent#evidence), [Environments](https://composal.ai/docs/verify#what-verify-does)

Link: https://composal.ai/usecases#backend-or-api-migration

### Auth provider swap

Swapping the sign-in provider changes every way into the app. Run sign-in as each Persona, member and admin, then a fresh email sign-up and a signed-out visit to a protected page, and see who lands on the wrong screen.

Covered in: [Personas](https://composal.ai/docs/verify/agent#personas), [Scenarios](https://composal.ai/product/scenarios), [Environments](https://composal.ai/docs/verify#what-verify-does)

Link: https://composal.ai/usecases#auth-provider-swap

### Design system or styling migration

A component library swap or a styles rewrite touches every screen while the code still compiles. Run the journeys on the migrated preview, then aim a Deep Scan's UI and accessibility lanes at the screens that changed most.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Deep Scan](https://composal.ai/product/deep-scan)

Link: https://composal.ai/usecases#design-system-migration

### Bundler or build tool change

A new bundler can leave the dev server fine and the production build broken, with a missing asset or a blank route. Scenarios run against the built, deployed preview, so they exercise the build rather than the dev server.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Environments](https://composal.ai/docs/verify#what-verify-does)

Link: https://composal.ai/usecases#bundler-or-build-tool-change

### Rewrite compared with the old app

In a rewrite or replatform, the old app is the specification. Let Discovery map it and save its journeys as Scenarios, then run the reviewed ones on the new Environment, where a failed Outcome marks a gap to close.

Covered in: [Discovery](https://composal.ai/product/discovery), [Scenarios](https://composal.ai/product/scenarios), [Environments](https://composal.ai/docs/verify#what-verify-does)

Link: https://composal.ai/usecases#rewrite-against-the-old-app

## Code written by agents

A coding agent says the work is done. These are the ways to check it in a browser and send what breaks back.

Read more: [Software factory deep dive](https://composal.ai/usecases/software-factory)

### When the agent says it's done

A coding agent opens a pull request and reports that the feature works. That report is not evidence, so the saved Scenarios the diff touches run in a real browser on that commit's preview and the results go to the PR.

Covered in: [Pull requests](https://composal.ai/docs/verify/source-control), [Scenarios](https://composal.ai/product/scenarios), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#agent-says-done

### Failures handed to the coding agent

A failed Scenario on the pull request comes with its steps and recording. Fix With Agent opens a prompt for Codex, Claude Code or Cursor, and a Discovery or Deep Scan report has Copy finding for any other agent.

Covered in: [Coding agents](https://composal.ai/docs/verification#remote-mcp), [Evidence](https://composal.ai/docs/verify/agent#evidence), [Pull requests](https://composal.ai/docs/verify/source-control), [Scenarios](https://composal.ai/product/scenarios), [Discovery](https://composal.ai/product/discovery), [Deep Scan](https://composal.ai/product/deep-scan)

Link: https://composal.ai/usecases#failures-to-coding-agent

### A Scenario written with the feature

Have the agent add a Scenario file in the same pull request as the feature. Steps and Outcomes are plain English, reviewed like code, linted offline in CI and uploaded, so later pull requests that touch the area can select it.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [CLI](https://composal.ai/product/cli), [CI](https://composal.ai/docs/verify/source-control#cli)

Link: https://composal.ai/usecases#scenario-with-the-feature

### Many agent branches at once

Several agents push branches in the same afternoon. Each pull request is verified on its own exact-commit preview, in its own Run in cloud browsers, so a failure is tied to the branch that caused it.

Covered in: [Pull requests](https://composal.ai/docs/verify/source-control), [Environments](https://composal.ai/docs/verify#what-verify-does)

Link: https://composal.ai/usecases#parallel-agent-branches

### Close the loop from the terminal

With the composal skill and the com CLI, an agent lints and uploads Scenarios, starts a Run on its preview, reads the failing step and console errors, fixes its code, and runs again.

Covered in: [CLI](https://composal.ai/product/cli), [Coding agents](https://composal.ai/docs/verification#remote-mcp), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#close-loop-from-terminal

### A vibe-coded prototype before the demo

A prototype an agent built in an afternoon looks right on the path its author tried. Point Discovery at the URL before the demo for an outside view of what each screen does and where the agents could not continue.

Covered in: [Discovery](https://composal.ai/product/discovery), [Environments](https://composal.ai/docs/verify#what-verify-does)

Link: https://composal.ai/usecases#vibe-coded-prototype

### Verify from inside Codex

Connect the Composal MCP plugin and the Verify app opens inside Codex or another MCP client. The agent starts a Run on your staging URL and the results and recordings stay in the same session.

Covered in: [Coding agents](https://composal.ai/docs/verification#remote-mcp), [Environments](https://composal.ai/docs/verify#what-verify-does), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#verify-inside-codex

## Regression testing

Old flows break quietly when something near them changes. These are the habits that keep them in front of a browser.

Read more: [QA teams deep dive](https://composal.ai/usecases/qa)

### Every fixed bug becomes a Scenario

The bug that reached production once, or one a customer ticket described, should not get there twice. Write its steps to reproduce as a Scenario with the correct behavior as the Outcome, so later pull requests can select it.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Pull requests](https://composal.ai/docs/verify/source-control)

Link: https://composal.ai/usecases#fixed-bug-becomes-scenario

### Confirm a fix by running it again

A developer says the checkout bug is fixed. Retry the failed Run to repeat the same Scenarios on the same Environment, then read the Outcomes and recording instead of taking the fix on trust.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Environments](https://composal.ai/docs/verify#what-verify-does), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#confirm-fix-rerun

### One Scenario, every Environment

Run the same plain-English Scenario against staging, a pull request preview and read-only production by choosing another Environment. Each Run pins the Environment, Scenario version and runner, so a difference can be traced.

Covered in: [Environments](https://composal.ai/docs/verify#what-verify-does), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#same-scenario-every-environment

### Interactions between features

The coupon works and the plan upgrade works, but not together. One Scenario can carry a journey across both features, so a pull request that touches either one can select it.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Pull requests](https://composal.ai/docs/verify/source-control)

Link: https://composal.ai/usecases#cross-feature-interactions

### Scenario health as a signal

When a stakeholder asks how stable checkout has been, each Scenario shows its recent Runs and success rate over the past month, with the pull request that triggered each. A journey that went red after one merge stands out.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Pull requests](https://composal.ai/docs/verify/source-control)

Link: https://composal.ai/usecases#scenario-health-signal

## Exploring the unknown

Sometimes nobody has written down what the app does yet. These are the ways to go and find out, with evidence.

Read more: [QA on tap deep dive](https://composal.ai/usecases/qa-on-tap)

### Map a product you inherited

You took over an app with little written down. Start a Discovery with a URL and an account to sign in with, and agents return the screens, the connected journeys, and the roles and setup each one needs, with recordings.

Covered in: [Discovery](https://composal.ai/product/discovery), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#map-inherited-product

### Deep Scan one feature with a goal

Give the scan an observable goal, such as cancelled edits must not change saved content, and say what the QA account may change. Agents try messy input and interrupted flows and report reproduced and suspected Findings.

Covered in: [Deep Scan](https://composal.ai/product/deep-scan), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#deep-scan-one-feature

### A bug hunt before launch

The launch is close and the happy path has only been walked by the people who built it. Sweep the whole product before it ships: Deep Scan the main flows across functionality, UI, UX and accessibility, then review Findings with steps to reproduce.

Covered in: [Deep Scan](https://composal.ai/product/deep-scan), [Discovery](https://composal.ai/product/discovery), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#pre-launch-bug-hunt

### Find gaps in your Scenario set

Saved Scenarios cover what someone remembered to write. A Discovery maps what the app offers, and its authoring pass saves the observed journeys as new Scenarios for you to review next to yours.

Covered in: [Discovery](https://composal.ai/product/discovery), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#gaps-in-scenario-set

### Dead ends and broken states

An error page with no way back, an empty state with no action, a setup that stalls halfway. Discovery reports the issues agents hit and the places where they could not continue.

Covered in: [Discovery](https://composal.ai/product/discovery), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#dead-ends-broken-states

### Before and after a risky refactor

Deep Scan the module before the refactor and keep the report to see what already misbehaves. Scan again afterwards: a Finding that appears only the second time is a lead to check against the change, not proof.

Covered in: [Deep Scan](https://composal.ai/product/deep-scan), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#before-after-refactor

### Onboard a new engineer

Knowledge holds short guides to the main product areas: what they do, how to reach them and which roles can use them, learned from earlier Runs. A new hire reads them, or asks a coding agent through com knowledge.

Covered in: [Knowledge](https://composal.ai/docs/verify#product-knowledge), [CLI](https://composal.ai/product/cli)

Link: https://composal.ai/usecases#onboard-engineer-knowledge

## Everyday user flows

The flows nearly every product has, from sign-up to settings, written as Scenarios in plain English and run in a real browser.

### Sign-up and first-run onboarding

A new visitor signs up and meets the product for the first time. The Scenario uses the sign-up Persona and its own inbox, reads the sign-up email, and ends with the Outcome that onboarding lands on the right screen.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Personas](https://composal.ai/docs/verify/agent#personas)

Link: https://composal.ai/usecases#sign-up-and-onboarding

### Login and password reset

Every other journey starts with getting in. A Scenario per Persona signs in and lands on the right screen, and one more submits the forgot-password form as a signed-out visitor and states what the page must say.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Personas](https://composal.ai/docs/verify/agent#personas)

Link: https://composal.ai/usecases#login-and-password-reset

### Checkout with a sandbox card

A change near the cart can quietly break the payment form. In staging, the Scenario fills it with the provider's test card and ends on two Outcomes: the order total is right and the confirmation screen appears.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Environments](https://composal.ai/docs/verify#what-verify-does)

Link: https://composal.ai/usecases#checkout-sandbox-payment

### Forms and validation messages

Required fields, bad formats and server-side errors appear all over a product. The Scenario submits a form empty, then with a bad value, and the Outcome is a message next to the field that caused it.

Covered in: [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#forms-and-validation-messages

### Search, filters and sorted tables

A filter that resets on page two, or a sort that ignores the search term, is easy to miss. Scenarios apply each control in turn and page through, with the Outcome that every row matches what was asked for.

Covered in: [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#search-filters-sorted-tables

### Settings, profile and notifications

Preference changes are easy to save and easy to lose. As a member, the Scenario edits a profile field and a notification option, saves, and the Outcome is that the change shows where it is used, such as the header.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Personas](https://composal.ai/docs/verify/agent#personas)

Link: https://composal.ai/usecases#settings-profile-notifications

### Subscription upgrade and downgrade

Changing plan touches billing, limits and the interface at once. As a paying Persona, a Scenario switches the billing period, upgrades, then downgrades, with Outcomes for the price shown and the plan the account reports.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Personas](https://composal.ai/docs/verify/agent#personas)

Link: https://composal.ai/usecases#subscription-upgrade-downgrade

### File upload and import

An import that chokes on a real invoice only fails when someone uploads one. The Scenario attaches the file as a fixture, picks it in the app's own file picker, and ends with the imported rows in the list.

Covered in: [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#file-upload-and-import

## Roles, accounts and teams

Products behave differently for each role and account, and Personas let Scenarios check what each person can reach and do.

Read more: [Multi-persona deep dive](https://composal.ai/usecases/multi-persona)

### Role matrix as Personas

Admin, member and viewer each get a different interface. Each role becomes a Persona with its own stored Credentials, and a Scenario per role records what that person can actually do in a real browser.

Covered in: [Personas](https://composal.ai/docs/verify/agent#personas), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#role-matrix-as-personas

### What a role must not do

A viewer who finds an Edit button, or a member who reaches billing, is an easy regression to ship. Scenarios sign in as the lower role and state the Outcome: the control is missing or the page refuses.

Covered in: [Personas](https://composal.ai/docs/verify/agent#personas), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#what-a-role-must-not-do

### Invite a teammate and accept

An admin invites a member by email and the member accepts. A multi-actor Scenario gives each person a Persona and a distinct working account, and walks both sides in order with evidence from each browser.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Personas](https://composal.ai/docs/verify/agent#personas)

Link: https://composal.ai/usecases#invite-and-accept-teammate

### Plan limits and paid features

A free account should hit the limit and a paid one should not. Personas on each plan, including the one a customer reported a problem on, try the same feature, and Scenarios state which gets through and which sees an upgrade prompt.

Covered in: [Personas](https://composal.ai/docs/verify/agent#personas), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#plan-limits-and-entitlements

### Sharing between two users

An owner shares a document and the teammate has to see it. A multi-actor Scenario creates the item as one Persona, opens it as another, and ends with the Outcome that both reach the same item in their own sessions.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Personas](https://composal.ai/docs/verify/agent#personas)

Link: https://composal.ai/usecases#sharing-between-two-users

### First-run and returning users

A new account gets a welcome prompt and a setup checklist, an established one a busy dashboard. Starting conditions name the state a Scenario needs, so each gets its own Scenario and an account kept in that state.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Personas](https://composal.ai/docs/verify/agent#personas)

Link: https://composal.ai/usecases#first-run-versus-returning-user

### Workspace isolation between customers

One customer must never see another's data. With accounts in two workspaces and authorization for that scope, aim a Deep Scan's security lane at the boundary and review what it reaches as reproduced or suspected Findings.

Covered in: [Deep Scan](https://composal.ai/product/deep-scan), [Personas](https://composal.ai/docs/verify/agent#personas)

Link: https://composal.ai/usecases#workspace-isolation

## Edge cases and failure modes

The moments that break products in practice: empty screens, repeated clicks, reloads, odd input and failed requests.

Read more: [Regressions deep dive](https://composal.ai/usecases/regressions)

### Empty and error states

A blank table or a raw error page is what a user sees when data is missing or a request fails. Scenarios use an account with no records and an unknown page address, and state the Outcome: a message that says what to do next.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Personas](https://composal.ai/docs/verify/agent#personas)

Link: https://composal.ai/usecases#empty-and-error-states

### Slow responses and loading states

Reports, imports and assistant replies arrive after a pause. A Scenario states how long to wait and what must appear, and the Run recording shows what the screen did in between.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#slow-responses-and-loading-states

### Back button and deep links

A pasted link to a filtered list, or the Back button after a form, should not land somewhere wrong. Scenarios open the link as a signed-out visitor and as a member, press Back, and state which page and filters must show.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Personas](https://composal.ai/docs/verify/agent#personas)

Link: https://composal.ai/usecases#back-button-and-deep-links

### Reload in the middle of a flow

A wizard half filled in, then the tab reloads. A Scenario reloads mid-flow with the Outcome that the draft survives, and Deep Scan tries the interruptions nobody scripted, with a recording of where the person landed.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Deep Scan](https://composal.ai/product/deep-scan)

Link: https://composal.ai/usecases#reload-in-the-middle-of-a-flow

### Double-click and duplicate submit

A second click on Pay or Save can create two orders or two records. Give Deep Scan the goal that a repeated submit must not duplicate a record, and any duplicate it finds comes back as a Finding with steps and a recording.

Covered in: [Deep Scan](https://composal.ai/product/deep-scan), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#double-click-duplicate-submit

### Long, odd and malformed input

A very long name, an emoji, a stray quote or a pasted paragraph is where form handling breaks. Deep Scan aims at one form and reports what breaks, with the exact input used and what the screen showed.

Covered in: [Deep Scan](https://composal.ai/product/deep-scan), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#long-odd-malformed-input

### Silent failures behind a working page

The screen looks right while a background request fails or the console fills with exceptions. A browser Run keeps the console errors and failed requests next to the recording, so they can be read even when a Scenario passed.

Covered in: [Evidence](https://composal.ai/docs/verify/agent#evidence), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#silent-failures-behind-working-page

## Beyond the browser

Desktop apps and Android builds get Scenarios, recordings and Findings like a website does, with clear limits.

### Android APK builds

Upload a standalone APK and each Scenario installs that exact build in a fresh Android emulator, then taps and swipes through the flow. Sign-ins and app data start clean every time.

Covered in: [Android](https://composal.ai/docs/verify#android), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#android-apk-builds

### Native Linux desktop apps

A native app launches on a disposable Linux desktop, and Scenarios drive it through its windows, menus and dialogs as a person would. Every Scenario gets a fresh desktop, so no profile or sign-in carries over.

Covered in: [Desktop apps](https://composal.ai/docs/verify#computer-use), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#linux-desktop-apps

### Exploring a native app

Discovery and Deep Scan work on desktop and Android builds too, each tester in its own desktop or emulator. Recordings, screenshots and Findings appear in the same Run pages as a website, without console or network tabs.

Covered in: [Discovery](https://composal.ai/product/discovery), [Desktop apps](https://composal.ai/docs/verify#computer-use), [Android](https://composal.ai/docs/verify#android), [Deep Scan](https://composal.ai/product/deep-scan)

Link: https://composal.ai/usecases#native-app-exploration

### Files an app writes

Export or save from a desktop app and the Scenario can end on the file itself. The Outcome names an allowed output path and the text it must contain, and text and ODT files can be read.

Covered in: [Desktop apps](https://composal.ai/docs/verify#computer-use), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#files-an-app-writes

### Where native support stops

Desktop means Linux on X11, and mobile means an Android emulator without Google Play services. Mac and iOS apps, Wayland desktops and Android App Bundles are not covered, and browsers remain the main product.

Covered in: [Desktop apps](https://composal.ai/docs/verify#computer-use), [Android](https://composal.ai/docs/verify#android)

Link: https://composal.ai/usecases#native-support-limits

## QA teams

How a QA team covers a large product, keeps expected behavior written down and triages from evidence.

Read more: [QA teams deep dive](https://composal.ai/usecases/qa)

### Spreadsheet test plans as Scenarios

The release plan is a spreadsheet of numbered cases, or a backlog waiting for an engineer to script it. QA writes each row as a Scenario in plain English, with no selectors, and the plan runs in parallel in cloud browsers.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [CLI](https://composal.ai/product/cli)

Link: https://composal.ai/usecases#qa-spreadsheet-test-plans

### One written record of expected behavior

What checkout should do lives in old tickets and one tester's memory. A Scenario writes down its starting conditions, steps and Outcomes in plain English, so the next person to change checkout has something to read first.

Covered in: [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#qa-expected-behaviour-record

### Small QA team, large product

A handful of testers cannot walk every screen each release. Steer a Discovery with a goal toward the areas nobody reaches, such as admin and billing, and review what its agents observed before deciding what to cover.

Covered in: [Discovery](https://composal.ai/product/discovery), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#qa-small-team-large-product

### A triage list by priority

The Findings list holds every Scenario failure and every bug a Discovery or Deep Scan reported, highest priority first, each linked to the Run that last saw it. Resolve or ignore one and it moves to Closed.

Covered in: [Evidence](https://composal.ai/docs/verify/agent#evidence), [Scenarios](https://composal.ai/product/scenarios), [Discovery](https://composal.ai/product/discovery), [Deep Scan](https://composal.ai/product/deep-scan)

Link: https://composal.ai/usecases#qa-triage-from-evidence

### An accessibility pass on one flow

Before an audit or a launch, aim a Deep Scan's accessibility lane at one flow, such as sign-up or checkout. Findings arrive with steps to reproduce and recordings, and a human review still decides compliance.

Covered in: [Deep Scan](https://composal.ai/product/deep-scan), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#accessibility-pass-on-one-flow

### Exploratory sessions with a head start

Release week goes to re-walking the same flows. Saved Scenarios can run those flows in parallel, and a Deep Scan on the new feature gives testers Findings to start their exploratory sessions from.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Deep Scan](https://composal.ai/product/deep-scan)

Link: https://composal.ai/usecases#qa-time-for-exploratory-work

## Engineering teams

Where Composal fits in an engineering team's week: before review, on the pull request, in a monorepo and when something breaks.

Read more: [Developers deep dive](https://composal.ai/usecases/dev)

### Alongside a Playwright or Cypress suite

Your unit tests and scripted end-to-end suite stay where they are. Scenarios cover journeys nobody has scripted, written in plain English and run in a real browser on the pull request's preview.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Pull requests](https://composal.ai/docs/verify/source-control)

Link: https://composal.ai/usecases#alongside-playwright-or-cypress

### Steps in prose, not selectors

A scripted Playwright suite needs locator fixes whenever the markup moves. Scenario steps are prose, such as Open Settings, then Members, so a file holds no selectors, though you still edit it when the behavior changes.

Covered in: [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#eng-fewer-selectors

### A team with no QA function

Without a QA role, whoever merges last does the smoke pass, or nobody does. The relevant saved Scenarios run on each pull request, so verification stops being a rotating chore and the results sit where the team already works.

Covered in: [Pull requests](https://composal.ai/docs/verify/source-control), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#eng-team-without-qa

### Try your feature before review

Before opening the pull request, run the Scenario for your feature in Chrome on your own machine against localhost, with your own model access. You see where it stops while the change is still yours.

Covered in: [CLI](https://composal.ai/product/cli), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#eng-try-feature-before-review

### Verification history on a busy PR

A pull request that collects many pushes keeps a Verification History: each commit that ran with its outcome and setup reason, and results from an older commit marked as an earlier revision.

Covered in: [Pull requests](https://composal.ai/docs/verify/source-control), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#eng-reviewers-see-what-ran

### Monorepo shared-package changes

In a monorepo, a change under a shared package may not name the apps that use it. PR verification compares the changed paths and hunks with your saved Scenarios and leaves anything it cannot map untested.

Covered in: [Pull requests](https://composal.ai/docs/verify/source-control), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#eng-monorepo-shared-package

### Reproduce a bug from on-call

An alert or a one-line report says a flow is broken, with no steps. Give Deep Scan that line as its goal against staging, and it reports what it could reproduce or suspects, with expected versus actual and a recording.

Covered in: [Deep Scan](https://composal.ai/product/deep-scan), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#eng-on-call-reproduction

### Internal tools a platform team owns

The deploy console or service catalog a platform team runs has no QA and sits on a private network. Once the Environment is reachable, a few Scenarios cover the actions the team relies on, such as opening a deploy.

Covered in: [Private networks](https://composal.ai/docs/verify/private-networks), [Environments](https://composal.ai/docs/verify#what-verify-does), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#eng-platform-internal-tools

## Product, design and support

How PMs, designers, support and sales teams see what users actually get, with Scenarios written in plain English.

Read more: [Product managers deep dive](https://composal.ai/usecases/pm)

### Acceptance against the spec

Sign-off means clicking through staging with the ticket open. Write the acceptance criteria as a Scenario's Outcomes in plain English, run it on the preview, and sign off from the Run's results and recordings.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Environments](https://composal.ai/docs/verify#what-verify-does), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#pm-acceptance-against-spec

### Built screens against design intent

The mock shows an empty state, an error message and a disabled button. Describe each as an Outcome, and a Scenario walks to the screen and reports what is actually visible, with a screenshot when it differs.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#design-built-ui-against-intent

### Help-center steps that no longer match

A help article says click Billing, then Invoices, and the menu has moved. Write the article's steps as a read-only Scenario, and a Run shows where the documented path stops matching the app.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Environments](https://composal.ai/docs/verify#what-verify-does)

Link: https://composal.ai/usecases#help-center-steps-out-of-date

### Marketing site after a CMS publish

A content edit goes live and the pricing link leads nowhere, or a page lost its sign-up button. A read-only Scenario as a signed-out visitor follows the key pages after each publish, started from the CLI in your pipeline.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Environments](https://composal.ai/docs/verify#what-verify-does), [CI](https://composal.ai/docs/verify/source-control#cli), [CLI](https://composal.ai/product/cli)

Link: https://composal.ai/usecases#marketing-site-after-cms-publish

### Demo Environment before a sales call

A stale seed or a broken integration shows up in front of the prospect. Run the demo Scenarios as the demo Persona just before the call: they only look around by default, and a read-only demo account makes that firm.

Covered in: [Environments](https://composal.ai/docs/verify#what-verify-does), [Scenarios](https://composal.ai/product/scenarios), [Personas](https://composal.ai/docs/verify/agent#personas)

Link: https://composal.ai/usecases#sales-demo-environment

## By kind of product

How Composal fits the web apps teams build most, from storefronts and dashboards to admin consoles and chat apps.

### B2B SaaS dashboards

One failing panel can hide on a mostly loaded dashboard, because tiles, charts and tables each come from their own query. Name the panels that must show data as Outcomes, and the Run's failed requests point at the one that did not.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#b2b-saas-dashboards

### E-commerce storefronts

Product pages share one template, but a sale price, a size variant or a sold-out state changes what each one shows. Scenarios open one of each signed out and state the price, button and message it must show.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Personas](https://composal.ai/docs/verify/agent#personas)

Link: https://composal.ai/usecases#ecommerce-storefronts

### Internal tools and admin consoles

A refund tool or support console has many write buttons and no test suite. Scenarios only look around unless their file allows writes, and Discovery's read-only goal is an instruction, so give it a read-restricted account.

Covered in: [Discovery](https://composal.ai/product/discovery), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#internal-tools-admin-consoles

### Two-sided marketplaces

A seller publishes a listing and a buyer has to find it, then the seller unpublishes it. A multi-actor Scenario signs in both sides in order, and the Outcome is what the buyer sees, recorded from the buyer's browser.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Personas](https://composal.ai/docs/verify/agent#personas), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#marketplaces

### Fintech and banking web apps

An amount typed on a transfer form must read the same on the review step, the confirmation and the activity list. Scenarios follow it across screens in staging, while the ledger itself stays with your own tests.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Environments](https://composal.ai/docs/verify#what-verify-does)

Link: https://composal.ai/usecases#fintech-web-apps

### Booking and scheduling apps

A booking holds a slot until it is cancelled, then the slot must be offered again. Book and cancel as a member in a Scenario, then let a Deep Scan work the picker with the back button, a reload and a changed date.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Deep Scan](https://composal.ai/product/deep-scan), [Personas](https://composal.ai/docs/verify/agent#personas)

Link: https://composal.ai/usecases#booking-scheduling-apps

### Content sites and CMS

A theme or template change touches every page type at once. Scenarios open an article, a category page, search and the home page signed out, and state the headline, byline and links each one must show.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Personas](https://composal.ai/docs/verify/agent#personas)

Link: https://composal.ai/usecases#content-sites-cms

### Developer platforms and consoles

The console around an API has a short list of jobs: create a key, rotate it, add a webhook endpoint. An admin Persona does each one and the Outcome is what the screen shows, while the API itself stays with your own tests.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Personas](https://composal.ai/docs/verify/agent#personas)

Link: https://composal.ai/usecases#developer-platforms

### Learning platforms

Lessons become available in order and assignments take file uploads. A Scenario acts as a learner, attaches a fixture file to a submission, and states that the next module opens and the progress bar moves.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Personas](https://composal.ai/docs/verify/agent#personas)

Link: https://composal.ai/usecases#learning-platforms

### AI chat and assistant apps

Assistant replies never read the same twice, so an Outcome that quotes exact text is brittle. State what must be visible instead, such as a reply under the question, a source link, or the thread saved in history.

Covered in: [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#ai-chat-assistants

## Environments and access

Where Runs point and how they get in: previews, staging, production, private networks and the accounts they sign in with.

### Where a PR preview comes from

Your CI hands over the preview URL, a GitHub or GitLab deployment is discovered, or Composal deploys a preview itself. Whichever you choose, Composal will not substitute an older deployment or a shared environment.

Covered in: [Pull requests](https://composal.ai/docs/verify/source-control), [Environments](https://composal.ai/docs/verify#what-verify-does), [CI](https://composal.ai/docs/verify/source-control#cli), [CLI](https://composal.ai/product/cli)

Link: https://composal.ai/usecases#pr-preview-sources

### Staging, where writes are allowed

Staging is where a Scenario may create, change and delete data. Set allowed_actions to writes in that Scenario, give it staging's own accounts, and spell out the starting data it expects to find there.

Covered in: [Environments](https://composal.ai/docs/verify#what-verify-does), [Scenarios](https://composal.ai/product/scenarios), [Personas](https://composal.ai/docs/verify/agent#personas)

Link: https://composal.ai/usecases#staging-environment-writes

### Production, read only

Register production as an Environment and keep its Scenarios read only, the default, signing in with a synthetic account to look around the live product. For enforced write prevention, use an account restricted to reads.

Covered in: [Environments](https://composal.ai/docs/verify#what-verify-does), [Scenarios](https://composal.ai/product/scenarios), [Personas](https://composal.ai/docs/verify/agent#personas)

Link: https://composal.ai/usecases#production-environment-read-only

### Test accounts kept in Credentials

Passwords, authenticator seeds, saved sessions and passkeys live encrypted in a project's Credentials, never in Scenario files or prompts. A Run is handed only the account it needs, and the agent sees references.

Covered in: [Personas](https://composal.ai/docs/verify/agent#personas), [Environments](https://composal.ai/docs/verify#what-verify-does), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#test-accounts-in-credentials

### Two-factor and emailed-code sign-in

When login asks for an authenticator code or an emailed one, the authenticator key stays encrypted, the agent generates a fresh code at each sign-in, and an inbox the Run can read covers emailed codes and links.

Covered in: [Personas](https://composal.ai/docs/verify/agent#personas), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#two-factor-and-emailed-codes

### SSO and push-approval sign-in

When sign-in needs a person, such as SSO or a push approval, sign in yourself once and save the app session for Runs to start from. It is tied to one origin and expires, and some providers reject automated browsers.

Covered in: [Personas](https://composal.ai/docs/verify/agent#personas), [Environments](https://composal.ai/docs/verify#what-verify-does)

Link: https://composal.ai/usecases#sso-and-push-approval-sign-in

### Apps behind Tailscale

An internal preview, or a dev server on your laptop shared with Tailscale Serve, stays off the public internet. Each browser sandbox joins your tailnet as an ephemeral device and reaches only what your policy grants.

Covered in: [Private networks](https://composal.ai/docs/verify/private-networks), [Environments](https://composal.ai/docs/verify#what-verify-does)

Link: https://composal.ai/usecases#apps-behind-tailscale

### Private APIs behind AWS Client VPN

The frontend is public but the API sits behind an internal load balancer in your VPC. A split-tunnel Client VPN connection lets the browser reach the private API while public services stay on the internet.

Covered in: [Private networks](https://composal.ai/docs/verify/private-networks), [Environments](https://composal.ai/docs/verify#what-verify-does)

Link: https://composal.ai/usecases#private-apis-aws-client-vpn

### Behind an IP allowlist or WAF

When a firewall or Cloudflare WAF rule blocks unknown browsers, your account manager can arrange dedicated static outbound IPs for your hosted browsers to allowlist, though Bot Fight Mode cannot be skipped by a WAF rule.

Covered in: [Environments](https://composal.ai/docs/verify#what-verify-does), [Private networks](https://composal.ai/docs/verify/private-networks)

Link: https://composal.ai/usecases#ip-allowlist-and-waf

## Evidence and hand-off

What a Run leaves behind, and how a Finding travels to the person or coding agent who has to fix it.

Read more: [Software factory deep dive](https://composal.ai/usecases/software-factory)

### A recording as the bug report

A failed Scenario keeps its session on video where one was saved, with the step timeline beside it. The ticket can point at the recording instead of a paragraph of steps written down from memory.

Covered in: [Evidence](https://composal.ai/docs/verify/agent#evidence), [Scenarios](https://composal.ai/product/scenarios)

Link: https://composal.ai/usecases#recording-as-the-bug-report

### Copy a Finding into a ticket

In a Discovery or Deep Scan report, Copy finding puts the steps to reproduce, what was expected and the evidence links on the clipboard as text, ready to paste into an issue tracker.

Covered in: [Evidence](https://composal.ai/docs/verify/agent#evidence), [Coding agents](https://composal.ai/docs/verification#remote-mcp), [Discovery](https://composal.ai/product/discovery), [Deep Scan](https://composal.ai/product/deep-scan)

Link: https://composal.ai/usecases#copy-finding-into-ticket

### Share the exact Run and step

A failure is being argued over in a thread. Copy Link shares the selected session and recording step, so teammates in your organization open the same moment, and with the Slack app installed a Run link can show a result card.

Covered in: [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#link-to-exact-run-and-step

### A record of what was verified

Some time after a release, someone asks what was actually verified. Each Run pins the Scenario versions, Personas, Environment and runner it used, and keeps its Outcomes and evidence.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#record-of-what-was-verified

### Reproduced or suspected Findings

Deep Scan labels each Finding reproduced or suspected, so triage knows what to fix now and what to look at first. Rerun a suspected one in a fresh browser to see whether it repeats.

Covered in: [Deep Scan](https://composal.ai/product/deep-scan), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#reproduced-or-suspected

### Blocked is not failed

A Scenario that cannot proceed because an account, a teammate or an inbox is missing is reported as blocked, with the reason and evidence, rather than as a failed Outcome, so a setup gap is not read as a bug.

Covered in: [Scenarios](https://composal.ai/product/scenarios), [Evidence](https://composal.ai/docs/verify/agent#evidence)

Link: https://composal.ai/usecases#blocked-is-not-failed

### Known bugs are not filed twice

When a Discovery or Deep Scan hits a bug the project already tracks, it is recorded as another occurrence, not a new Finding. Memory from earlier Runs helps agents work around quirks and never changes what a Scenario expects.

Covered in: [Knowledge](https://composal.ai/docs/verify#product-knowledge), [Evidence](https://composal.ai/docs/verify/agent#evidence), [Scenarios](https://composal.ai/product/scenarios), [Discovery](https://composal.ai/product/discovery), [Deep Scan](https://composal.ai/product/deep-scan)

Link: https://composal.ai/usecases#known-quirks-stay-out

## Frequently asked questions

### What is Composal used for in testing and engineering?

Composal sends browser agents to use a running web app the way a person would, then reports what broke with recordings and other evidence. Teams use Composal to verify pull requests, run saved Scenarios from the com CLI in their CI, explore an app without writing steps first, and hand Findings to a coding agent. A project can start from just a URL, and connecting a repository is optional.

### How does Composal verify a pull request?

When a pull request or merge request opens or gets a new commit, Composal compares the changed files with the project's saved Scenarios, selects the relevant ones and records a reason for each. The selected Scenarios run in parallel in cloud browsers against a ready preview of that exact commit, and one results comment or note on the request links the evidence. Scenarios Composal was not confident about stay listed as untested, never as passed. The result appears as a check on that commit, and whether a failure blocks merging is set by your source provider's branch protection.

### Does Composal replace Playwright, Cypress or unit tests?

No, Composal does not replace unit tests or Playwright and Cypress suites. It checks a running app at the level of user journeys: browser agents carry out Scenarios, written as plain-English steps and Outcomes, on an Environment such as a pull request preview. Discovery and Deep Scan can also explore paths nobody has written down. Existing suites can stay in place for what they already cover.

### What is a Scenario, and how is it different from a test script?

In Composal, a Scenario is one user journey written in plain English: a name, starting conditions, ordered steps and the Outcomes that must hold. It can be edited as a YAML file, linted offline and uploaded, so people and coding agents maintain it like code. A scripted browser test spells out how to drive the page; a Scenario states what a person does and what they must see, and its authored Outcomes decide whether it passed.

### What kinds of apps and environments can Composal run against?

Composal runs against any URL a remote browser can reach: staging, a pull request preview, production with synthetic accounts and data, or another app you operate. Private apps are reachable through Tailscale or AWS Client VPN, and an app on your own computer through Tailscale Serve. Composal can also drive a native Linux desktop app on X11 and a standalone Android APK in an emulator without Google Play services. Mac and iOS apps are not covered.

### How does Composal find bugs nobody wrote a Scenario for?

Composal has two ways to look for bugs nobody wrote a Scenario for. Discovery sends browser agents to explore the app with the access you give them, returns recordings, observations, potential issues and gaps, and saves what they observed as Scenarios you can review and run. Deep Scan aims a team of agents at one area with an observable goal, and they challenge input boundaries and state transitions across functionality, UI, UX, accessibility and authorized security boundaries.

### How do coding agents use Composal?

Composal installs a composal skill into a project with com skills install, so a coding agent such as Codex, Claude Code or Cursor can write Scenario files, lint and upload them, start a Run and read the failing step with its console errors and failed requests through the com CLI. Findings can be handed to the agent with Fix With Agent or Send to Agent. A hosted MCP connector also lets an assistant configure projects, launch Runs and read results.

### What does Composal's output look like?

A Composal Run reports each Scenario as passed, failed, blocked, cancelled or timed out, and keeps its recording, step timeline, console errors, failed network requests and screenshots, with a replay player to step through them. Each Finding states what was expected, what happened and the steps to reproduce it. Deep Scan separates reproduced bugs from suspected ones, so triage knows which Findings are leads.

### What does Composal not do?

Composal exercises a running app through its interface in a browser, reports Findings with evidence, and hands them to your coding agent or team to fix. It does not edit your source code, and it is not a unit-test runner, an API-only tool, a load or performance testing tool, a security scanner or penetration test, or a pixel-diff screenshot comparison. A pass covers the selected Scenarios in that Run, and a finished Run or Deep Scan shows what was covered and what was blocked. It is not proof that every bug was found or that the whole app passes.

## Get started

- [Quickstart](https://composal.ai/docs/quickstart.md): install the `com` CLI and connect a repository.
- [Verify documentation](https://composal.ai/docs/verify.md): Projects, Environments, Scenarios and Runs.
- [Use cases page](https://composal.ai/usecases): this page in the browser, with search and filters.
