| name | test |
| description | Runs lint, type check, tests, and visual verification. Auto-detects tools. Use when running tests, linting, type checking, or writing tests. |
| argument-hint | <run | write | browser | electron | all> [staged | branch] |
Arguments: $ARGUMENTS
| Command | Behavior |
|---|
run | Lint + type check + run tests |
write | Generate tests, then run pipeline |
browser | Visual verification (web apps) |
electron | Visual verification (Electron/VS Code apps) |
all | run + browser/electron combined |
Scope (optional, default: branch):
| Scope | Command |
|---|
branch | git diff main...HEAD --name-only |
staged | git diff --cached --name-only |
Run Mode
1. Detect Tools
| Config | Tool | Command |
|---|
package.json + vitest | Vitest | npx vitest run |
package.json + jest | Jest | npx jest |
package.json + "test" | npm | npm test |
pyproject.toml | pytest | pytest |
Cargo.toml | cargo | cargo test |
go.mod | go | go test ./... |
.eslintrc* / eslint.config.* | ESLint | npx eslint . |
biome.json | Biome | npx biome check . |
tsconfig.json | TypeScript | npx tsc --noEmit |
2. Setup (if missing)
npm install -D vitest
npm install -D eslint @eslint/js
npm install -D typescript && npx tsc --init
pip install pytest ruff mypy
3. Run Pipeline
npx eslint . --fix
npx tsc --noEmit
npx vitest run
Fix errors, re-run until all pass.
Write Mode
1. Get Changed Files
git diff main...HEAD --name-only
git diff --cached --name-only
Filter to source files (exclude tests, configs, docs).
2. Launch Test Writers
Delegate files to the test-writer subagent (persona in agents/test-writer.md). It determines testability and writes tests.
| Files | Subagents |
|---|
| 1-3 | 1 |
| 4-8 | 2-3 |
| 9+ | 3-5 |
spawn subagent(role="test-writer", prompt="Write tests for: [file list]. Runner: vitest. Convention: *.test.ts")
3. Run Pipeline
Same as Run Mode step 3.
Browser Mode
Visual verification for web apps. The legacy standalone UI automation workflow has been removed; use the host environment's available browser automation tool directly.
- Detect dev server URL from package.json or running processes
- Open the URL, capture an accessibility/DOM snapshot, interact through semantic selectors, and take screenshots
- Screenshots go to
.otto/test-screenshots/
- Cleanup any browser session/tool process and remove
.otto/test-screenshots when no longer needed
Electron Mode
Visual verification for Electron/VS Code apps. The legacy standalone UI automation workflow has been removed; use the app's project-specific harness first when available, otherwise use the host environment's available browser automation tool directly.
- Detect app type:
engines.vscode in package.json → VS Code extension, electron in dependencies → Electron app
- Build first:
npm run compile
- Launch with CDP/automation hooks, connect, inspect snapshots/webviews, interact through semantic selectors, and take screenshots
- Screenshots go to
.otto/test-screenshots/
- Cleanup browser/app processes and remove
.otto/test-screenshots when no longer needed
All Mode
- Run Mode (lint, type check, test)
- Auto-detect: web → Browser Mode, Electron/VS Code → Electron Mode
- Report results