Run an end-to-end browser test of Alethical as a real user — after a feature lands, on demand ("browser-test this", "drive the app", "test it like a user"), or before calling frontend work done. Spawns a FRESH-context agent on a cheap model that knows nothing about the implementation, drives the running app through a browser in scripted user stories or free exploration, and reports what breaks. Also owns the on-demand Playwright checks (just e2e) and the path from a stable story to a Playwright spec.
89%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Code-level tests prove functions; they cannot prove a first-time visitor can actually search a bill and read it. This skill runs that proof on demand: an agent with fresh context — it knows the product task, never the diff — drives the app in a browser and reports what breaks. Fresh context is the point: an agent that knows the implementation tests the diff; one that doesn't tests the product.
These 2 broader layers run on demand. The focused public reader subset runs in the required frontend CI job and after main releases; reader-completion-checks.md owns its scope and evidence:
stories.md or explores freely, judging what a human would judge
(is this readable? did anything dead-end?).apps/frontend/e2e/, run with just e2e) — fast scripted
assertions graduated from stories that have proven stable, runnable against any
host in 3 browser engines (Chromium, Firefox, WebKit — the Safari engine).just e2e as the regression floor.just e2e alone.Spawn a subagent (the Agent tool) with model sonnet — driving a browser is
mostly mechanical, and the cheap tier keeps a 20-minute exploration affordable. The
brief must contain no implementation detail: no file names, no diff summary, no
"we changed X". Give it only:
docs/philosophy.md, "Who we assume is reading");stories.md, or an exploration
charter ("spend ~20 minutes on ; follow your curiosity; note every dead end");Report format the brief must ask for: for each problem — what the tester was trying to do, what happened instead, the exact URL for an ordinary page, how bad it is (blocks the task / confusing / cosmetic), and what a fix would look like from the user's side. An authentication return never includes an exact URL; use the safe report below. Plus a one-line verdict per story: passed / failed / passed-with-friction.
Judging correctness: an honest "no matches" or a refusal to answer is CORRECT
behavior when the data isn't there (.claude/rules/grounded-answers.md rule 1) — the
tester reports it as friction only if a real user would be misled, not as a bug per se.
alethicaldev@gmail.com). Stop before
selecting an account when neither fact can be proved. Never use a personal account.safeAuthCallbackReport from
apps/frontend/scripts/safe-auth-callback-report.mjs, call it on the address in memory,
and log only its result. It returns the origin, path, and booleans for private fields in
the query and fragment. It recognizes access_token, refresh_token, provider_token,
provider_refresh_token, id_token, token_hash, token, code, code_verifier,
state, nonce, otp, device_code, user_code, session_state, and similarly
named one-use values. It never returns any query, fragment, field name, or field value.Issue 1600, Prevent browser sign-in tokens from entering task output records why this is a hard line: on 2026-08-15, a redirect-list check completed Google OAuth in a browser that was already signed into a personal account, then the browser tool printed the full return address. No credential from that incident belongs in this file.
just up → http://localhost:19006) — for unmerged changes.apps/frontend/e2e/; config in apps/frontend/playwright.config.ts.pnpm --dir apps/frontend exec playwright install
(downloads the 3 browser engines).just e2e (Chromium), just e2e firefox, just e2e webkit — or all three:
pnpm --dir apps/frontend exec playwright test.E2E_BASE_URL env var; defaults to the local dev server
(http://localhost:19006). The committed specs are read-only, so pointing them at
production is safe: E2E_BASE_URL=https://alethical.com just e2e.vitest.config.ts excludes e2e/**,
and just test-frontend never runs these.When an agent-driven story has passed twice without wording churn on the screen it
tests, write it as a spec in apps/frontend/e2e/ and record the spec filename in the
story's Spec: field in stories.md. Anchor on user-visible text and
roles, never on style or DOM structure; keep each spec independent and read-only.
Stories with judgment in them (is the summary readable?) stay agent-driven — a spec
can assert presence, not quality.
The focused automatic subset does not replace these broader stories, phone and keyboard checks, visual acceptance or an independent reader review. A frontend feature triggers the relevant stories. Running every story and browser engine on every change needs its own cost and reliability decision.
alethical-org/alethical
a84ed3e
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.