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.

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


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.
- 01
Recorderclicks · fields · URLs · screenshots
- 02
Privacy filtersblocklists · secure input · redaction · OCR blackout
- 03
Minerepisodes → actions · sequential patterns
- 04
Reviewapprove · edit · reject
- 05
Executorobserve · decide · confirm · act · verify
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.