Paste a user story → generate executable Playwright pytest tests from your own LLM, on your own infra. It even learns from your reference docs — and they stay in-house.
git clone https://github.com/tancat-ai/tancat && cd tancat && uv sync && bash launch_ui.shOne seamless loop that completes end-to-end, with locators taken from the real rendered DOM — not guessed.
Plain language Jira ticket, user acceptance criteria, or markdown spec. That's the only input — no syntax to learn or test framework to master. Or upload a spec doc — the LLM learns from it, and it stays in-house.
TanCat launches headless Chromium, inspects real DOM nodes, builds a page skeleton, and feeds exact attributes to your offline LLM. Score-gated resolution - no hallucinated IDs.
TanCat executes the generated test, records screenshots, and writes out evidence in the shape each role needs: a suite heatmap for the product owner, a Gantt timeline for the test manager, and JUnit/HTML/CSV for the rest.
Locators aren't guessed. TanCat scrapes the live DOM and resolves against real attributes — with score-gated confidence — before it prompts, so every selector traces back to the rendered page.
# Feature: High-Value Wire Confirmation
1. Navigate to /transfers/wire
2. Input amount: “50000”
3. Select beneficiary: “Escrow Alpha”
4. Click “Submit Wire”
5. Verify 2FA modal with ID #two-factor-dialog
import pytest
from playwright.sync_api import Page, expect
@pytest.mark.egress_gated
def test_wire_confirmation_modal(page: Page):
page.goto("/transfers/wire")
page.locator('[data-testid="wire-amount-input"]').fill("50000")
page.locator('select[name="beneficiary"]').select_option("escrow_alpha")
page.locator('#submit-wire-btn').click()
modal = page.locator('dialog#two-factor-dialog')
expect(modal).to_be_visible()
expect(modal).to_contain_text("Confirm Authorization")
Every incumbent cloud SaaS routes your app's DOM through multi-tenant external servers. TanCat deploys on your infra, pointed at your local LLM, keeping sensitive customer data isolated.
Native compatibility with llama.cpp, Ollama, LM Studio, or an in-cluster private vLLM endpoint. Swap models anytime with zero vendor lock-in.
Runtime outbound calls strictly limited to your local/self-hosted LLM endpoint and your target application. Verified by static code inspection in CI via python scripts/audit_egress.py (AST call-site static inspection) wired into smoke tests and CI.
When design teams alter markup or CSS class names, TanCat calculates semantic affinity to reconcile and heal broken locators in staging before CI turns red.
Real evidence, not just a vague checkmark. HTML, CSV, NDJSON, and JUnit XML test reports with deterministic DOM execution bundles.
Organizes test code into maintainable Page-Object-Model (POM) python classes automatically. Drop our reusable GitHub Action or GitLab Runner into your existing pipelines in minutes.
No PyPI background calls at runtime. No tracking beacons. No model weights downloaded at runtime. Enforced via python scripts/audit_egress.py AST static inspection in CI. The LLM traffic is constrained to your trusted endpoint and target traffic is strictly SSRF-guarded.
Deploy it once per company, per infra. You should never be penalized when your entire QA and dev squad writes reliable tests.
For solo developers, or for local debugging.
Anchor: Mabl 500-credit trial; testRigor free trial
Unlimited internal runs across your sprint teams and staging CI pipelines.
Anchor: testRigor $450/mo Pro; Mabl $499/mo
For banking, healthcare, aerospace, and government zero-trust environments.
Anchor: Mabl Private ~$900/mo; QA Wolf $8k/mo+, $90k median ACV
TanCat uses uv for fast, reproducible dependencies.
uvTell us about your deployment — your stack, your LLM, your environment (air-gapped or not). We’ll set you up with a license and point you to the right tier.
We’ll get back to you within 2 business days. Per-deployment pricing · no per-seat charges.