Generate and manage AI-driven Playwright test suites from a URL.
# Generate a suite (manual trigger, no schedule)obs suite generate https://example.com --name "Smoke Tests" --max-tests 5# Generate with a cron scheduleobs suite generate https://example.com --cron "0 */6 * * *"# Pass plain variables to the test runnerobs suite generate https://example.com --var USERNAME=admin# Pass a secret without putting it on the command line: omit =VALUE and the# CLI prompts for it with a hidden input, keeping it out of shell history and psobs suite generate https://example.com --var PASSWORD# Or load several at once from a fileobs suite generate https://example.com --var-file .env.test# List all suitesobs suite list# Get full suite details (tests, variables, schedule)obs suite get <id># Trigger a run and stream resultsobs suite run <id> --wait# Check the latest execution statusobs suite status <id># Wait on a specific executionobs suite wait <id> <executionId># Delete a suite (-y skips the confirmation prompt)obs suite delete <id> -y
# Generate a suite (manual trigger, no schedule)obs suite generate https://example.com --name "Smoke Tests" --max-tests 5# Generate with a cron scheduleobs suite generate https://example.com --cron "0 */6 * * *"# Pass plain variables to the test runnerobs suite generate https://example.com --var USERNAME=admin# Pass a secret without putting it on the command line: omit =VALUE and the# CLI prompts for it with a hidden input, keeping it out of shell history and psobs suite generate https://example.com --var PASSWORD# Or load several at once from a fileobs suite generate https://example.com --var-file .env.test# List all suitesobs suite list# Get full suite details (tests, variables, schedule)obs suite get <id># Trigger a run and stream resultsobs suite run <id> --wait# Check the latest execution statusobs suite status <id># Wait on a specific executionobs suite wait <id> <executionId># Delete a suite (-y skips the confirmation prompt)obs suite delete <id> -y
CI Integration#
Headless management of a suite's GitHub App / CI binding. Install + repo selection still happens in the web UI (it requires GitHub OAuth); these three commands cover post-install operations that scripts, CI bootstraps, and Terraform/Pulumi pipelines actually need.
# Show current binding (provider, repo, branch, hooks, masked token, last fired)obs suite ci status <id># Generate or rotate the inbound webhook token (each call invalidates the previous one)obs suite ci webhook-token <id> -y# Tear down the integration (invalidates the token, unbinds the repo)obs suite ci disconnect <id> -y
# Show current binding (provider, repo, branch, hooks, masked token, last fired)obs suite ci status <id># Generate or rotate the inbound webhook token (each call invalidates the previous one)obs suite ci webhook-token <id> -y# Tear down the integration (invalidates the token, unbinds the repo)obs suite ci disconnect <id> -y
Webhook token usage. The token is what your CI pipeline POSTs to /webhook/playwright?token=<token> to trigger a suite run. status shows it as ••••<last4> for safety; webhook-token returns the full value so you can pipe it into a secret store:
TOKEN=$(obs suite ci webhook-token 42 -y --json | jq -r '.data.token')gh secret set OBS_WEBHOOK_TOKEN -b "$TOKEN" --repo acme/marketing-site
TOKEN=$(obs suite ci webhook-token 42 -y --json | jq -r '.data.token')gh secret set OBS_WEBHOOK_TOKEN -b "$TOKEN" --repo acme/marketing-site
Why no install command. Installing the ObserveOne GitHub App on your org or selecting a repository requires the GitHub OAuth redirect flow, which doesn't fit a headless CLI. Do that once in the dashboard, then use these three commands for everything afterward.