browser-test
Code-as-action browser testing: verify UI changes and user flows by writing re-runnable Playwright scripts, capturing screenshots/console/network evidence…
Skill by TheophilusChinomona
Chalk Labs
Need help deploying browser-test?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
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/theophiluschinomona-browser-test-06119a
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, testing, writing
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/browser-test
What's inside
- Skill name
browser-test- Description
- Code-as-action browser testing: verify UI changes and user flows by writing re-runnable Playwright scripts, capturing screenshots/console/network evidence, and producing test reports. Use when verifying a web feature in a real browser, reproducing a UI bug, smoke-testing a flow after changes, or asked to test the site / run browser tests.
- License
- MIT
- Instructions
- 118 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Browser Test — Code-as-Action Browser Verification
Verify web features by **writing Playwright scripts, not by imagining what a
browser would show**. The script is the durable artifact: it lands in the
project's test library and re-runs on every future change to that flow.
(Concept adapted from Microsoft's Webwright: treat the browser as a
disposable environment your code spawns; the workspace — scripts, logs,
screenshots — is the state.)
## State layout
```
.claude/idev/browser-tests/
├── scripts/ # one script per flow — the accumulated E2E library
├── artifacts/ # screenshots, console/network logs per run (gitignorable)
└── reports/ # structured test reports
```
## Setup detection (in order)
1. Project already has `@playwright/test` in package.json → use it
(`npx playwright test`). Respect the project's `playwright.config.*`.
2. Python `playwright` importable → use the sync API
(`python3 script.py`).
3. Neither → tell the user the one-time setup
(`npm i -D @playwright/test && npx playwright install chromium`) and ask
before installing anything.
## Script conventions
- **Reuse first**: grep `scripts/` for the flow before writing a new script.
Adapt and parameterize an existing one rather than duplicating it.
- **One flow per script**, named for the flow: `login-flow.spec.ts`,
`checkout-smoke.spec.ts`.
- **Base URL from env**, never hardcoded:
`const BASE = process.env.BASE_URL ?? 'http://localhost:3000'` — scripts
must run against dev, staging, or CI unchanged.
- **Assert real outcomes**, not just "page loaded": visible text, URL after
navigation, row counts, toast messages. Prefer role/label selectors
(`getByRole`, `getByLabel`) over CSS chains — they survive refactors.
- **Capture evidence on every run**: screenshot at each key step and on
failure; collect console errors and failed network requests:
```ts
import { test, expect } from '@playwright/test';
const BASE = process.env.BASE_URL ?? 'http://localhost:3000';
test('user can log in', async ({ page }) => {
const consoleErrors: string[] = [];
page.on('console', m => m.type() === 'error' && consoleErrors.push(m.text()));
page.on('requestfailed', r => consoleErrors.push(`NET ${r.url()}`));
await page.goto(`${BASE}/login`);
await page.getByLabel('Email').fill(process.env.TEST_USER ?? 'test@example.com');
await page.getByLabel('Password').fill(process.env.TEST_PASS ?? 'test');
await page.getByRole('button', { name: 'Sign in' }).click();
await expect(page).toHaveURL(/dashboard/);
await page.screenshot({ path: '.claude/idev/browser-tests/artifacts/login-ok.png' });
expect(consoleErrors, `console/network errors: ${consoleErrors}`).toHaveLength(0);
});
```
- **Credentials via env vars only** (`TEST_USER`, `TEST_PASS`) — never
commit secrets into scripts; note required vars at the top of the script.
- Headless by default; headed only while debugging a script.
## Failure discipline (the important part)
When a run fails, classify before acting:
- **Script bug** (wrong selector, missing wait, bad assumption) → fix the
script and re-run. Max 3 repair iterations; then report what's blocking.
- **App bug** (console error, failed request, wrong behavior) → do NOT
silently change the app to make the test pass. Capture the evidence
(screenshot, error text, request) and report it as a finding.
- **Environment issue** (server not running, missing test data) → report
what's needed; see the project's run conventions.
## Report format
Write to `reports/<YYYY-MM-DD>-<flow>.md`:
```markdown
# Browser Test Report: <flow> — <date>
Target: <BASE_URL> Script: scripts/<name> Result: PASS | FAIL
| # | Check | Result | Evidence |
|---|-------|--------|----------|
| 1 | login redirects to /dashboard | PASS | artifacts/login-ok.png |
| 2 | zero console errors | FAIL | "TypeError: x is undefined" |
## App bugs found
- <error + repro + evidence path> (also log per the lessons-learned skill if recurring)
## Not covered
- <flows/states this run did not exercise>
```
Report only what actually ran — no inferred results. If a check didn't
execute, it's "not covered", not "pass".
## Anti-patterns
- Verifying UI changes by reading the JSX/HTML and declaring it works —
that's what this skill exists to replace.
- Writing a throwaway script and deleting it — save it to `scripts/`; the
library is the point.
- `waitForTimeout(3000)` sprinkled to "fix" flakiness — wait for conditions
(`expect(...).toBeVisible()`, `waitForURL`) instead.
- Testing through 10 UI steps what one API call could set up — use the API
for arrange, the browser for act/assert.
---
Concept adapted from [Webwright](https://github.com/microsoft/Webwright)
(MIT, © Microsoft Corporation).From TheophilusChinomona/idev, MIT.
More from TheophilusChinomona/idev
- 0.521score
branch-sync
TheophilusChinomona
Syncs the current feature branch with the team base branch (merge base into feature) before creating a PR, resolving merge conflicts safely with build/test…
SkillBFreshness: BClaude Code +9 - 0.517score
browse
TheophilusChinomona
Interactive browser QA using xd://browser or (optionally) the gstack browse binary for headed mode.
SkillBFreshness: BClaude Code +9 - 0.516score
eval-harness
TheophilusChinomona
Evaluation framework for capability and regression evals with pass@k metrics.
SkillBFreshness: BClaude Code +9 - 0.516score
env-preflight
TheophilusChinomona
Session environment sanity check — verifies cwd is the repo root, git auth is live, DB env vars are present, and reports active sandbox constraints.
SkillBFreshness: BClaude Code +9 - 0.516score
db-preflight
TheophilusChinomona
Scans DBScripts/ folder for unapplied database migrations and surfaces them before builds or at session start.
SkillBFreshness: BClaude Code +9 - 0.516score
context-switching
TheophilusChinomona
Switches between development modes (dev, review, research) by loading the appropriate context.
SkillBFreshness: BClaude Code +9 - 0.516score
continuous-learning
TheophilusChinomona
Automatically extracts reusable patterns from sessions and saves them as learned skills.
SkillBFreshness: BClaude Code +9 - 0.513score
build-check
TheophilusChinomona
Auto-detects the project's build system and runs compile/type-check after file changes, auto-fixing straightforward errors (max 3 attempts).
SkillBFreshness: BClaude Code +9 - 0.513score
api-contract-validation
TheophilusChinomona
Discovers and validates API endpoints between frontend and backend.
SkillBFreshness: BClaude Code +9 - 0.508score
file-index
TheophilusChinomona
DEPRECATED — Use smart-context for feature-to-file lookups.
SkillBFreshness: BClaude Code +9 - 0.508score
architecture-scanner
TheophilusChinomona
DEPRECATED — Use project-map, backend-patterns, and frontend-patterns instead.
SkillBFreshness: BClaude Code +9 - 0.472score
auto-learning
TheophilusChinomona
Instinct-based learning system that observes sessions via hooks and evolves patterns into skills/commands/agents.
SkillCFreshness: CClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Jun 12, 2026 (4 months ago)
- Last release
- Jun 25, 2026 (4 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/TheophilusChinomona/idev
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from TheophilusChinomona
- 0.521score
branch-sync
TheophilusChinomona
Syncs the current feature branch with the team base branch (merge base into feature) before creating a PR, resolving merge conflicts safely with build/test…
SkillBFreshness: BClaude Code +9 - 0.517score
browse
TheophilusChinomona
Interactive browser QA using xd://browser or (optionally) the gstack browse binary for headed mode.
SkillBFreshness: BClaude Code +9 - 0.516score
db-preflight
TheophilusChinomona
Scans DBScripts/ folder for unapplied database migrations and surfaces them before builds or at session start.
SkillBFreshness: BClaude Code +9 - 0.516score
context-switching
TheophilusChinomona
Switches between development modes (dev, review, research) by loading the appropriate context.
SkillBFreshness: BClaude Code +9 - 0.516score
continuous-learning
TheophilusChinomona
Automatically extracts reusable patterns from sessions and saves them as learned skills.
SkillBFreshness: BClaude Code +9 - 0.516score
env-preflight
TheophilusChinomona
Session environment sanity check — verifies cwd is the repo root, git auth is live, DB env vars are present, and reports active sandbox constraints.
SkillBFreshness: BClaude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get browser-test running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
browser-test skill. Agent Mart. https://agentmart.dev/skills/theophiluschinomona-browser-test-06119a (last updated 2026-10-24)