AI software testing, ownership edition

AI software testing: who owns the tests after you cancel?

Every guide on this topic compares monthly prices and feature checklists. None of them ask the question that determines long-term value: when you stop paying, does your test suite survive? Assrt stores each test case as plain markdown, caches it at ~/.assrt/scenarios/, and uses a UUID v4 as the only access token. No key server. No subscription gate. The scenario file is just 0 text file you already own.

M
Matthew Diakonov
9 min read
4.8from Assrt MCP users
scenario-store.ts line 8: 'No auth required: the UUID v4 IS the access token'
Local cache at ~/.assrt/scenarios/<uuid>.json after every run
Open-source MCP runner — read every line, fork it, self-host it
plain markdown test plansUUID = access tokenlocal cache at ~/.assrt/scenarios/git-committable test suiteself-hosted MCP runneropen-source, no subscriptionno proprietary YAMLtests survive cancellation

The format question every guide skips

When you evaluate AI testing tools, you typically compare: which platforms support my stack, which ones have self-healing, what does the AI actually do? What the comparisons almost never surface is the format question: what does the tool write your tests as, where does it store them, and can you get them out if the vendor folds or raises prices?

Most commercial platforms use a proprietary storage format — a YAML schema, a binary blob, a vendor-specific JSON tree — that is only readable through their API. The API requires a subscription token. Cancel the subscription: the token is revoked and the tests become inaccessible. You may get a CSV of test names. You will not get runnable test logic.

Proprietary storage vs. plain markdown

Tests stored in vendor cloud database Format: proprietary YAML or binary schema Access: subscription API key (revoked on cancel) Portability: export to CSV of names only Cost: $1,000 to $7,500+ per month Cancel subscription → test suite inaccessible

  • Tests in vendor database, not your repo
  • Proprietary format, no git history
  • API key tied to subscription
  • Cancel = lose test logic

How Assrt actually stores and runs a test

Test plan to results: the full data path

Test Plan
Target URL
Variables
Assrt MCP
Browser
Results JSON
Your Repo

What the test plan looks like

Assrt test cases are numbered English instructions under a #Case N: heading. No selector syntax. No YAML schema to learn. The file reads like a QA checklist and can be written by anyone who understands the flow being tested.

tests/checkout.md

This file lives in your repo. Commit it. Review changes in pull requests. Roll back to a previous version with git revert. The test logic belongs to the same version control history as the application it covers.

The git workflow in practice

After any run, Assrt writes the scenario to ~/.assrt/scenarios/<uuid>.json. The JSON wraps the same markdown plan, so it is readable in any text editor. You can inspect it, add it to your repo, or run it offline without any network call.

Terminal — scenario storage and git commit

How the test execution loop works

1

Write a test plan in plain markdown

Each '#Case N:' block is a numbered list of English instructions. No selector knowledge required. The plan lives in a file you own and commit.

2

Assrt MCP reads the plan and launches a browser

The MCP server parses the '#Case' blocks, preflight-checks the target URL with an 8-second timeout, then hands control to the agentic loop.

3

LLM receives a live accessibility tree snapshot

Before every action, the agent calls snapshot() and receives the current DOM as a compact text tree with element references like ref=e5. No selectors are pre-baked into the plan.

4

LLM decides the next tool call

The model chooses from 18 browser tools: navigate, click, type_text, assert, wait_for_stable, and more. It calls complete_scenario when the case is done. There is no hard step limit.

5

Results and video saved locally

Pass/fail, assertion evidence, and a .webm recording write to /tmp/assrt/results/latest.json. A local HTTP server serves a video player at 127.0.0.1 with speed controls and seeking.

The cost of commercial AI testing vs. running your own

Commercial AI testing platforms price on a per-seat or per-run model. Entry-level plans start around $1,000 per month. Midmarket enterprise contracts for tools like Mabl or testRigor run $7,500 and above per month. Assrt MCP has no subscription tier. The only cost is your Anthropic API usage, which runs to a few cents per test scenario with Claude Haiku.

$0/moEntry price for commercial AI testing
$0/moAssrt MCP license cost
0%Test cases owned on day one

What you are actually comparing

