Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add alexei-led/cc-thingz --skill playwright-skillgit clone --depth 1 https://github.com/alexei-led/cc-thingzWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/alexei-led/cc-thingz/playwright-skill)<a href="https://agentmods.dev/skills/alexei-led/cc-thingz/playwright-skill"><img src="https://agentmods.dev/badge/skills/alexei-led/cc-thingz/playwright-skill.svg" alt="Measured on agentmods" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00059 | $0.01159 |
| Opus 5 | $0.00030 | $0.00580 |
| Sonnet 5 | $0.00012 | $0.00232 |
| Haiku 4.5 | $0.00006 | $0.00116 |
Grade A, and why
playwright-skill scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 8d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 144 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Playwright Support Runtime
Support-only helper for browser-automation. Provides Playwright primitives:
dev-server detection, a script runner (scripts/run.js), screenshot CLIs, and
helper utilities (scripts/lib/helpers.js).
Do not treat this as the user-facing browser skill. Load it only when
browser-automation chooses the bundled Playwright helper as the
runtime/reference.
Critical workflow
-
Run from this skill directory — the directory containing this
SKILL.md. If the loaded skill path is different from~/.pi/agent/skills, use that loaded path. -
Detect dev servers first for localhost testing:
node scripts/run.js --json "console.log(JSON.stringify(await helpers.detectDevServers()))"One server → use it. Multiple → ask which. None → ask for a URL.
-
Use
/tmp/playwright-*for generated scripts and artifacts unless the user asked for permanent tests. Never write generated scripts or artifacts intoscripts/, the skill directory, or the user's project. -
Prefer headless screenshots in Pi/headless harnesses. Use headed mode only when the platform exposes a usable visible browser.
-
Parameterize target URLs at the top of generated scripts as
TARGET_URL.
Running scripts
node scripts/run.js --quiet /tmp/playwright-test-<name>.js
node scripts/run.js --json "console.log(JSON.stringify({ ok: !!chromium }))"
run.js preserves the caller working directory, auto-wraps code for await,
auto-installs Playwright on first run using bun with npm fallback, and sends
runner logs to stderr. Script stdout stays clean for JSON.
chromium, firefox, webkit, devices, helpers, and
getContextOptionsWithHeaders(opts) are exposed as globals for all scripts.
Scripts may still use normal imports such as require("fs"), require("path"),
or require("playwright").
Turnkey screenshots
For one page:
node scripts/screenshot-url.js \
--url http://localhost:3030/1?clicks=20 \
--selector .slidev-page \
--out /tmp/playwright-slide-01.png \
--manifest /tmp/playwright-slide-01.json \
--json
What ships with it
12 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- .agentbundler/targets/claude.json 83 B
- .agentbundler/targets/pi.json 3.1 KB
- references/api.md 4.4 KB
- references/setup.md 1.3 KB
- scripts/.gitignore 14 B
- scripts/lib/helpers.js 18 KB runs code
- scripts/lib/runtime.js 2.1 KB runs code
- scripts/lib/screenshot.js 8.8 KB runs code
- scripts/package.json 818 B
- scripts/run.js 5.5 KB runs code
- scripts/screenshot-sequence.js 3.5 KB runs code
- scripts/screenshot-url.js 3.1 KB runs code
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 8d ago First seen · 144 lines · 59 tokens per session scan A 7703a782dd6a
playwright-skill is a skill published in the GitHub repository alexei-led/cc-thingz (35 stars, last pushed 1mo ago), licensed MIT. It adds 59 tokens to every session and 1,159 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
peekaboo
Provides runtime observation and interaction for native macOS interfaces through accessibility state and screenshots. Use when the task depends on visible or interactive state in a running SwiftUI/AppKit app: what is rendered, focused, selected, enabled, reachable through menus/windows/dialogs, or experienced across a…
write-e2e
Generate Playwright E2E tests from codebase analysis. Discovers routes, scores user flows by criticality, writes .spec.ts files that assert causality, and reports what was actually proven: GENERATED, STATICCHECKED, VERIFIEDLOCAL or VALIDATEDLIVE. Modes: --scope , --flow , --output , --base-url , --max-flows N, --live…
playwright-harness
Drive a real browser with Playwright on any OS and gate on what you observe: write a script, launch Chromium (headless by default; a shared headed window when a human must watch or drive), drive the page, and assert on screenshots plus collected page errors. The operational trunk for browser work; specializations…
mobile-flows-maestro
This skill should be used when Maestro is explicitly requested or already present and the task is to author, run, or debug iOS/Android Maestro flows; use Maestro MCP; or handle Maestro selectors, system UI, permissions, Keychain, JavaScript, waits, device state, flakiness, or CI. Evidence includes a .maestro directory…
playwright-gif-capture
Specialization of playwright-harness for capturing an ANIMATED GIF of web content: drive a page/canvas/WebGL animation, grab a sequence of frames, and encode a looping GIF. Use when the task is "make a gif of this", "grab a gif of the demo/animation/shader", "record the canvas as a gif", or "capture a looping clip for…
playwright-camera-mask-testing
Specialization of playwright-harness for CAMERA / segmentation testing in the browser: put a real PERSON in front of getUserMedia so MediaPipe / selfie segmentation produces an actual mask, then verify background-replacement / blur / shader effects by vision. Use when the task is "test the mask on web", "verify…