Skip to content
Testing
Skill

/testdriver-exec

Execute shell or PowerShell commands in the sandbox

From plugin
testdriverai
24260 skills1 agent
Install
$ npx -y skills add testdriverai/testdriverai --skill testdriver-exec --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/testdriver-exec

Context preview

The summary Claude sees to decide when to auto-load this skill.

Execute shell or PowerShell commands in the sandbox

SKILL.md

testdriver-exec.SKILL.md
name: testdriver:exec
description: Execute shell or PowerShell commands in the sandbox

<!-- Generated from exec.mdx. DO NOT EDIT. -->

Overview

Run shell commands (Linux) or PowerShell commands (Windows) in the sandbox.

Syntax

await testdriver.exec(language, code, timeout, silent)

Parameters

<ParamField path="language" type="string" required> The language to run: `'sh'` (Shell/Linux) or `'pwsh'` (PowerShell/Windows) </ParamField>

<ParamField path="code" type="string" required> The code or the command to run </ParamField>

<ParamField path="timeout" type="number" required> The timeout in milliseconds </ParamField>

<ParamField path="silent" type="boolean" default="false"> If `true`, TestDriver does not show the output </ParamField>

Returns

`Promise<string>` - The command output

Shell Execution (Linux)

Run shell commands in the Linux sandbox.

Basic Commands

// List files
const files = await testdriver.exec('sh', 'ls -la', 5000);

// Check current directory
const pwd = await testdriver.exec('sh', 'pwd', 5000);

// Run a script
await testdriver.exec('sh', './setup.sh', 60000);

File Operations

// Create a file
await testdriver.exec('sh', 'echo "Hello World" > test.txt', 5000);

// Read a file
const content = await testdriver.exec('sh', 'cat test.txt', 5000);

// Copy files
await testdriver.exec('sh', 'cp source.txt dest.txt', 5000);

// Delete files
await testdriver.exec('sh', 'rm test.txt', 5000);

PowerShell Execution (Windows)

Execute PowerShell commands in the Windows sandbox.

Software Installation

// Install npm package globally
await testdriver.exec('pwsh', 'npm install -g http-server', 30000);

// Install via Chocolatey
await testdriver.exec('pwsh', 'choco install firefox -y', 60000);

// Download and run installer
await testdriver.exec('pwsh', `
  Invoke-WebRequest -Uri "https://example.com/setup.exe" -OutFile "C:\\setup.exe"
  Start-Process -FilePath "C:\\setup.exe" -ArgumentList "/S" -Wait
`, 120000);

File Operations

// Create a file
await testdriver.exec('pwsh', `
  Set-Content -Path "C:\\test.txt" -Value "Hello World"
`, 5000);

// Read a file
const content = await testdriver.exec('pwsh', 
  'Get-Content -Path "C:\\test.txt"', 
  5000
);

// Copy files
await testdriver.exec('pwsh', 
  'Copy-Item -Path "C:\\source.txt" -Destination "C:\\dest.txt"', 
  5000
);

// Delete files
await testdriver.exec('pwsh', 
  'Remove-Item -Path "C:\\test.txt"', 
  5000
);

// List directory
const files = await testdriver.exec('pwsh', 
  'Get-ChildItem -Path "C:\\Users\\testdriver\\Documents"', 
  5000
);

Process Management

// List running processes
const processes = await testdriver.exec('pwsh', 'Get-Process', 5000);

// Start application
await testdriver.exec('pwsh', `
  Start-Process "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" -ArgumentList "--start-maximized", "https://example.com"
`, 5000);

// Kill a process
await testdriver.exec('pwsh', 'Stop-Process -Name "chrome" -Force', 5000);

// Wait for process
await testdriver.exec('pwsh', 'Start-Process notepad -Wait', 30000);

Environment Variables

// Set environment variable (session)
await testdriver.exec('pwsh', '$env:MY_VAR = "value"', 5000);

// Get environment variable
const value = await testdriver.exec('pwsh', '$env:MY_VAR', 5000);

// Set persistent environment variable
await testdriver.exec('pwsh', `
  [Environment]::SetEnvironmentVariable("MY_VAR", "value", "User")
`, 5000);

Network Operations

// Test connectivity
const pingResult = await testdriver.exec('pwsh', 
  'Test-NetConnection google.com', 
  10000
);

// Download file
await testdriver.exec('pwsh', `
  Invoke-WebRequest -Uri "https://example.com/file.zip" -OutFile "C:\\Downloads\\file.zip"
`, 30000);

// Check if port is open
const portOpen = await testdriver.exec('pwsh', 
  'Test-NetConnection -ComputerName localhost -Port 3000', 
  5000
);

Silent Execution

Suppress output for background operations:

// Silent installation
await testdriver.exec('pwsh', 'npm install -g some-package', 30000, true);

// Start background process
await testdriver.exec('pwsh', 'Start-Process notepad', 5000, true);

// Run setup script silently
await testdriver.exec('pwsh', '.\\setup.ps1', 60000, true);

Best Practices

<Check> **Use appropriate timeouts**

  // Quick operations: 5000ms
  await testdriver.exec('sh', 'ls -la', 5000);
  
  // Installations: 30000-60000ms
  await testdriver.exec('pwsh', 'npm install -g package', 30000);
  
  // Downloads or complex operations: 60000-120000ms
  await testdriver.exec('pwsh', 'Install-Module Something', 120000);

</Check>

<Check> **Handle errors gracefully**

  try {
    await testdriver.exec('pwsh', 'Some-Command', 5000);
  } catch (error) {
    console.error('Command failed:', error.message);
    // Fallback or retry logic
  }

</Check>

<Check> **Use silent mode for background tasks**

  // Silent install
  await testdriver.exec('pwsh', 'npm install -g tool', 30000, true);
  
  // Background service
  await testdriver.exec('pwsh', 'Start-Service MyService', 5000, true);

</Check>

<Warning> **Escape strings properly in PowerShell**

Use proper escaping for special characters:

  // Use backticks for newlines
  await testdriver.exec('pwsh', `
    Write-Host "Line 1\`nLine 2"
  `, 5000);
  
  // Use single quotes to avoid variable expansion
  await testdriver.exec('pwsh', 
    "Write-Host 'Text with $special chars'", 
    5000
  );

</Warning>

Complete Example

import { beforeAll, afterAll, describe, it } from 'vitest';
import TestDriver from 'testdriverai';

describe('Code Execution', () => {
  let testdriver;

  beforeAll(async () => {
    client = new TestDriver(proce
Read more
Ships withtestdriverai

Computer-Use SDK for E2E QA Testing

Get the whole plugin

Other skills on testdriverai.