FeatureCommercial AI testing platformsAssrt
Monthly license$1,000 to $7,500+Free (open-source)
Test storage formatProprietary YAML or vendor binaryPlain markdown (#Case N:)
Test access modelAPI key tied to subscriptionUUID v4 is the only token
Tests after cancellationInaccessible (key revoked)Still in your repo and ~/.assrt/
Self-hosted optionCloud-only (most vendors)Yes — MCP server runs locally
Version controlVendor dashboard historyGit — full diff, blame, revert
Source codeClosedOpen-source (MIT)

What you own with Assrt from day one

Tests live in your repo

The '#Case N:' markdown format is plain text. Version-control it, diff it, review it in a PR — the same way you treat any other source file.

UUID as access token

No API key required. The UUID v4 is the only credential. Share it, revoke it by discarding it.

Local cache at ~/.assrt/

Every scenario is cached at ~/.assrt/scenarios/<uuid>.json after the first run. Offline access is built in.

Open MCP protocol

The runner speaks standard MCP. Any MCP-compatible client or model can drive it. No proprietary RPC layer to depend on.

Open-source runner

The full server is at github.com/assrt-ai/assrt-mcp. Read every line. Fork it. Deploy it on your CI without a vendor API call.

The complete ownership checklist

Every item below is verifiable by reading the source at assrt-mcp/src/core/scenario-store.ts and scenario-files.ts.

What Assrt gives you on first run

  • Test plan markdown files, git-committable from day one
  • Local scenario cache at ~/.assrt/scenarios/<uuid>.json
  • Pass/fail JSON at /tmp/assrt/results/latest.json
  • Video recordings (.webm) on your own disk
  • Open-source MCP runner you can fork and self-host
  • Scenario UUID as access token — no subscription-gated API key
  • Auto-sync of file edits with 1-second debounce (scenario-files.ts)

Want to see your test cases stay yours?

Bring a URL and a flow to test. We will run it together, commit the scenario file, and show you exactly where it lives on disk.

Book a call

Frequently asked questions

What format does Assrt store test cases in?

Test cases are stored as plain markdown using a '#Case N: name' heading format. Each case is a numbered list of natural language instructions: navigate here, fill this field, assert that text. Assrt writes the live plan to /tmp/assrt/scenario.md and caches completed scenarios as JSON at ~/.assrt/scenarios/<uuid>.json. The JSON wraps the same markdown string, so the test plan is always readable in a text editor and committable to git.

What happens to my test suite when I cancel a commercial AI testing platform?

With most commercial platforms, your tests are stored in their proprietary format inside their cloud. The access token that lets you fetch them is tied to your paid subscription. Cancel and the token is revoked; you get at most a CSV export of test names if the vendor is generous. With Assrt, the UUID that identifies a scenario also functions as the access token — no subscription required. Tests are cached locally before and after each run, so cancelling an API plan (there is none) or losing connectivity does not erase anything.

What is the capability-URL model Assrt uses for scenario sharing?

Each Assrt scenario is identified by a UUID v4. That UUID IS the access token: anyone who knows the UUID can load the scenario from app.assrt.ai without presenting any separate credential. This is the capability-URL model, the same pattern used by shared Google Docs with 'anyone with the link' access. Practically: sharing a test means sharing a UUID. Revocation means discarding the UUID. The source comment at scenario-store.ts line 8 spells this out: 'No auth required: the UUID v4 IS the access token.'

Can Assrt run tests without an internet connection?

Yes. After any scenario runs, the full scenario object (plan, URL, variables, tags) is written to ~/.assrt/scenarios/<uuid>.json. The next run checks the local cache first; it only calls app.assrt.ai to sync updates or load a scenario you have not seen before. The MCP server itself runs on your machine or your CI, so the execution path is entirely local: Claude Haiku drives the browser through Playwright MCP, results write to /tmp/assrt/results/, and the video player is a localhost HTTP server. Nothing in the test loop requires an external service.

How does LLM-driven test execution differ from AI-generated test code?

AI-generated test code produces a .spec.ts or .yaml file that a conventional runner then executes. The AI is a one-time author; all adaptation to UI changes happens at the next authoring session. LLM-driven execution never produces a script file. The model receives a live accessibility tree snapshot, sees element references like ref=e5, and decides each tool call turn-by-turn. When the UI changes between two runs, the model binds to whatever element name matches today, not the name from yesterday's authoring session. The adaptation happens at click time, not at the next code-gen cycle.

What is the MCP protocol and why does Assrt use it instead of a proprietary API?

MCP (Model Context Protocol) is an open standard for connecting AI models to tool surfaces. Assrt's test runner is implemented as an MCP server, which means the tool definitions are expressed in the same schema that any MCP-compatible model can consume. You can run Assrt from Claude Code, from any IDE with MCP support, or from the CLI. Because the protocol is open, the runner is not coupled to a single AI vendor: swap the model parameter and the same scenario runs against a different underlying LLM. Proprietary APIs for AI testing tend to lock both the format and the AI layer simultaneously.

How do I version-control my Assrt test cases with git?

The simplest approach: commit the test plan markdown files alongside your application code. Assrt watches /tmp/assrt/scenario.md with a 1-second debounce and syncs edits to the cloud; you can also commit that file directly or maintain it in a tests/ directory. The local cache at ~/.assrt/scenarios/<uuid>.json is also plain JSON — git-committable, diff-readable, mergeable. A team workflow looks like: write test cases in markdown, commit them, run assrt run on CI pointing at the committed file, push results as CI artifacts.

Is Assrt free? What is the actual cost to run it?

Assrt MCP is open-source and free to install and run. Each test run uses Claude Haiku via the Anthropic API, which charges per token. A typical 10-step scenario runs to about 20,000 input tokens and 2,000 output tokens per turn, across roughly 10 turns, putting the per-run API cost in the range of a few cents depending on Anthropic's current pricing. There is no Assrt subscription, no per-seat fee, and no vendor-locked cloud where your tests live. The cost ceiling is your Anthropic API usage.

How did this page land for you?

React to reveal totals

Comments ()

Leave a comment to see what others are saying.

Public and anonymous. No signup.