The AI QA loop: report → simulate → auto-test. Klavity turns real customer-call transcripts into a recurring cast of AI Sims that catch bugs the moment a human hits one (Snap), walk your live pages in-character to surface issues (Sims), and re-test every release with zero-AI, self-healing replay (AutoSim) — every finding grounded in real evidence and filed straight into Jira, Linear, GitHub Issues, or Plane.
Klavity turns bug reporting, customer research, and end-to-end testing into one continuous loop — built around a recurring cast of AI Sims (personas grounded in real customer calls). Snap is Phase 1: the in-app reporter that catches a bug the moment a human sees it.
🌐 Live: klavity.in · Snap · Sims · AutoSim
Named after Ekalavya, the self-taught master — Klavity learns your product and tests it the way your users would.
Three phases, one set of AI Sims walking the same trail through your product:
| Phase | Product | What it does | Status |
|---|---|---|---|
| 1 | Klavity Snap | Right-click → describe → a grounded bug (screenshot + console + network) lands in your tracker. No extension needed. | ✅ Shipped (this repo) |
| 2 | Klavity Sims | Turn customer-call transcripts into AI personas that walk your real pages and react in their own voice — filing grounded bugs carrying the persona + a verbatim quote. | ✅ Live |
| 3 | Klavity AutoSim | Your Sims test every release: author a flow once, replay it with zero AI, and self-heal when the UI changes — never a silent false-green. | ✅ Shipped |
AutoSim was formerly called "Klavity OS." Everywhere you see it now, it's AutoSim.
- No browser extension required. The first-party widget owns right-click on your own site — your users report bugs without installing anything. (A Chrome extension exists too, for reporting on any site.)
- Grounded, not AI-slop. Every report carries real evidence — full-page screenshot, the page URL, and the last 50 console errors + network failures — so a ticket is reproducible, not a guess.
- Deduplicated. A repeat of a known issue bumps its recurrence count instead of spawning a duplicate ticket.
- Files where you already work. Jira, Linear, GitHub Issues, and Plane — directly, or routed through Klavity Cloud.
- Open-core & self-hostable. Run the whole thing on your own infra.
- Right-click anywhere → Report a Bug / Request a Feature / View submissions
- Auto screenshot on open — captures the full rendered page (cross-origin images included)
- Region capture — drag to select any area of the page
- Canvas annotation — pen, rectangle, arrow, text in 4 colours, with undo/clear
- Upload + paste — drag files, paste from clipboard, HEIC/HEIF auto-converted
- Context capture — page URL, browser, screen size, last 50 console errors, last 50 network failures
- 4 integrations — Jira · Linear · GitHub Issues · Plane
- Cloud switch — set one backend URL to route submissions through Klavity Cloud or your self-hosted instance
Embed the report widget on your own site so logged-in users can right-click → report, with the full-page screenshot auto-attached:
<script src="https://klavity.in/widget.js" defer></script>➜ Install from the Chrome Web Store — Klavity – AI Bug Reporter
Developer / self-hosted:
pnpm install && pnpm -r build- Open
chrome://extensions→ enable Developer mode → Load unpacked → selectpackages/extension/dist - Click the ⚡ Klavity icon → Settings → configure your integration
For SaaS products that want Klavity Snap built into their own app.
Script tag:
<script src="https://cdn.klav.io/snap/klavity-snap.umd.js"></script>
<script>
KlavitySnap.init({
integration: 'jira',
jira: {
baseUrl: 'https://yourorg.atlassian.net',
email: 'dev@yourorg.com',
token: 'your-api-token',
projectKey: 'PROJ'
}
})
</script>npm:
npm install @klavity/snapimport KlavitySnap from '@klavity/snap'
KlavitySnap.init({
integration: 'linear',
linear: { apiKey: 'lin_api_...', teamId: 'team_...' }
})Open the extension settings (click the ⚡ icon → Settings) or pass config to KlavitySnap.init().
| Setting | Description |
|---|---|
| Active integration | jira, linear, github, or plane |
| Jira: Base URL | e.g. https://yourorg.atlassian.net |
| Jira: Email + API Token | From Atlassian account settings |
| Jira: Project Key | e.g. PROJ |
| Linear: API Key | Personal API key from Linear settings |
| Linear: Team ID | Your Linear team ID |
| GitHub: PAT | Personal access token with repo scope |
| GitHub: Repository | owner/repo format |
| Plane: API Token | From Plane account settings |
| Backend URL | Leave empty for direct mode. Set to your self-hosted URL or Klavity Cloud to route all submissions through the backend. |
| Auto-file JS errors | Auto-file silent tickets for unhandled JS errors (opt-in) |
klav-snap/
├── packages/core/ # @klavity/core — shared types, integrations, annotator, crop, modal
├── packages/extension/ # Chrome MV3 extension — background, content script, options, popup
├── packages/sdk/ # @klavity/snap — embeddable script-tag / npm SDK
└── prototype/ # Klavity Cloud — Bun backend, dashboards, Sims & AutoSim engine
The cloud switch is a single backendUrl setting. Empty = direct mode (the extension calls Jira/Linear/etc. APIs directly). Non-empty = submissions route through the Klavity backend, which also powers Klavity Sims and Klavity AutoSim.
# OSS packages (extension + SDK + core)
pnpm install # install all workspace deps
pnpm -r test # run package tests (vitest)
pnpm -r build # build extension + SDK
# Load the extension in Chrome:
# chrome://extensions → Developer mode → Load unpacked → packages/extension/distThe prototype/ Cloud backend runs on Bun (cd prototype && bun install && bun run server.ts).
FSL-1.1-ALv2 (Functional Source License) — free for any non-competing use; converts to Apache 2.0 on the second anniversary of each release. For commercial licensing, contact hello@quantana.com.au.
Built by Quantana — an AI-first design and development studio.