Dev Patel

v0.1.0 · browser path verified · Oct 2026 → Present

Clone Me

It watched me work.
Then it did the work.

A local-first recorder that notices the workflows you keep repeating, turns them into reviewable skills with inputs, and runs them for you — asking before anything irreversible.

The review screen after a synthetic week: three repeated workflows mined from 28 episodes and 341 recorded events, each waiting for approval before it can run.

Highlights

31skills mined from 28 episodes
107tests
131domains never recorded

The problem.

A lot of office work is the same seven clicks with different values: close the ticket, set the resolution, leave the comment. Writing a macro for each one costs more than doing it, and nobody writes down the workflows they actually repeat.

Learning them by watching is the obvious answer and the dangerous one. A screen recorder sees passwords, bank pages and API keys pasted into a terminal, and an agent that replays clicks can send, delete or pay for something nobody meant it to.

What I built.

The recorder takes the foreground app, the URL, each click with the accessibility role and name of what was clicked, typing aggregated per field — never raw keystrokes — and screenshots. Before anything touches disk, a privacy layer drops blocked apps, 131 blocked domains and login or checkout URLs, discards anything typed into a password field, redacts keys, tokens and card numbers, and OCRs each screenshot in memory to black out secrets. Without OCR it takes no screenshots at all.

Episodes are split at idle gaps and app switches, compacted into semantic actions, and mined with a gap-tolerant sequential pattern miner. Values that differ between repetitions become inputs. Claude only names the skill and its inputs, and its answer is validated: it can't add, drop or reorder steps, and it can add a confirm-first flag but never clear one.

Approved skills run dry by default. With --execute, a computer-use loop observes the screenshot and accessibility tree, takes one JSON action from Claude, confirms anything that looks irreversible, acts, and verifies the page against where the recording says that step leads. The browser is locked to the skill's own host and port inside Chromium's network stack, before any request leaves.

Screens.

One learned skill: seven steps, the inputs that varied between repetitions, and the irreversible click flagged to ask first.
One learned skill: seven steps, the inputs that varied between repetitions, and the irreversible click flagged to ask first.
The executor's own last screenshot: the bundled Tracklet app after it found TRK-117, resolved it and left the comment, confirmed through Tracklet's API.
The executor's own last screenshot: the bundled Tracklet app after it found TRK-117, resolved it and left the comment, confirmed through Tracklet's API.

What I considered.

Rejected

Write screenshots to disk and redact them afterwards

Unredacted pixels would sit on disk between the two steps. Frames are grabbed into memory, OCR'd off the input thread, and written only after secrets are blacked out.

Rejected

Let the model rewrite the mined skill however it likes

The miner already knows the steps from evidence; the model is there to name things. A free rewrite could drop a step or quietly remove a safety flag.

Chosen

Mine locally, let the model name, and execute dry-run first with a confirm before every irreversible step

A done from the model only counts as succeeded if the last checkable step landed on the expected page; otherwise the run is unverified and exits non-zero. The cost: linear workflows only, at least three repetitions, and no scheduler yet.

Results.

  • make demo records a scripted week through the real recorder, aggregator and privacy filters: about 340 events become 28 episodes, and the miner finds the 3 workflows that repeat 5–7 times while ignoring the one-off noise.
  • The executor drives headless Chromium against the bundled Tracklet app, stops to confirm the irreversible click, and checks Tracklet's own API to prove the ticket was closed with the comment.
  • The privacy traps in the demo week — a password manager, a bank, a password field, an API key pasted into a terminal — are dropped or redacted from text and blacked out of the screenshot.
  • An independent review found 12 issues, including a host lock that redirects could slip past; all fixed with regression tests. 107 tests in CI on Python 3.10–3.13.

Architecture

How it fits together.

Recorderclicks · fields · URLsscreenshotsPrivacy filtersblocklists · secure inputredaction · OCR blackoutMinerepisodes → actionssequential patternsReviewapprove · editrejectExecutorobserve · decideconfirm · act · verify
  1. 01

    Recorderclicks · fields · URLs · screenshots

  2. 02

    Privacy filtersblocklists · secure input · redaction · OCR blackout

  3. 03

    Minerepisodes → actions · sequential patterns

  4. 04

    Reviewapprove · edit · reject

  5. 05

    Executorobserve · decide · confirm · act · verify

Everything up to the skill stays on the machine. Claude sees redacted key frames to name a skill, and a screenshot plus the accessibility tree to run one.

In hindsight

The recorder backends for macOS, Windows and Linux are written against their real APIs and have never run on a real display — everything downstream is tested through a simulated backend that feeds the same code path. The demo's Claude responses were hand-written in the exact format the prompts ask for, so it proves the plumbing, not the model. The thing I would do earlier next time is the network lock: Playwright's request routing never sees redirect follow-ups, and it took a reviewer to show that the lock had to live in Chromium itself.

Tech specs.

Type
Project
Where
Personal
When
Oct 2026 → Present
Duration
1 mo
Status
v0.1.0 · browser path verified
Stack
PythonPlaywrightClaudeFastAPISQLiteTesseractGitHub Actions
Caveats
The keyless demo replays hand-written Claude responses, so it shows the pipeline, not live model quality. The macOS, Windows and Linux recorder backends have not run on a real display yet.