Product · Self-healing
The site changed.Your program didn't.
Every target is recorded with several ranked locators and a fingerprint of the element it found. When the site changes and they stop matching, Kaabist finds the element again, writes the fix down as a proposal, and lets you promote it to a new version.
- 01A program that worked yesterdayEvery morning it opens the portal and clicks Export. Its locator has candidates: a test id, a role and name, the text.
- 02The site is redesignedOvernight the button moves, its classes are hashed and its label changes. Nobody told you.
- 03The locator missesNone of the candidates matches a single element any more. Instead of guessing, the run stops on that step.
- 04Kaabist finds what movedIt compares the page with the last good snapshot and finds the element that plays the same part: same place in the flow, same job.
- 05It proposes the fixThe new locator comes as a proposal: the diff, the old and new screenshots, and the evidence. Nothing changes on its own.
- 06You approve itOne click promotes it to a new version. The job carries on, and tomorrow's run uses the new locator.
How it works
01
Candidates, ranked
Test ids, roles with names, stable ids, exact text, filtered classes: each target keeps several candidates, tried in order until one matches exactly one element. After the first successful run Kaabist adds more, so every target has at least three.
example{ "click": { "candidates": [ { "testid": "renew" }, { "role": "button", "name": "Renew" }, { "text": "Renew", "exact": true } ] } }02
Deterministic first
When every candidate misses, the healer compares the page against the element's fingerprint, then looks for fuzzy anchors such as the text and the shape of the value. A language model is optional, and only ranks or proposes; every candidate is verified against the page.
03
Confidence decides
A fix scored 0.90 or higher can carry the current job on, and is still recorded as a proposal. Below that, the job pauses as drift, with the evidence, for you to decide. Nothing is promoted to the program without an approval.
04
Before your customers notice
Canary runs exercise your programs on a schedule, so drift shows up as a proposal before a customer's job fails on it.
examplecurl -X POST https://api.kaab.ist/v1/proposals/prp_93Hd/approve \ -H "Authorization: Bearer $KAAB_API_KEY" \ -d '{"promote": true}'
Questions
Askedbefore you ask.
More of Kaabist
Resumes where it stopped
Some steps only you can finish: a one-time code, a captcha, an approval. Kaabist pauses the run right there and emails a link to you, or to the teammate or customer you choose. Once they answer, the program continues from its last checkpoint. Nothing starts over.
Built by your coding agent
Connect Claude Code, Codex or Cursor to mcp.kaab.ist. Your agent opens a real Kaabist browser, works through the site with you, and what it does becomes a program: versioned, linted, and tested with a dry run before it ever submits anything.
Never submits twice
Mark the steps that change something (a submit, a payment, an order) as side effects. Kaabist writes each one down just before it runs and again once it has worked. If a server crashes in between, Kaabist never presses the button again on its own: it pauses and asks you to check.
