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.

product · self-healingloop
  1. 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.
  2. 02The site is redesignedOvernight the button moves, its classes are hashed and its label changes. Nobody told you.
  3. 03The locator missesNone of the candidates matches a single element any more. Instead of guessing, the run stops on that step.
  4. 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.
  5. 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.
  6. 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

  1. 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 }
    ] } }
  2. 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.

  3. 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.

  4. 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.

    example
    curl -X POST https://api.kaab.ist/v1/proposals/prp_93Hd/approve \
      -H "Authorization: Bearer $KAAB_API_KEY" \
      -d '{"promote": true}'

Questions

Askedbefore you ask.

No. The pipeline is deterministic by default; an LLM is an optional extra step that only proposes candidates, each verified on the page.

No. Fixes are proposals. Only an approval promotes one into a new program version, and the old version stays one rollback away.

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.

Stop fixing selectors.Ship the automation.

Opening soon

Kaabist is getting ready for launch. The panel, the docs and the status page open on launch day.