Skip to main content
The global install didn’t put the binary on your PATH, or it isn’t installed yet.
  • Confirm Node ≥ 20: node --version.
  • Reinstall globally: npm install -g @testsprite/testsprite-cli.
  • Or skip the global install entirely and run via npx @testsprite/testsprite-cli --version.
The CLI couldn’t authenticate, or your key is missing a scope.
  • Run testsprite auth whoami to see which profile, key, and scopes are active.
  • Reconfigure: testsprite auth configure (interactive) or TESTSPRITE_API_KEY=sk-... testsprite auth configure --from-env.
  • On AUTH_FORBIDDEN, the missing scope is named in details.requiredScope. Generate a new key with the full scope set from the dashboard.
  • In CI, set TESTSPRITE_API_KEY in the environment — it overrides the credentials file.
test run and project create pre-flight --target-url and reject local addresses (localhost, 127.x, ::1, 0.0.0.0, link-local, and RFC 1918 ranges), because the cloud runner must be able to reach the URL over the public internet.To test a localhost app, use the TestSprite MCP Server, which opens a tunnel for you. Otherwise point --target-url at a publicly reachable preview or staging URL.
The run hadn’t reached a terminal status before --timeout elapsed — this is not a failure.The JSON response carries the runId. Resume polling without re-triggering the run:
testsprite test wait <run-id> --timeout 600 --output json
There’s no failure bundle for that run. The details.reason tells you why:
  • no_failing_run — the run passed, so there’s nothing to download.
  • run_not_ready — the run is still in flight; wait with testsprite test wait <run-id>.
  • cancelled_no_artifacts — the run was cancelled before producing artifacts.
  • no_code — the test was deleted.
The test’s code changed since you fetched it — the codeVersion you passed no longer matches the latest.
  • Re-fetch the latest with testsprite test code get <test-id>, reapply your edit, and put again.
  • Pin a known version with --expected-version <v>.
  • Or skip the guard with --force (last writer wins).
test delete and test delete-batch require --confirm. Without it, the CLI exits 5 with a local validation error before touching the network. Add --confirm.
A per-key run-rate limit shed some work.
  • For a single command (exit 11), back off and retry — it’s retriable, and the CLI already retries automatically a few times.
  • For a batch rerun, inspect deferred[] in the JSON and retry those tests with a fresh --idempotency-key.
This is terminal, not retriable.
Append --dry-run --output json to any command. It runs end-to-end with no network, credentials, or filesystem writes and emits canned data matching the real response shape — the safest way to learn a command’s structure or debug a script.

Still stuck?

Discord

Join the community.

Issues & feature requests

File a bug or request a feature on GitHub.

In the terminal

Run testsprite --help, or testsprite test run --help for any command’s full flag list.