- Hosted is the default. When you follow the Quickstart, you’re using it.
- Usage is measured in testing minutes: the time a sandbox is running.
- Your plan sets how many sandboxes can run at the same time.
How testing minutes are counted
Testing minutes run while a sandbox is running. That includes sandboxes started by:- Your test runs, locally and in CI.
- The TestDriver agent, when it reviews a pull request or writes a test.
keepAlive uses minutes until it shuts down. Keep keepAlive as short as you need.
Concurrency
Each running sandbox uses one of your plan’s slots. A slot frees up when its sandbox shuts down. When every slot is busy, a new test waits for a free slot instead of failing. The SDK retries every 10 seconds, for up to 60 seconds by default. SetTD_CONCURRENCY_MAX_WAIT to change the wait. See Concurrency limits.
To stay within your slots, limit how many test files Vitest runs at once:
concurrency group stops two runs on the same branch from competing for slots. A new push cancels the older run:
.github/workflows/testdriver.yml
When to self-host
Consider self-hosting when you need to:- Run tests on your own infrastructure.
- Use your own AI provider keys.
- Run custom VM images with your software preinstalled.
- Run more tests in parallel than hosted allows.
Next steps
Quickstart
Run your first test on a hosted sandbox.
Run tests in CI/CD
Run your tests on every push and pull request.
Self-hosted
Run sandboxes on your own infrastructure.
Run tests
Run tests locally and in parallel.

