browser-verify
Drive UI parcels through bundled-Chromium headless Playwright via webapp-testing's with_server.py + ProofShot bundle.
Skill by youssefKadaouiAbbassi
Install
Works with Claude Code. Read the repository before you give any tool access to your data.
npx agentmarket install skill/youssefkadaouiabbassi-browser-verify
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
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-verify
Tools it pre-approves 8
From allowed-tools in SKILL.md: the agent may use these without asking you each time.
Bash,Read,Write,Edit,Grep,Glob,Task,WebFetch
What's inside
- Skill name
browser-verify- Description
- Drive UI parcels through bundled-Chromium headless Playwright via webapp-testing's with_server.py + ProofShot bundle.
- License
- MIT
- Allowed tools
- Bash,, Read,, Write,, Edit,, Grep,, Glob,, Task,, WebFetch
- Instructions
- 97 lines in SKILL.md · view on GitHub
Before installing
- Pre-approves some shell commands
Files (1)
- SKILL.md
SKILL.md (first lines)
# browser-verify runbook
Bundled Chromium, headless, fresh launch. NOT host browser.
Delegate driving to `browser-driver` subagent.
## 1. Detect dev server
```bash
PARCEL_ID="$1"
mkdir -p .forge/browser/$PARCEL_ID
DEV_CMD=$(jq -r '.scripts.dev // .scripts.start // empty' package.json 2>/dev/null)
[ -z "$DEV_CMD" ] && { echo '{"gate":"browser-verify","result":"skip","reason":"no-dev-script"}' > ".forge/browser/${PARCEL_ID}.json"; exit 0; }
PORT=$(echo "$DEV_CMD" | grep -oE 'port[ =:]*[0-9]+' | grep -oE '[0-9]+' | head -1)
PORT=${PORT:-3000}
URL="http://localhost:$PORT"
```
## 2. Boot dev server via webapp-testing's with_server.py wrapper
```bash
# Use anthropics/skills:webapp-testing's with_server.py — handles boot timeout, ready probe, teardown.
python3 -m webapp_testing.with_server --cmd "$DEV_CMD" --port "$PORT" --ready-path / --timeout 30 &
WT_PID=$!
echo "$WT_PID" > .forge/browser/$PARCEL_ID/with_server.pid
```
## 3. Drive via Playwright headless
```bash
cat > .forge/browser/$PARCEL_ID/drive.spec.ts <<EOF
import { test, expect } from "@playwright/test";
test.use({ baseURL: "$URL", trace: "on", screenshot: "only-on-failure", video: "retain-on-failure" });
test("smoke", async ({ page }) => {
const consoleErrors: string[] = [];
const networkFails: string[] = [];
page.on("console", (m) => m.type() === "error" && consoleErrors.push(m.text()));
page.on("response", (r) => r.status() >= 400 && networkFails.push(\`\${r.status()} \${r.url()}\`));
await page.goto("/");
await page.screenshot({ path: ".forge/browser/$PARCEL_ID/home.png", fullPage: true });
// Subagent inserts parcel-specific user-flow steps here.
expect(consoleErrors).toEqual([]);
expect(networkFails).toEqual([]);
});
EOF
bunx playwright test .forge/browser/$PARCEL_ID/drive.spec.ts \
--reporter json \
--output .forge/browser/$PARCEL_ID/test-results \
> .forge/browser/$PARCEL_ID/playwright-result.json 2>&1
PLAYWRIGHT_EXIT=$?
```
## 4. Bundle via proofshot
```bash
proofshot bundle .forge/browser/$PARCEL_ID --output .forge/browser/$PARCEL_ID.proofshot
```
## 5. Tear down
```bash
kill -TERM $(cat .forge/browser/$PARCEL_ID/with_server.pid) 2>/dev/null || true
rm -rf .forge/browser/$PARCEL_ID/.cache 2>/dev/null || true
```
## 6. Gate
```bash
CONSOLE_ERRS=0
NETWORK_FAILS=0
[ -f .forge/browser/$PARCEL_ID/playwright-result.json ] && {
CONSOLE_ERRS=$(jq -r '[.suites[].specs[].tests[].results[].errors[]?] | length' .forge/browser/$PARCEL_ID/playwright-result.json 2>/dev/null || echo 0)
}
RESULT=$([ "$PLAYWRIGHT_EXIT" -eq 0 ] && echo PASS || echo BLOCK)
cat > .forge/browser/$PARCEL_ID.json <<EOF
{
"gate": "browser-verify",
"parcel": "$PARCEL_ID",
"url": "$URL",
"console_errors": $CONSOLE_ERRS,
"network_4xx_5xx": $NETWORK_FAILS,
"playwright_exit": $PLAYWRIGHT_EXIT,
"bundle": ".forge/browser/$PARCEL_ID.proofshot",
"result": "$RESULT"
}
EOF
echo "browser-verify: $URL · $CONSOLE_ERRS console errors · $NETWORK_FAILS 4xx/5xx · gate $RESULT"
```
Ship-blocking conditions: any console error, any same-origin 4xx/5xx, any flow timeout, Playwright crash.From youssefKadaouiAbbassi/yka-code, MIT.
More from youssefKadaouiAbbassi/yka-code
- 0.471score
hooks-disable
youssefKadaouiAbbassi
[yka-code] Disable a yka-code hook persistently (state file).
SkillCFreshness: CClaude Code +9 - 0.471score
derive-kind
youssefKadaouiAbbassi
Classify a parcel as pure-fn / io / ui / config / infra to route the right verify gates.
SkillCFreshness: CClaude Code +9 - 0.471score
forge
youssefKadaouiAbbassi
Top-level runbook for /forge:forge.
SkillCFreshness: CClaude Code - 0.471score
pbt-verify
youssefKadaouiAbbassi
Generate property-based tests via fast-check / Hypothesis / proptest, run them, emit VERIFIED / PARTIAL / MISSING with shrunk counterexamples.
SkillCFreshness: CClaude Code - 0.469score
bootstrap
youssefKadaouiAbbassi
Force-run the forge first-time bootstrap.
SkillCFreshness: CClaude Code +9 - 0.469score
mutation-gate
youssefKadaouiAbbassi
Per-stack mutation testing — Stryker / mutmut / cargo-mutants — gate score ≥ 0.80.
SkillCFreshness: CClaude Code - 0.464score
update
youssefKadaouiAbbassi
Force a forge update check or toggle the per-session autoupdate prompt.
SkillCFreshness: CClaude Code +9 - 0.464score
stub-warn
youssefKadaouiAbbassi
Reference for the forge-stub-warn hookify rule blocking unimplemented stubs reaching ship.
SkillCFreshness: CClaude Code +9 - 0.402score
Bun
youssefKadaouiAbbassi
Use when building, testing, or deploying JavaScript/TypeScript applications.
SkillDFreshness: DClaude Code +9 - 0.214score
coding-style
youssefKadaouiAbbassi
No description from the publisher yet.
SkillDFreshness: DClaude Code +9 - 0.211score
do
youssefKadaouiAbbassi
No description from the publisher yet.
SkillDFreshness: DClaude Code +9 - 0.211score
doc-hygiene
youssefKadaouiAbbassi
No description from the publisher yet.
SkillDFreshness: DClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- May 13, 2026 (5 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from youssefKadaouiAbbassi
- 0.471score
pbt-verify
youssefKadaouiAbbassi
Generate property-based tests via fast-check / Hypothesis / proptest, run them, emit VERIFIED / PARTIAL / MISSING with shrunk counterexamples.
SkillCFreshness: CClaude Code - 0.471score
derive-kind
youssefKadaouiAbbassi
Classify a parcel as pure-fn / io / ui / config / infra to route the right verify gates.
SkillCFreshness: CClaude Code +9 - 0.471score
forge
youssefKadaouiAbbassi
Top-level runbook for /forge:forge.
SkillCFreshness: CClaude Code - 0.471score
hooks-disable
youssefKadaouiAbbassi
[yka-code] Disable a yka-code hook persistently (state file).
SkillCFreshness: CClaude Code +9 - 0.469score
bootstrap
youssefKadaouiAbbassi
Force-run the forge first-time bootstrap.
SkillCFreshness: CClaude Code +9 - 0.469score
mutation-gate
youssefKadaouiAbbassi
Per-stack mutation testing — Stryker / mutmut / cargo-mutants — gate score ≥ 0.80.
SkillCFreshness: CClaude Code
Cite this page
browser-verify skill. Agent Mart. https://agentmart.dev/skills/youssefkadaouiabbassi-browser-verify (last updated 2026-10-24)