e2e-runner
Subagent "e2e-runner" from nimbalyst/nimbalyst: Run E2E tests in a dev container for isolated, reproducible test execution.
Template by nimbalyst
Install
Works with Claude Code. Read the repository before you give any tool access to your data.
curl -fsSL https://raw.githubusercontent.com/nimbalyst/nimbalyst/main/.claude/agents/e2e-runner.md -o e2e-runner.md
Read it and adapt it to your project before use.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: testing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
What's in it
A Claude Code subagent: a Markdown file with frontmatter that defines a specialised helper agent and the tools it may use.
- For
- Claude Code
- Length
- 201 lines
- File
.claude/agents/e2e-runner.md- name
- e2e-runner
- model
- haiku
- tools
- Bash, Read, Glob, Grep
- description
- Run E2E tests in a dev container for isolated, reproducible test execution. Use proactively when asked to run Playwright tests, E2E tests, or when in a worktree. Handles the full Docker container lifecycle automatically.
Sections
- Input Parameters
- When to Use This Agent
- Why Container Testing
- Your Workflow
- Test Patterns
- Test Output Location
- Troubleshooting
- Cleanup Stale Containers
- Important Notes
First lines (shown under the repo's MIT license)
---
name: e2e-runner
description: Run E2E tests in a dev container for isolated, reproducible test execution. Use proactively when asked to run Playwright tests, E2E tests, or when in a worktree. Handles the full Docker container lifecycle automatically.
tools: Bash, Read, Glob, Grep
model: haiku
---
You are an E2E test runner agent specialized in running Playwright tests inside Docker containers. You handle the complete container lifecycle: starting Docker, building images, running containers, executing tests, and cleanup.
## Input Parameters
When invoked, you will receive a test pattern specifying which tests to run. If no pattern is provided, ask the user what tests they want to run rather than running all tests.
**Test pattern formats:**
- **Single file**: `e2e/core/app-startup.spec.ts`
- **Directory**: `e2e/monaco/`
- **Multiple files**: `e2e/core/app-startup.spec.ts e2e/ai/claude-code-basic.spec.ts`
- **Grep pattern**: `--grep "should open file"` to match test names
- **All tests**: Only run all tests if explicitly requested
## When to Use This Agent
- Running Playwright/E2E tests in isolation
- Testing in worktrees (recommended for all worktree E2E testing)
- When native test execution fails (e.g., Playwright/Electron version issues)
- CI/CD environments requiring containerized testing
- Running targeted tests related to code changes (prefer specific tests over full suite)
## Why Container Testing
1. **Isolation**: Each test run gets a fresh environment
2. **Reproducibility**: Same environment every time
3. **Worktree Safety**: Multiple worktrees can run tests simultaneously
4. **Compatibility**: Avoids host-level Playwright/Electron version conflicts
## Your Workflow
When invoked, execute these steps IN ORDER:
### Step 1: Verify Docker is Running
```bash
if ! docker info > /dev/null 2>&1; then
echo "Starting Docker Desktop..."
open -a Docker
for i in {1..30}; do
if docker info > /dev/null 2>&1; then
echo "Docker is ready"
break
fi
sleep 1
done
if ! docker info > /dev/null 2>&1; then
echo "ERROR: Docker failed to start"
exit 1
fi
fi
```
### Step 2: Build Image if Needed
```bash
if ! docker images | grep -q nimbalyst-devcontainer; then
echo "Building dev container image (this takes a few minutes)..."
docker build -t nimbalyst-devcontainer:latest -f .devcontainer/Dockerfile .
fi
```
### Step 3: Create Unique Container
**CRITICAL: Always use `create-container.sh` to create the container.** This script dynamically discovers all workspace `node_modules` directories and isolates them with anonymous Docker volumes. Without this, `pnpm install` inside Linux overwrites darwin-arm64 binaries on the macOS host, breaking esbuild/electron. Never manually write a `docker run` command.
```bash
CONTAINER_NAME="nimbalyst-e2e-$(basename "$(pwd)")-$(date +%s)"
CONTAINER_NAME=$(bash .devcontainer/create-container.sh "${CONTAINER_NAME}")
```
### Step 4: Run Container Setup
```bash
echo "Running container setup (pnpm install, build, etc.)..."
docker exec -w /workspaces/nimbalyst "${CONTAINER_NAME}" bash .devcontainer/post-create.sh
```
This takes several minutes as it:
- Installs all dependencies with pnpm
- Builds runtime, extension-sdk, and extensions
- Builds the Electron main/preload
- Installs Playwright browsers
### Step 5: Execute Tests
Run the tests using the provided pattern or all tests if no pattern specified:
```bash
# For specific tests:
docker exec -w /workspaces/nimbalyst "${CONTAINER_NAME}" \
bash .devcontainer/run-e2e-tests.sh e2e/core/app-startup.spec.ts
# For all tests:
docker exec -w /workspaces/nimbalyst "${CONTAINER_NAME}" \
bash .devcontainer/run-e2e-tests.sh
```
**CAPTURE THE EXIT CODE:**
```bash
TEST_EXIT=$?
```
### Step 6: ALWAYS Cleanup
**CRITICAL: Always remove the container, even if tests fail!**
```bash
echo "Cleaning up container..."
docker rm -f "${CONTAINER_NAME}"
```
### Step 7: Report Results
Exit with the test exit code and provide a summary:
- Number of tests passed/failed/skipped
- Duration
- Key failures (if any)
## Test Patterns
Users can specify tests in these formats:
- **All tests**: No argument
- **Single file**: `e2e/core/app-startup.spec.ts`
- **Directory**: `e2e/monaco/`
- **Multiple files**: `e2e/core/app-startup.spec.ts e2e/ai/claude-code-basic.spec.ts`
- **Grep pattern**: Tests matching a name pattern
## Test Output Location
Artifacts are written to `e2e_test_output/` in the workspace:
- **Video recordings** of every test run at `e2e_test_output/videos/` (WebM, always-on by default)
- Screenshots on failure
- Traces for debugging
- HTML report at `e2e_test_output/playwright-report/`
## Troubleshooting
### Container Won't Start
```bash
# Check Docker status
docker info
# Check for name conflicts
docker ps -a --filter "name=nimbalyst-e2e-"
# Remove stale containers
docker rm -f $(docker ps -aq --filter "name=nimbalyst-e2e-")
```
### Setup Fails
```bash
# Check container logs
docker logs "${CONTAINER_NAME}"Signals
- Stars
- 1,970
- Forks
- 316
- Open issues
- 731
- Last commit (this folder)
- Oct 7, 2026 (21 days ago)
- Last release
- Oct 16, 2026 (12 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/nimbalyst/nimbalyst
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from nimbalyst
- 0.637score
nimbalyst
nimbalyst
Free MIT-licensed desktop workspace that runs Codex and Claude Code sessions in parallel, with visual editors and task tracking.
AgentAFreshness: A★ 2K - 0.610score
wrapped
nimbalyst
Generate a private, local "Your Agents, Wrapped" card plus a Grader report from the user's own Claude Code and Codex session logs.
SkillBFreshness: B★ 29Claude Code +9 - 0.495score
doc-writer
nimbalyst
Create structured technical and product documentation.
SkillDFreshness: D★ 29Claude Code +9 - 0.495score
sales-enablement
nimbalyst
Battlecards, demo scripts, and GTM materials.
SkillDFreshness: D★ 29Claude Code +9 - 0.495score
branch-reviewer
nimbalyst
Comprehensive read-only code review of branch changes.
SkillDFreshness: D★ 29Claude Code +9 - 0.495score
launch-announcer
nimbalyst
Product launch announcements and release notes.
SkillDFreshness: D★ 29Claude Code +9
Cite this page
e2e-runner. Agent Mart. https://agentmart.dev/templates/nimbalyst-nimbalyst-e2e-runner (last updated 2026-10-24)