BR

Drives authenticated browser sessions via automated scripts to audit integration surfaces.

Install

mkdir -p .claude/skills/browser-auth && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/12374" && unzip -o skill.zip -d .claude/skills/browser-auth && rm skill.zip

Installs to .claude/skills/browser-auth

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Drives an authenticated browser session on synthex.social (or localhost) WITHOUT the flaky Chrome extension. The reliable path is a committed Playwright script (scripts/browser/dashboard-audit.mjs) that logs in with the SYNTHEX_TEST_EMAIL / SYNTHEX_TEST_PASSWORD test account and audits every integration surface. Use whenever asked to "log in", "authenticate", "audit the dashboard", "check what's connected", or before browser-verify / site-smoke-test on /dashboard/* routes.
477 charsno explicit “when” triggerlonger than Claude Code's old 250-char listing cap (fine on current versions)
Intermediate

Key capabilities

  • Drive an authenticated browser session using a Playwright script.
  • Audit integration surfaces on the dashboard.
  • Log in with a dedicated test account.
  • Generate a JSON report on stdout.
  • Capture full-page screenshots.
  • Verify rendered UI on /dashboard/* routes.

How it works

The skill executes a Playwright script that logs into a specified base URL using test credentials, then navigates and audits integration surfaces on the dashboard, generating a report and screenshots.

Inputs & outputs

You give it
A request to log in, authenticate, audit the dashboard, or check connected services, specifically for rendered UI verification.
You get back
A JSON report on stdout and full-page screenshots in .artifacts/browser-audit/.

When to use browser-auth

  • Verifying dashboard UI
  • Automating login for testing
  • Auditing integration surfaces

About this skill

Browser Auth — the reliable, extension-free path

FIRST: are you trying to check "what's connected"? Don't log in.

The dashboard is gated to Google-SSO CEO accounts (OWNER_EMAILS) — there is no email/password test account, so the Playwright login below cannot sign in as a real owner, and Claude can't drive a Google SSO flow. To answer "is X connected / why is the dashboard empty / are tokens expired", use the [[token-health]] skill — it reads the live connection state straight from the DB (authorised, read-only; see memory prod-connection-health-read-authorised). That's the reliable path and needs no browser.

Only use the browser login below for verifying rendered UI on /dashboard/*, and only once a dedicated email/password test account exists (see One-time setup).


Why this skill exists (read once)

Synthex has two ways to drive a browser. They are NOT equal:

PathNeedsReliability
Playwright script (scripts/browser/dashboard-audit.mjs)node + installed Playwright + test creds✅ Deterministic. No bridge, no extension, no human clicks. Use this.
Chrome extension / computer_use (mcp__Claude_in_Chrome__*)a per-session sign-in + tab toggle that drops⚠️ Flaky. The cause of recurring "browser broke again". Fallback only.

computer_use and the Chrome extension are the same bridge — if list_connected_browsers is empty or tabs_context_mcp says "not connected", computer will fail identically. Do not burn time toggling it. Reach for the script.


One-time setup (eliminates the recurring friction)

The script needs a dedicated test account (never a real customer login, never Phill's personal account). Put its creds in .env.local (plaintext, gitignored):

SYNTHEX_TEST_EMAIL=test@…           # a Synthex test account Phill creates
SYNTHEX_TEST_PASSWORD=…             # stored in .env.local only

Claude cannot create the account or type the password (prohibited actions). This is the single human step — once done, every future dashboard audit is fully autonomous. If the creds are missing the script exits 2 with a clear message; surface that to Phill and stop.


Run it

The test creds live in Vercel (Production), not locally — pull them into a gitignored .env.local first, then run with Node's built-in --env-file (Node 20+, no extra deps — do NOT use npx dotenvx, the unscoped package 404s):

# 1. pull the test creds from Vercel into .env.local (gitignored):
npx vercel env pull .env.local --environment=production --yes

# 2. run the audit:
node --env-file=.env.local scripts/browser/dashboard-audit.mjs [baseUrl]

# watch it run (headed):
PWDEBUG_HEADED=1 node --env-file=.env.local scripts/browser/dashboard-audit.mjs

The creds must be set on the Production Vercel environment (that's where vercel env pull --environment=production reads them). support@…-style mailboxes created via "Continue with Google" have NO email/password and will fail with "Invalid login credentials" — use an account with a real password.

Output: a JSON report on stdout + full-page screenshots in .artifacts/browser-audit/. Each surface is classified connected / notConnected / empty / error from its visible text. Read the JSON, open the screenshots, and report exactly which integrations are live vs broken.

Exit codes: 0 ok · 2 missing creds · 3 login failed (see login-failed.png) · 4 runtime/launch error.


Login contract (verified 2026-05-30)

  • Login page: <base>/login — form renders client-side, so wait for the selector, not networkidle (the dashboard holds connections open and never goes idle).
  • Selectors: email #email, password #password, submit button:has-text("Sign in") (there are two submit buttons — "Watch Tutorial" and "Sign in").
  • Success: URL moves to /dashboard (existing user) or /onboarding (new user). A Supabase sb-* session cookie is set.
  • Auth errors surface as Sonner toasts ([data-sonner-toast]), not [role="alert"].

Maintenance (keep this skill true)

This skill drifts in exactly two places. When the dashboard changes, update them and re-verify — don't let it rot:

  1. Login selectors (SEL in the script). If login starts failing with exit 3, re-probe:
    node -e "import('playwright').then(async({chromium})=>{const b=await chromium.launch();const p=await b.newPage();await p.goto('https://synthex.social/login',{waitUntil:'domcontentloaded'});await p.waitForSelector('input');console.log(await p.evaluate(()=>[...document.querySelectorAll('input,button')].map(e=>({tag:e.tagName,type:e.type,id:e.id,text:(e.textContent||'').trim().slice(0,30)}))));await b.close();})"
    
    Update SEL.email / SEL.password / SEL.submit to match.
  2. Audit routes (ROUTES in the script). Add/rename as /dashboard/* surfaces change (find app/dashboard -maxdepth 1 -type d).
  3. After any edit, re-verify the no-creds gate (node scripts/browser/dashboard-audit.mjs → must print MISSING_CREDS and exit 2), and run the full audit once with creds.

Bump the version and the "verified" date above whenever you touch the selectors.


Security rules

  • Never log or print password values.
  • Never use Phill's personal credentials — dedicated test account only.
  • Never create a Supabase account (prohibited — Phill does this).
  • Screenshots may contain client data — they live in .artifacts/ (gitignored); never commit them.
  • List session-cookie names only, never values.

When not to use it

  • When trying to check 'what's connected' without verifying rendered UI.
  • When a Google-SSO CEO account is required, as Playwright cannot sign in as a real owner.
  • When the Chrome extension or `computer_use` is the primary method, due to flakiness.

Prerequisites

nodePlaywrightDedicated test account credentials (SYNTHEX_TEST_EMAIL, SYNTHEX_TEST_PASSWORD)

Limitations

  • The skill cannot sign in as a real owner account if it requires Google-SSO.
  • The skill requires a dedicated test account with email/password credentials.
  • The skill does not log or print password values.

How it compares

This skill uses a committed Playwright script for browser authentication and auditing, providing a deterministic and reliable method for UI verification, unlike the flaky Chrome extension or `computer_use`.

Compared to similar skills

browser-auth side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
browser-auth (this skill)02moReviewIntermediate
setup-browser-cookies02moReviewBeginner
1password272moReviewIntermediate
1password05moReviewIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

Search skills

Search the agent skills registry