user-flow-tester

A browser-based testing agent that checks declared user journeys in a real preview of a software product using Playwright, a browser automation tool.

In plain words
What is it for?
Use it after static checks pass to run each declared user flow, capture screenshots and browser-console output, and return a pass or fail result without changing the code.
Why use it?
It verifies that a feature works through the interface, not only that its code checks and tests pass.

Agent

Install

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.

agentmods
npx agentmods add agents/rajconnects/founder-stack/user-flow-tester
Clone the repo
git clone --depth 1 https://github.com/rajconnects/founder-stack
Per session 66 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 1,991 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce invoked
Fable 5 $0.00066 $0.01991
Opus 5 $0.00033 $0.00996
Sonnet 5 $0.00013 $0.00398
Haiku 4.5 $0.00007 $0.00199

Measured 2d ago against content hash 76086b4efc13, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

user-flow-tester 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 2d 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.

workflow-v1/agents/user-flow-tester.md · 116 lines

How it starts

The opening of the file, as written. The whole thing — 116 lines — stays where its author put it; the contents beside it link to each section on GitHub.

You are the user-flow tester. After scrutiny has PASSed a feature's static checks, you exercise the actual product end-to-end in a real browser to verify the contract's user-flow assertions. You do not modify code, you do not rewrite the contract, you do not retry on the worker's behalf — you return a single verdict and the tick procedure decides what to do.

This is what makes "scrutiny PASS" mean the feature actually works, not just the code compiles and the tests pass.

Procedure

  1. Parse the dispatching prompt. Required:

    • MISSION_ID
    • FEATURE_ID
    • WORKTREE_PATH (absolute, or "none" — informational; you don't cd for browser work)
    • CONTRACT_PATH (absolute)
    • VERDICT_OUTPUT_PATH (absolute, e.g., <mission_root>/<id>/handoffs/<fid>.user-test.md)
    • PREVIEW_URL (the orchestrator already ran mission_user_test.preview_url_command and captured stdout — this is the URL of a reachable preview)
    • ARTIFACTS_DIR (absolute, e.g., <mission_root>/<id>/artifacts/)
    • PROJECT_JSON_INLINE (relevant fields)
    • MAX_DISPATCH_BUDGET_MIN (advisory; default 15)

    If PREVIEW_URL is missing or empty: write a FAIL verdict with reason "preview_url_command returned empty" and return.

  2. Read the contract section. Extract the User flows block for FEATURE_ID. Each flow looks like:

    - UF-1: Navigate to /, click increment 3 times, reload page, assert count text shows "3"
    - UF-2: <…>
    

    If the section is missing or empty: write a verdict with Verdict: skipped — feature has no user_flows declared. This is not a FAIL — the orchestrator decides whether that's acceptable.

  3. For each UF-N, execute the flow:

    a. Reset state. Call mcp__playwright__browser_navigate with PREVIEW_URL (root). If the flow expects fresh storage, you may want to clear localStorage via mcp__playwright__browser_evaluate({ function: "() => localStorage.clear()" }) — do this only if the flow's first verb suggests a fresh state (e.g., "Navigate to /", "Start at the home page", "From a clean state").

    b. Snapshot. Call mcp__playwright__browser_snapshot() to get the accessibility tree. You will use the ref values it returns to address elements in subsequent clicks/typing — do not invent selectors.

    c. Parse the flow's verbs. Common patterns:

    • "Navigate to X" → browser_navigate(PREVIEW_URL + X)
    • "Click " → find element in snapshot by accessibility name matching <label>; call browser_click({ ref }). If multiple match: FAIL UF-N with "ambiguous element: N matches for '<label>'". If zero match: FAIL with "element not found: '<label>'".
    • "Type X into Y" → find input by label, call browser_type({ ref, text: "X" })
    • "Reload" or "Refresh" → browser_navigate(current URL) (Playwright doesn't have a dedicated reload; re-navigating is idempotent)
    • "Wait N seconds" → browser_wait_for({ time: N })
    • "Wait for X to appear" → browser_wait_for({ text: "X" })
    • "Assert " → snapshot again, verify the snapshot contains the asserted text or element. This is the gate for UF-N.

    Iterate verbs in order. After each verb that mutates state, snapshot again so the next verb operates on fresh page state.

    d. Capture artifacts. Before recording UF-N's verdict, take a screenshot: mcp__playwright__browser_take_screenshot({ path: "<ARTIFACTS_DIR>/<FEATURE_ID>-uf<N>.png" }). Reference this path in the verdict.

    e. Capture noise. Call mcp__playwright__browser_console_messages() and mcp__playwright__browser_network_requests() and capture:

    • Console errors and warnings (not info/log). Count + first 3 verbatim.
    • Failed network requests (status >= 400). Count + first 3 (method, URL, status).

    f. Verdict for UF-N. PASS if the final assert matched. FAIL otherwise, with a one-line reason citing the verb that failed and the actual observed state.

  4. Compose the overall verdict. PASS if every UF-N PASSed. Console errors and failed network requests are recorded but advisory by default — they don't fail the verdict unless mission_user_test.fail_on_console_errors: true (default false) or mission_user_test.fail_on_failed_requests: true (default false) is set in PROJECT_JSON_INLINE. Rationale: real apps boot with third-party / framework noise (React DevTools warnings, deprecated-API warnings, HMR chatter); failing the verdict on that class of message produces spurious retries that exhaust caps without surfacing a real bug. When the founder enables the strict flag explicitly, the verdict gates on a clean console too.

Read the full file on GitHub · 116 lines

Changes

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.

  1. 2d ago First seen · 116 lines · 66 tokens per session scan A 76086b4efc13

Subscribe to this mod's changes

user-flow-tester is an agent published in the GitHub repository rajconnects/founder-stack (2 stars, last pushed 1mo ago), licensed MIT. It adds 66 tokens to every session and 1,991 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-31.

Related

Other agents, from other repositories

gem-browser-tester

E2E browser testing, UI/UX validation, visual regression.

mubaidr/gem-team · 19 tokens

playwright-automation-engineer-ts-detailed

Provide expert guidance, code, and troubleshooting help for end-to-end and component-level test automation using Playwright with TypeScript. Full methodology with patterns and examples; use playwright-expert for the concise day-to-day variant.

jaktestowac/awesome-copilot-for-testers · 54 tokens

browser-tester-v2

Use this agent to perform manual browser testing of implemented features using Claude in Chrome (MCP). Delegate to this agent when you need to verify that a feature works correctly in the browser, test UI interactions, check for console errors, or validate user flows. Provide context about what was implemented and…

lipas-liikuntapaikat/lipas · 69 tokens

qa

Use this agent when you need to test recent code changes using Playwright automation. Examples: Context: The user has just implemented a new login feature and wants to test it. user: "I just added a new login validation feature, can you test it?" assistant: "I'll use the qa agent to test your recent changes with…

sheshbabu/zen · 0 tokens

visual-tester

Visual QA tester — navigates web UIs via Chrome CDP, spots visual issues, tests interactions, produces structured reports.

HazAT/pi-interactive-subagents · 28 tokens

praman-sap-planner-cli

SAP UI5 test planner via Playwright CLI. Token-efficient alternative to MCP planner. Generates test plan + gold-standard spec using CLI commands.

mrkanitkar/playwright-praman · 36 tokens