Autopilot Suites (CLI)

Generate and manage AI-driven Playwright Autopilot suites from the obs CLI. Generation, variables, runs, and headless CI / GitHub App bindings.

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 schedule
obs suite generate https://example.com --cron "0 */6 * * *"
# Pass plain variables to the test runner
obs 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 ps
obs suite generate https://example.com --var PASSWORD
# Or load several at once from a file
obs suite generate https://example.com --var-file .env.test
# List all suites
obs suite list
# Get full suite details (tests, variables, schedule)
obs suite get <id>
# Trigger a run and stream results
obs suite run <id> --wait
# Check the latest execution status
obs suite status <id>
# Wait on a specific execution
obs suite wait <id> <executionId>
# Delete a suite (-y skips the confirmation prompt)
obs suite delete <id> -y

Editing the Plan#

obs suite pull downloads a suite's PLAN.md alongside its generated tests, so you can review or edit the plan by hand and push it back.

# Pull PLAN.md + generated tests to ./suites/<name>-<id>/
obs suite pull <id>
# Edit PLAN.md locally, then push it back
obs suite push <id>
# obs suite get flags planned files that changed since generation
obs suite get <id>
# Preview what a regenerate run would target, without generating anything
obs suite regenerate <id> --dry-run
# Regenerate the stale/missing planned files
obs suite regenerate <id>
# Regenerate every non-dismissed planned file, even if none are stale
obs suite regenerate <id> --all

obs suite push compares the local PLAN.md against the suite's stored plan and uploads it only when the content changed. A pushed edit marks the planned files it affects as stale; obs suite get lists them with a count and a hint, and obs suite regenerate re-runs generation for exactly those files.

Suite Variables#

# List the variable/credential keys configured for a suite (values are never returned)
obs suite env-vars <id>
# Set or update a value (omit =VALUE to be prompted for a hidden input)
obs suite secrets <id> --var KEY

obs suite secrets writes the values, obs suite env-vars shows which keys are set without exposing them.

Planner Instructions#

# Set persistent guidance appended to the planner prompt at creation (max 4000 characters)
obs suite generate https://example.com --instructions "Log in via the /login form before testing checkout"
# Set or change it on an existing suite
obs suite update <id> --instructions "Log in via the /login form before testing checkout"
# Clear it
obs suite update <id> --instructions ""

Instructions persist on the suite and apply to every future generation and regeneration, not just the next run.

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 and CI/automation 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

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

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.

Related comparisons

Picking between the tools mentioned here? Side-by-side breakdowns below.

Swap out part of your stack

Looking for a different fit? Start here.

Was this page helpful?