agentsclimarketplace

Signed in web verification

Skill jeremyinthebay/relay-skills/skills/signed-in-web-verification

Verify auth-gated web flows — signed-in sessions, multi-turn/AI features, scroll-triggered UI — with a real Playwright browser that holds a session YOU place, never the assistant. Use when a screenshot tool or browser extension can't hold a signed-in session or can't drive real scroll/interaction, when verifying a login-gated feature or an AI/chat feature that depends on conversation history, or when someone asks "can you check the AI feature works while signed in" or wants to adversarially test whether a feature accepts poisoned client-supplied input.From its SKILL.md

Install
npx -y skills add jeremyinthebay/relay-skills --skill signed-in-web-verification

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • 27 days oldThe repository was created 27 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

5.5 KB, ~1.2k tokens by cl100k_base, as published. Nobody here has run it

Signed-In Web Verification

The gap this closes

A screenshot tool or browser extension typically can't do two things that auth-gated features need: it can't hold a real signed-in session across a page load, and — if it drives a never-focused, invisible tab — it can't reliably scroll or animate either (see the mobile-verification skill for why: requestAnimationFrame ticks to zero in a hidden tab, so smooth-scroll-triggered UI silently never fires and looks broken when it isn't).

A real Playwright browser, driven by a script instead of a chat tool, does both: it's a visible, focused page that can hold an injected session and run real scroll/click/wheel events. That's the only way to verify things like "does the grounded-answer feature actually answer once signed in," "does multi-turn history actually get used," or "does the scroll-triggered dock actually appear."

The one rule that matters more than the code: you place the session, not the assistant

The script must never contain, generate, print, or receive a real session token. It only reads one from a file you create by hand, outside the assistant's view:

  1. Sign in to the real site yourself, in your own browser.
  2. Open DevTools → Application/Storage → find the auth token key (e.g. a Supabase sb-<project>-auth-token, a JWT cookie, a bearer token in localStorage).
  3. Copy the value, and save it as the entire contents of a local file — e.g. .verify-session.json — that lives next to the script.
  4. Gitignore that file. It is a live credential. Never paste its contents into chat, a commit, a PR description, or anywhere the assistant echoes text back.

The assistant's job is to write and run the harness. The human's job is the one step that touches a real secret. Don't let those swap.

Generalized template

scripts/verify-signed-in-template.mjs is a genericized version of a working harness. To adapt it to a new project, fill in the four CONFIGURE ME constants at the top (site URL, the storage key your auth system uses, and how to pull a bearer token out of the stored value) and replace the numbered check blocks with assertions for your own feature. The shape to keep:

  • Inject the session via context.addInitScript before navigation, so it's present when the app's own auth client hydrates.
  • Confirm you're actually signed in (decode the token / read a /me endpoint) before asserting anything else — if that check fails, every later failure is noise.
  • Drive real interaction (page.mouse.wheel, real clicks) for anything scroll- or animation-gated, not scrollIntoView from a hidden context.
  • Collect console/page errors throughout and report them at the end.
  • Exit non-zero on failure so it's usable as a gate, not just a manual check.
npm i playwright && npx playwright install chromium
node verify-signed-in-template.mjs                 # headless
node verify-signed-in-template.mjs --headed        # watch it run
SITE_URL=https://deploy-preview-123--myapp.netlify.app node verify-signed-in-template.mjs

The adversarial variant: poisoned-input testing

The same signed-in harness is also the right tool for adversarially testing an LLM-backed feature: instead of asserting the feature works, you assert it correctly refuses hostile input. scripts/adversarial-poison-template.mjs generalizes that pattern — sign in the same way, then POST a client-supplied conversation history where a fabricated earlier turn asserts something false, and check whether the feature adopts or rejects the fabrication in its next answer.

This is the same trust boundary as prompt injection: anything the client can supply (history, uploaded documents, tool results) is untrusted input, and "the feature answered confidently" is not the same as "the feature answered correctly." See the llm-feature-adversarial-audit skill for the full checklist this one test belongs to — client-controlled history is one entry on it, not the whole list.

When to reach for this vs. other tools

JobTool
Read markup, grep static HTML, check computed stylesAny automation/extension. Fine.
Anything that needs a signed-in sessionThis skill.
Anything that needs real scroll/tap/animationThis skill, or mobile-verification.
Testing whether a feature rejects hostile client inputThe adversarial variant here, feeding into llm-feature-adversarial-audit.
"Does this feel right"Ask a human.

Common failure modes to check for

  • "Session did not hydrate" almost always means the token expired — re-copy it from DevTools rather than debugging the harness.
  • A signed-in check that only looks at localStorage presence, not token validity, will report false positives once the token expires but hasn't been cleared.
  • Forgetting the cache-buster (?cb=<random>) when checking a CDN-fronted site means you may be verifying a stale cached page, not the deploy you think you're testing.

What ships with it: 2 files

10.1 KB alongside SKILL.md, 2 of them executable

Gives 0 of the 12 instructions most quality gates skills give in ~1.2k tokens

Counted across 1,195 of the 2,094 authors here whose files we hold, read 2026-08-07

  • Read the output and check the exit codein 54 of 1195, across 14 files
  • Verify requirements using a line-by-line checklistin 53 of 1195, across 12 files
  • Identify the verification command proving the claimin 51 of 1195, across 12 files
  • Run the full verification commandin 50 of 1195, across 11 files
  • Verify output confirms the claimin 49 of 1195, across 12 files
  • Check version control diff after agent delegationin 46 of 1195, across 6 files
  • State claim with evidencein 44 of 1195, across 4 files
  • Run the test suitein 33 of 1195, across 26 files
  • Keep state in memory by defaultin 27 of 1195, across 6 files
  • Make prototype runnable with one commandin 26 of 1195, across 5 files
  • Produce a verification reportin 25 of 1195, across 14 files
  • Detect the package manager from lockfilesin 24 of 1195, across 5 files

Said here and by no other author read

  • inject session via init script before navigation
  • confirm signed-in state before asserting feature behavior
  • drive real interaction for animation-gated elements
  • collect console and page errors throughout execution
  • exit non-zero on failure
  • fill in configuration constants at script top

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 326,851. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.