Browser Acceptance Evidence logo

Browser Acceptance Evidence

Organization
zenobi-us
browser-acceptance-evidence

Writes manual test steps, drives them in a real browser with surf or Playwright, captures screenshots and element selectors as evidence, and publishes an HTML report to shared context. Use when a change must be proved in a running app - manual test steps, QA steps, acceptance criteria, a smoke test, visual verification, "show me it works", or a hand-off that needs screenshots. Results in a written plan, a re-runnable script, and a linked report instead of a claim in chat.

Overview

Publisherzenobi-us
Repositorydotfiles
Skill namebrowser-acceptance-evidence
Stars
67
Forks
6
Bundled files
3
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 3 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by zenobi-us on GitHub. Read the source before you install it.

Installation

Install the Browser Acceptance Evidence AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/zenobi-us/dotfiles.git /tmp/dotfiles
mkdir -p .claude/skills
cp -r /tmp/dotfiles/files/devtools/agent/bundles/developer/skills/browsers/browser-acceptance-evidence .claude/skills/browser-acceptance-evidence
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Browser Acceptance Evidence in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Browser Acceptance Evidence on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Browser Acceptance Evidence is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

browser-acceptance-evidence

Proving a change works in a running application is a procedure, not a vibe. The procedure is the same whichever browser tool drives it, so this skill holds the invariant part and routes the driving to a driver reference.

Three artifacts come out, all in shared context:

ArtifactWhat it is
test-plan.mdThe steps, written before the browser opens
evidence.jsonlOne record per step: selector, URL, screenshot, verdict
report/index.htmlThe reviewable page, built by the writing-reports skill

When to use

  • The user asks for manual test steps, QA steps, acceptance evidence, or a test report.
  • A fix needs proving in the running app, not just in tests.
  • Someone will ask "did you actually look at it?" and the answer must be a link.

Do not use for unit or integration tests. Those belong in the test suite.

Procedure

1. Resolve the shared-context root. MUST.

sh
cd "<repository being worked on>" && "<shared-context-skill>/scripts/shared-context/cli.ts"

Every artifact goes under <root>/<work-id>/manual-tests/. You MUST NOT write the plan, the evidence, the screenshots, or the report into the repository being tested. A repository holds code, not session output.

2. Write the plan before opening a browser. MUST.

<root>/<work-id>/manual-tests/test-plan.md. It MUST contain:

  • A Preconditions block: feature flags, plan tier, permissions, account, seed data, environment. Each one stated as a fact to be checked, not assumed.
  • Numbered tests. Each test has numbered steps, written in the imperative, one action per step, with any condition first.
  • An explicit PASS line and FAIL line per test. If you cannot write what failure looks like, you do not understand the test yet.

Writing steps after the fact is not testing, it is narrating. The plan exists so the browser work has something to disagree with.

3. Route to a driver. MUST read the reference first.

DriverReferenceUse when
surfreferences/drivers/surf-cli.mdA live browser with the user's real profile, existing logins and extensions
playwrightreferences/drivers/playwright-cli.mdA clean isolated profile, repeatable from zero

You MUST read the chosen driver's reference before the first browser command. If that reference is marked TODO, you MUST stop and tell the user the driver is not ready. You MUST NOT improvise a driver from general knowledge — the whole point of the reference is the traps it records.

4. Execute, recording evidence as you go. MUST.

Append one record per step to evidence.jsonl at the time you take the step. The contract is in references/evidence-schema.md. You MUST NOT batch the records at the end from memory — that is how selectors become e46 and observations become wishful thinking.

Loop per step: read state, act, verify, record.

5. Build the report with the writing-reports skill. MUST.

Load writing-reports. Run its new-report.ts into <root>/<work-id>/manual-tests/report, fill it from evidence.jsonl, and pass its validator.

You MUST NOT hand-write report HTML, invent CSS, or emit a Markdown file instead. Report presentation is that skill's job and it has a validator that this skill does not duplicate.

You MUST copy test-plan.md, evidence.jsonl and every workflow file into the report's own files/ directory, and link them from a "Related files" or "How to re-run this" section:

sh
cp test-plan.md evidence.jsonl workflows/*.json \
   <root>/<work-id>/manual-tests/report/files/

Link them as files/<name>. You MUST NOT link them as ../test-plan.md. The report is handed to a reviewer on its own, and writing-reports rejects a link that reaches outside the report directory.

Map each evidence record onto the template:

Evidence fieldReport node
stepthe section id a summary row targets
screenshot<img class="figure__image">
observed.figure__caption — what the shot proves
resolved<code class="code"> next to the figure
verdictthe badge--* in the summary row and the section heading

6. Name every gap. MUST.

The report's "Not covered" section lists each test you could not complete and the risk it leaves. The "Test data left behind" section lists every override, account, record or running process, with the undo for each.

Verdict rules

These exist because each one has been got wrong in a real run.

  • A synthesized click does not beat the popup blocker. window.open called from an automated click is suppressed. No tab appears. You MUST record PARTIAL, capture the underlying href or config value as supporting evidence, and name the human click still needed. You MUST NOT record PASS because the code obviously would work.
  • A missing element is BLOCKED, not FAIL, until the precondition is proved. A feature flag, plan tier or permission hides things. Check the precondition before you write a failure into a report that someone will act on.
  • PASS requires a screenshot. Reading the source is not evidence. If the only artifact you have is a config file or a code path, the verdict is PARTIAL and the config is supporting evidence, not proof.
  • Record the resolved selector, not the tool's ref. e46 is meaningless next week and to everyone else. Record what it resolved to.

Traps

  • Never dump full page text. One unfiltered page.text of a real app can run to thousands of tokens of inline CSS and buries the finding. Filter the accessibility tree, search for the string you need, or screenshot it.
  • Preconditions cost more time than the tests. Budget for flags and seed data. Finding no book, tenant, or account in the right state is a normal outcome — report it as NOT COVERED rather than faking a near-enough case.
  • A direct URL is not always navigation. A client-routed app can render blank when entered mid-route with state in the hash. Click through the UI once to confirm the route works, then use direct URLs.
  • Changing a config to enable the test changes the test. Record every override in "Test data left behind" with its undo, and say in the report that the run used it.

Reference

  • references/evidence-schema.md — the evidence.jsonl record contract.
  • references/drivers/surf-cli.md — the surf driver.
  • references/drivers/playwright-cli.md — the Playwright driver. TODO.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Browser Acceptance Evidence AI skill do?

Writes manual test steps, drives them in a real browser with surf or Playwright, captures screenshots and element selectors as evidence, and publishes an HTML report to shared context. Use when a change must be proved in a running app - manual test steps, QA steps, acceptance criteria, a smoke test, visual verification, "show me it works", or a hand-off that needs screenshots. Results in a written plan, a re-runnable script, and a linked report instead of a claim in chat.

Why use Browser Acceptance Evidence on TypingMind?

Because you install it once and use it with any model. Browser Acceptance Evidence is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Browser Acceptance Evidence in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/zenobi-us/dotfiles/tree/master/files/devtools/agent/bundles/developer/skills/browsers/browser-acceptance-evidence. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Browser Acceptance Evidence?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Browser Acceptance Evidence?

As many as you like. As long as a model supports skills, you can use Browser Acceptance Evidence with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Browser Acceptance Evidence AI skill free?

Yes. It is published on GitHub by zenobi-us under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