Skip to content
KaleFlow
Get started

Product

From a repo and a URL to a record you can inspect.

KaleFlow does four things in order, then puts the result on one canvas. This page walks through each, with the artifact it leaves behind. Everything shown is a simulated run against a demo app.

Step 01 · Repo Brief

It reads the code and predicts where the value is.

Before KaleFlow opens your app, it reads your repository. The Repo Brief predicts the flows where your product creates value for a user: signing up, checking out, inviting a teammate.

Each predicted flow comes with where it was found in the code and how confident the brief is. A prediction is not a verdict. The crawl is what checks it against the running app.

You give it
A repository (--repo .)
You get
A list of predicted value flows

Repo Briefpredicted value flows · 4

FlowFound inConfidence
Sign upsrc/app/signup/page.tsx0.94
Create a projectsrc/app/projects/new/page.tsx0.91
Invite a teammatesrc/app/settings/members/invite.tsx0.88
Upgrade to a paid plansrc/app/billing/checkout/page.tsx0.86

Step 02 · Crawl

It explores the live app like a real user.

An AI crawler opens your live URL and works through each flow the way a person would: it reads the page, clicks, types and waits for the result.

What it finds, it compiles into repeatable automations, one replay per flow. This is the only step where AI does the driving.

You give it
A live URL (--app)
You get
One compiled replay per flow

crawlflow 01 · Sign up

  1. 14:02:07openhttps://app.example.com/signup
  2. 14:02:08fillEmail → a@example.com
  3. 14:02:08fillPassword → ••••••••••
  4. 14:02:09click“Create account”
  5. 14:02:11arrive/welcome
  6. 14:02:11compilereplay “Sign up” · 3 steps
  1. frame 0100:03.87

    app.example.com/signupa@example.com••••••••••Create account

    Account created

  2. frame 0200:06.92

    app.example.com/projectsNewLaunch planjust now

    Project in the list

  3. frame 0300:08.90

    app.example.com/settings/membersb@example.comMemberSend invite

    AInvite sent

  4. frame 0400:10.78

    app.example.com/invite/7f3a…AAccept invite

    BInvite opened

  5. frame 0500:14.23

    app.example.com/settings/membersAa@example.comOwnerBb@example.comMember · joined

    ABoth users listed

  6. frame 0600:17.39

    app.example.com/billing/checkoutTeam plan4242 4242 4242 424212 / 34123Payx:225 y:137 · disabled

    Pay never enables

Fig. 3What the crawler saw, frame by frame, across four flows. Schematic captures from the simulated run.

Step 03 · Replay

The replay runs again, the same way, without AI.

A replay is deterministic. It runs the same steps in the same order every time, and it needs no model to do it.

That is what makes a failure mean something. When a replay that passed before fails now, the replay did not change. Your app did.

You give it
Nothing new
You get
The same flow, re-run on demand
Replay of Upgrade to a paid plan across three simulated runs. Runs 1 and 2 pass every step; run 3 fails at step 4.
StepRun 1compiled by the crawlRun 2replayed, no AIRun 3replayed, no AI
01 Open /billingPassed0.91sPassed0.86sPassed0.88s
02 Choose the Team planPassed0.69sPassed0.73sPassed0.71s
03 Enter a test cardPassed1.60sPassed1.55sPassed1.57s
04 Click PayPassed0.84sPassed0.88sFailed1.04s
05 See the receiptPassed1.12sPassed1.09sNot run—
VerdictPassedPassedFailed

Fig. 4One replay, three runs. Run 3 is where the Pay button stopped enabling.

Step 04 · Evidence

Every step keeps what the browser saw.

Each replayed step saves a screenshot, video, a trace, a HAR file and the console output. Passing steps keep theirs too, so “it worked” is something you can look at.

When a step fails, start with the screenshot of the broken step. The requests and the console lines from that moment are next to it.

Captured
Screenshots, video, trace, HAR, console
Kept for
Every step, pass or fail
Evidence for step 4, Click Paystep 04 · Click Pay
app.example.com/billing/checkoutTeam plan4242 4242 4242 424212 / 34123Payx:225 y:137 · disabledFailed

The screen at the moment the step failed. The Pay button is still disabled.

The whole flow as video, with a marker at each step. Jump straight to the failure.

  1. 00:00.00navigate/billing200 · 142 ms
  2. 00:00.88click“Team” planselected
  3. 00:01.59fillCard number4242 4242 4242 4242
  4. 00:03.16click“Pay”button is disabled

Each action the replay took, in order. POST /api/billing/intent returned 500 just before the click.

consolestep 04 · 5 lines

  1. 00:03.16log[checkout] plan=team interval=month
  2. 00:03.48warn[checkout] payment intent not ready, retrying (1/1)
  3. 00:03.71errorPOST /api/billing/intent 500 (Internal Server Error)
  4. 00:03.72errorTypeError: Cannot read properties of undefined (reading 'client_secret')
  5. 00:03.72error at confirmPayment (checkout.tsx:88:31)

HAR · step 04 · Click Pay0 — 720 ms

MethodRequestStatusTimeWaterfall
GET/billing/checkout200142 ms
GET/api/billing/plans20088 ms
GET/api/session20054 ms
POST/api/billing/intent500212 ms
GET/api/billing/intent/status40461 ms

The result · Canvas

Everything lands on one map.

The canvas shows how your flows relate and where each one succeeds or fails. Select a flow to open its steps and its evidence. Flows that need two users show both lanes and the hand-off between them.

Simulated run · app.example.com

4 flows3 passed1 failedT+00:18.43

app.example.com/billing/checkoutTeam plan4242 4242 4242 424212 / 34123Payx:225 y:137 · disabledstep 4 · screenshot

Flow 04/billing/checkout

Upgrade to a paid plan

Failed

The Pay button never enables. The request that prepares the payment returns 500.

  1. 01Open /billingPassed0.88s
  2. 02Choose the Team planPassed0.71s
  3. 03Enter a test cardPassed1.57s
  4. 04Click PayFailed1.04s
  5. 05See the receiptNot run—
  • screenshots
  • video
  • trace
  • HAR
  • console

Fig. 5The canvas for the simulated run. Drag to pan; select a flow to inspect it.

  1. 01 · user AOpen MembersPassed0.72s
  2. 02 · user ASend invite to user BPassed1.26s
  3. Hand-off from user A to user B: invite link
  4. 03 · user BOpen the invite linkPassed1.88s
  5. 04 · user BAccept and joinPassed2.14s
  6. Hand-off from user B to user A: new member
  7. 05 · user ASee user B in MembersPassed1.31s

Fig. 6Flow 03 as a two-lane hand-off: user A invites, user B accepts.

Run it

Three commands, on your machine.

KaleFlow is local-first. Start from the CLI; use the hosted app when you want run history and sharing.

terminal
  1. npx kaleflow init --app https://app.example.com --repo .

    Reads the repo and writes the Repo Brief.

  2. npx kaleflow crawl

    Explores the live app and compiles replays.

    ✓Sign up3/3 steps3.87s

    ✓Create a project3/3 steps3.05s

    ✓Invite a teammate5/5 steps7.31s2 actors

    ✕Upgrade to a paid plan4/5 steps4.20sPay button disabled

    evidence saved: screenshots, video, trace, HAR, console

  3. npx kaleflow ui

    Opens the canvas in your browser.

Output shown is illustrative, from the simulated run above.