the-controller-general-e2e-eval
Use when validating UI changes end-to-end in any project before claiming work is complete — runs Playwright tests against the project's dev server to prove…
Skill by kwannoel
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/kwannoel-the-controller-general-e2e-eval
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
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: design, backend, testing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/the-controller-general-e2e-eval
What's inside
- Skill name
the-controller-general-e2e-eval- Description
- Use when validating UI changes end-to-end in any project before claiming work is complete — runs Playwright tests against the project's dev server to prove user stories work
- License
- MIT
- Instructions
- 214 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# General E2E Eval — User Story Validation
## When to Use
You've made a UI change in any web project and need to prove it works from the user's perspective — not "it compiles" or "the DOM element exists," but "the user can do the thing and see the result."
Use this skill for projects that don't have a custom eval script. If the project has `e2e/eval.sh` or similar, use the project-specific eval skill instead.
## Hard Rules
These are non-negotiable. Every test must follow all of them.
### 1. User story first, always
Before writing a single line of test code, state the user story:
- **Actor**: Who is performing the action (e.g., "a logged-in user on the settings page")
- **Action**: What they physically do (e.g., "clicks 'Save' after changing their display name")
- **Outcome**: What they expect to see (e.g., "a success toast appears and the new name is shown in the header")
The test's **final assertion** must verify the **outcome**. If the outcome doesn't happen, the test fails. No exceptions.
### 2. No silent passes
**BANNED** — the `if (visible)` escape hatch:
```typescript
// NEVER DO THIS — silently passes when the feature is broken
const visible = await foo.isVisible().catch(() => false);
if (visible) {
await expect(foo).toHaveText("expected");
}
```
**REQUIRED** — unconditional assertion with a timeout:
```typescript
// DO THIS — fails loudly when the feature is broken
await expect(foo).toBeVisible({ timeout: 10_000 });
await expect(foo).toHaveText("expected");
```
If the element should be there, assert it. If it might legitimately not be there, that's a different test or a precondition you need to set up.
### 3. No mocking the interface
- **No `page.evaluate()` to set store state** when a real interaction exists. If the user clicks a button to open a modal, the test clicks the button.
- **No synthetic `dispatchEvent(new KeyboardEvent(...))`** — use `page.keyboard.press()`.
- **No stubbing API responses** — the test runs against a real dev server.
The only acceptable use of `page.evaluate()` is to **read** state for assertions (e.g., checking a computed style), never to **write** state that bypasses the UI.
### 4. Assert outcomes, not implementation
**WRONG** — asserting CSS values and class names:
```typescript
// This proves the DOM exists, not that the feature works
await expect(page.locator(".search-results")).toBeVisible();
await expect(page.locator(".search-input")).toHaveClass(/active/);
```
**RIGHT** — asserting what the user sees after the action:
```typescript
// This proves the feature works end-to-end
await page.locator('[placeholder="Search..."]').fill("playwright");
await page.keyboard.press("Enter");
await expect(
page.locator('[data-testid="search-results"]').locator("article")
).toHaveCount(3, { timeout: 10_000 });
await expect(page.locator("article").first()).toContainText("playwright");
```
Structure checks (element exists, layout is correct) are fine as **preconditions** or **smoke tests**, but they are not user story validation. The final assertion must be about the **result of the user's action**.
### 5. One story per test
Each `test()` block validates exactly one user story. Don't bundle "log in AND update profile AND log out" into one test. The log-out is cleanup, not a story.
### 6. Timeouts reflect reality
If an action triggers an async operation (e.g., API call, server-side rendering, AI generation), the timeout must be long enough for it to complete in CI. Use 60s for AI/generation operations, 10s for navigation, 30s for server-dependent renders.
## Steps
### 1. Ensure Playwright is installed
Check if the project has Playwright configured:
```bash
ls playwright.config.{ts,js,mjs} 2>/dev/null
```
If missing, initialize:
```bash
npm init playwright@latest
# or: pnpm create playwright / yarn create playwright
```
### 2. Configure the dev server
Playwright can automatically start your dev server. Ensure `playwright.config.ts` has a `webServer` block:
```typescript
// playwright.config.ts
export default defineConfig({
webServer: {
command: "npm run dev", // match your project's dev command
port: 3000, // match your dev server's port
reuseExistingServer: true,
},
// ...
});
```
If the project has **multiple servers** (e.g., a separate API backend):From kwannoel/the-controller, MIT.
More from kwannoel/the-controller
- 0.486score
agent-browser
kwannoel
Use when the user wants browser automation against an existing Chrome or Chromium tab, especially to reuse a real logged-in session without reauthenticating.
SkillDFreshness: D★ 13Claude Code +9 - 0.485score
the-controller-writing
kwannoel
Remove AI writing patterns from prose.
SkillDFreshness: D★ 13Claude Code +9 - 0.481score
the-controller-setting-credentials
kwannoel
Use when an agent needs to set an API key, secret, or credential in a project .env file — ensures secrets never leak into terminal output or conversation…
SkillDFreshness: D★ 13Claude Code +9 - 0.481score
the-controller-finishing-a-development-branch
kwannoel
Use when implementation is complete and you need to merge the branch — verifies tests, rebases, creates PR, squash merges, deletes remote branch, syncs local…
SkillDFreshness: D★ 13Claude Code +9 - 0.481score
the-controller-e2e-eval
kwannoel
Use when validating UI changes end-to-end before claiming work is complete — spawns a fresh server pair from the worktree and runs Playwright tests against it
SkillDFreshness: D★ 13Claude Code +9 - 0.481score
the-controller-validating-agent-applications
kwannoel
Use when building or modifying applications that use AI agents, before shipping or claiming the application works - requires end-to-end validation that…
SkillDFreshness: D★ 13Claude Code +9 - 0.480score
the-controller-autonomous-execution
kwannoel
Use when executing an implementation plan fully autonomously without human interaction
SkillDFreshness: D★ 13Claude Code +9 - 0.477score
the-controller-debugging-ui-with-playwright
kwannoel
Use when a UI behavior doesn't work as expected (key not responding, focus lost, mode not changing) and code reading alone isn't enough — runs Playwright in…
SkillDFreshness: D★ 13Claude Code +9 - 0.476score
the-controller-synchronizing-skills
kwannoel
Use when a new skill has been added to the repo and needs to be symlinked into ~/.claude/skills/ and ~/.codex/skills/custom/ so Claude Code and Codex can…
SkillDFreshness: D★ 13Claude Code +9 - 0.472score
firefox-browser
kwannoel
Firefox browser automation for AI agents using Playwright.
SkillDFreshness: D★ 13Claude Code +9 - 0.472score
the-controller-feedback-widget
kwannoel
Set up an in-app feedback widget with screenshot capture, canvas annotation, and GitHub issue creation.
SkillDFreshness: D★ 13Claude Code +9 - 0.456score
the-controller-receiving-code-review
kwannoel
Use when receiving code review feedback, before implementing suggestions, especially if feedback seems unclear or technically questionable - requires…
SkillDFreshness: D★ 13Claude Code +9
Signals
- Stars
- 13
- Forks
- 2
- Open issues
- 60
- Last commit (this folder)
- Mar 17, 2026 (7 months ago)
- Last release
- Mar 8, 2026 (7 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/kwannoel/the-controller
- Website
- noelkwan.xyz/ctrl
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from kwannoel
- 0.486score
agent-browser
kwannoel
Use when the user wants browser automation against an existing Chrome or Chromium tab, especially to reuse a real logged-in session without reauthenticating.
SkillDFreshness: D★ 13Claude Code +9 - 0.485score
the-controller-writing
kwannoel
Remove AI writing patterns from prose.
SkillDFreshness: D★ 13Claude Code +9 - 0.481score
the-controller-e2e-eval
kwannoel
Use when validating UI changes end-to-end before claiming work is complete — spawns a fresh server pair from the worktree and runs Playwright tests against it
SkillDFreshness: D★ 13Claude Code +9 - 0.481score
the-controller-finishing-a-development-branch
kwannoel
Use when implementation is complete and you need to merge the branch — verifies tests, rebases, creates PR, squash merges, deletes remote branch, syncs local…
SkillDFreshness: D★ 13Claude Code +9 - 0.481score
the-controller-setting-credentials
kwannoel
Use when an agent needs to set an API key, secret, or credential in a project .env file — ensures secrets never leak into terminal output or conversation…
SkillDFreshness: D★ 13Claude Code +9 - 0.481score
the-controller-validating-agent-applications
kwannoel
Use when building or modifying applications that use AI agents, before shipping or claiming the application works - requires end-to-end validation that…
SkillDFreshness: D★ 13Claude Code +9
Cite this page
the-controller-general-e2e-eval skill. Agent Mart. https://agentmart.dev/skills/kwannoel-the-controller-general-e2e-eval (last updated 2026-10-24)