Playwright Stealth Verify
Measures whether your Playwright, Puppeteer, Selenium or CDP browser presents a self-consistent fingerprint, scoring an existing Page object in place.
Dev & CodingIntermediate★ 237⑂ 0AI score 9/10Last updated: Aug 6, 2026
What it does
- Uses
liarjsas a library:checkPage(page)accepts any object exposingevaluate(), so Playwright and PuppeteerPageobjects work and the harness under test is measured with its real launch flags, plugins and proxy. - Catches harness-specific tells with named check ids:
webdriverleft set by the driver, aHeadlessChrometoken in the UA,worker-consistencywhere an override only patched the main thread,native-integritywhere a patched API no longer reports[native code],gpu-triadwhere WebGL and WebGPU name different GPUs, pluschrome-object,headless-viewportandcodecs. - Returns
{ score, label, checks[], client, server, meta }, so you can assert a minimum score or require zerobadchecks in a test suite. - Can attach to a browser already running outside the test process via
npx liarjs@0.3 --cdp http://127.0.0.1:9222. - Measurement only: it does not modify the browser and ships no evasions or profiles.
Who it's for
- QA and automation engineers running E2E or scraping harnesses on Playwright, Puppeteer or Selenium.
- Anyone who wants to measure a stealth plugin's actual effect instead of assuming it.
- Teams turning fingerprint quality into a regression gate in CI.
Examples
- Assert in a test: call
checkPage(page)and requireresult.checks.filter(c => c.status === 'bad')to be empty, failing the suite on a stealth regression. - Audit a patched Chromium: launch it with
--remote-debugging-port=9222, then runnpx liarjs@0.3 --cdp http://127.0.0.1:9222against that exact process. - Air-gapped run: use
--offlineto execute only the 32 JavaScript-layer checks with no outbound request, or point--endpointat your own deployment of the edge Worker.
· · · Install guide · · ·
Try it now, no install
Paste this into Claude to use the skill without installing anything.
Read the instructions in this file and follow them to help me: https://raw.githubusercontent.com/liarjsdev/liarjs-skills/HEAD/skills/playwright-stealth-verify/SKILL.md What I want: (describe your task here)
If Claude can't open the link, open it yourself and paste the contents instead.
↓ If it works for you, download the ZIP below and install it. Then it runs on its own — no pasting each time.
Install in the Claude app (no terminal)
- Download the ZIP with the button below.
- In Claude, open Settings → Capabilities and turn on 'Code execution and file creation'. (one time)
- Go to Customize → Skills → + → 'Upload a skill' and upload the ZIP.
Install in Claude Code
Let Claude do it — paste this into Claude Code
Install the skill I found on Claude Skill Mart. Copy the skills/playwright-stealth-verify folder from the GitHub repo liarjsdev/liarjs-skills into my ~/.claude/skills/playwright-stealth-verify/. When it's done, tell me in one line what this skill can do.
Install with a command instead
git clone https://github.com/liarjsdev/liarjs-skills.git /tmp/liarjs-skills && mkdir -p ~/.claude/skills && cp -r /tmp/liarjs-skills/skills/playwright-stealth-verify ~/.claude/skills/⚠ This is a third-party skill. Check the source repository before installing.
- Confirm Node.js 22 or newer is installed (
node -v). - Clone the skills repository:
git clone https://github.com/liarjsdev/liarjs-skills.git - Copy the skill into your Claude skills folder:
mkdir -p ~/.claude/skills && cp -r liarjs-skills/skills/playwright-stealth-verify ~/.claude/skills/ - Restart Claude Code and ask something like "check whether my headless browser looks coherent" to confirm the skill loads.
- For library use, inside your test project run
npm install --save-dev liarjsso the version is pinned in the lockfile. - To try the CLI with no install, run
npx liarjs@0.3first — it launches a throwaway temp profile and cleans it up. - If outbound traffic is restricted, add
--offline, or self-host the edge Worker and pass--endpoint.
View source on GitHub ↗License: MIT