testdriver-agent
How the TestDriver agent behaves on GitHub issues, pull requests, and @mentions
Create the TestDriver client, authenticate, and connect to a sandbox
Claude Code
$ npx -y skills add testdriverai/testdriverai --skill testdriver-client --agent claude-code
Codex
$ npx skills add testdriverai/testdriverai --skill testdriver-client -a codex -y
Cursor
$ npx skills add testdriverai/testdriverai --skill testdriver-client -a cursor -y
Gemini CLI
$ npx skills add testdriverai/testdriverai --skill testdriver-client -a gemini-cli -y
GitHub Copilot
$ npx skills add testdriverai/testdriverai --skill testdriver-client -a github-copilot -y
OpenCode
$ npx skills add testdriverai/testdriverai --skill testdriver-client -a opencode -y
Windsurf
$ npx skills add testdriverai/testdriverai --skill testdriver-client -a windsurf -y
name: testdriver:client description: Create the TestDriver client, authenticate, and connect to a sandbox
<!-- Generated from client.mdx. DO NOT EDIT. -->
The `TestDriver` client is the main entry point for the SDK. It does the authentication and the sandbox connection. It gives access to all test methods.
const testdriver = new TestDriver(apiKey, options)
<ParamField path="apiKey" type="string" required> Your TestDriver API key from the [dashboard](https://console.testdriver.ai/settings) </ParamField>
<ParamField path="options" type="object"> The configuration options for the client. See [SDK Options](/options) for the full list, with defaults and examples for each option. </ParamField>
import TestDriver from 'testdriverai';
// API key is automatically loaded from TD_API_KEY in .env
const testdriver = new TestDriver({
os: 'windows',
resolution: '1920x1080',
logging: true,
analytics: true
});
// With AI config for stricter verification
const testdriver = new TestDriver({
ai: { temperature: 0, top: { p: 0.9, k: 40 } }
});
// Or pass API key explicitly
const testdriver = new TestDriver('your-api-key', {
os: 'windows'
});Authenticate with the TestDriver API.
await testdriver.auth()
**Returns:** `Promise<string>` - Authentication token
**Example:**
await testdriver.auth();
<Note> You must call `auth()` before `connect()`. Most examples call both sequentially. </Note>
Connect to a sandbox environment. This creates or reconnects to a virtual machine where your tests will run.
await testdriver.connect(options)
<ParamField path="options" type="object"> Connection options
<Expandable title="properties"> <ParamField path="newSandbox" type="boolean" default="false"> Force creation of a new sandbox instead of reusing an existing one </ParamField>
<ParamField path="sandboxId" type="string"> Existing sandbox ID to reconnect to </ParamField>
<ParamField path="ip" type="string"> Direct IP address to connect to (for self-hosted sandboxes) </ParamField>
<ParamField path="sandboxAmi" type="string"> AMI to use for the sandbox (AWS deployments) </ParamField>
<ParamField path="sandboxInstance" type="string"> Instance type for the sandbox (AWS deployments) </ParamField>
<ParamField path="preview" type="string" default="browser"> Preview mode for live test visualization:
</ParamField>
<ParamField path="headless" type="boolean" default="false"> **Deprecated**: Use `preview: "none"` instead. Run in headless mode without opening the debugger. </ParamField>
<ParamField path="keepAlive" type="number" default="60000"> Keep sandbox alive for the specified number of milliseconds after disconnect. Set to `0` to terminate immediately on disconnect. Useful for debugging or reconnecting to the same sandbox. </ParamField> </Expandable> </ParamField>
**Returns:** `Promise<Object>` - Sandbox instance details including `instanceId`, `ip`, `vncPort`, etc.
**Basic connection:**
await testdriver.connect();
**Reconnect to existing sandbox:**
const instance = await testdriver.connect({
sandboxId: 'existing-sandbox-id-123'
});**Self-hosted sandbox:**
await testdriver.connect({
ip: '192.168.1.100'
});Disconnect from the sandbox and clean up resources.
await testdriver.disconnect()
**Returns:** `Promise<void>`
**Example:**
afterAll(async () => {
await testdriver.disconnect();
});Get the current sandbox instance details.
const instance = testdriver.getInstance()
**Returns:** `Object | null` - Sandbox instance information
**Example:**
const instance = testdriver.getInstance();
console.log('Instance ID:', instance.instanceId);
console.log('IP Address:', instance.ip);Get the current session ID for tracking and debugging.
const sessionId = testdriver.getSessionId()
**Returns:** `string | null` - Session ID
**Example:**
const sessionId = testdriver.getSessionId();
console.log('Session:', sessionId);Enable or disable console logging at runtime.
testdriver.setLogging(enabled)
**Parameters:**
**Example:**
// Disable logging for cleanup operations testdriver.setLogging(false); await testdriver.disconnect(); testdriver.setLogging(true);
Get the event emitter for custom event handling.
const emitter = testdriver.getEmitter()
**Returns:** `EventEmitter2` - Event emitter instance
**Example:**
const emitter = testdriver.getEmitter();
emitter.on('command:start', (data) => {
console.log('Command started:', data);
});
emitter.on('command:success', (data) => {
console.log('Command succeeded:', data);
});
emitter.on('command:error', (error) => {
console.error('Command failed:', error);
});import { beforeAll, afterAll, describe, it } from 'vitest';
import TestDriver from 'testdriverai';
describe('My Test Suite', () => {
let testdriver;
beforeAll(async () => {
// Initialize client - API key loaded automatically from .env
testdriver = new TestDriver({
os: 'windows',
resolution:How the TestDriver agent behaves on GitHub issues, pull requests, and @mentions
Deploy TestDriver on your AWS infrastructure using CloudFormation
How TestDriver learns your app and caches what it discovers for instant, deterministic replays
Produce the "Playwright 1.xx API Review" artifact for a range of commits - the public API additions and the breaking or behavior…
Write, refine, run, and QA promptfoo evaluation suites: promptfooconfig.yaml, prompts, providers, vars, tests, assertions,…
DeepEval evaluation workflow for AI agents and LLM applications. TRIGGER when the user wants to evaluate or improve an AI agent,…