native macOS · bring your own Claude or Codex
Run coding agents that movebetween your Mac and the cloud.
Bring your own Claude or Codex. Free on your Mac. The cloud machine never resets.
What was actually wrong
The double charge is not a Stripe problem. <PaymentStep> created a fresh intent on every mount, so a customer who went back to fix their address left an orphaned intent behind — and both of them were authorised.
The idempotency key is now derived from the cart id instead of being generated in the component. A retry lands on the same intent rather than making another one, which is what the header is for; we were defeating it every render.
The flaky test
checkout.e2e.ts was never flaky. It was racing the webhook: the assertion ran the moment the redirect landed, and the order row is written by the handler, not by the redirect — so it passed or failed on how fast the network was that minute. It waits on the order now.
Migration 0042_orders_intent_id.sql is written and reversible. On a copy of production it backfills 11,204 rows in about nine seconds and holds no lock that checkout needs.
Types clean, e2e green three runs in a row.
10:39 AMShip the checkout rewrite
- Repository
- northwind/web
- Branch
- checkout-rewrite
- Agent
- Claude Code
- Owner
- jordanvale
- Updated
- now
This branch has no pull request yet. Opening one pushes checkout-rewrite first, and asks the agent to commit what is still in the working tree if it has to.
Local and cloud
It starts on your Mac. It does not have to stay there.
Caret is a native Mac app, and on your own machine it is free and needs no account — your real checkout, your real dev server, nothing to sync. That is the whole product, right up until the evening you want to shut the laptop with a turn still running.
Then you move the session. Same window, same conversation, now on a machine of ours that does not go to sleep when you do.
Your cloud box
A machine of your own in the cloud.
One Linux box per developer, with a disk. It gets set up once and stays that way — your branch checked out, your install done, your dev server on the port you left it on. Stop working and it sleeps; come back and it is awake before you have finished reading the last message, processes and all.
The agent sets it up
If there is a devcontainer it reads that. If there is not — which is most repositories — it works the install out from the lockfile, runs it, checks the project actually builds and serves, and writes the file down so nobody has to do this again. Nothing to answer, no base image to choose, and no second time.
You point it at a repository and go and do something else.
It sleeps when you stop
Nothing to remember to turn off, and nothing to spin back up. You are billed for the hours the machine was awake, which — for anybody who works in bursts rather than continuously — is a small fraction of the hours it existed.
A box you have not touched since Friday costs nothing over the weekend.
One box, every project
It belongs to you rather than to a repository, so everything you work on lives on it. They share the caches too: the first install is a cold one and the ones after it come off the store you already have, which is why the fourth is quicker than the first.
The fourth project is an install, not a fifth machine.
Four agents, four worktrees
Every session gets a checkout of its own, so they are not queued behind one another on a single working tree. This is the part that is hard to feel until you have it: the reason to have a machine that is not your laptop is not only that it stays awake, but that you can ask it for four things at once.
Four things happening, rather than four things waiting.
Your cloud machine, on call
Seamless handoff between cloud and your Mac.
A machine in a data centre cannot see your Desktop, your Downloads or the browser you are signed into — so ordinarily you become the courier, downloading and re-uploading and describing screenshots in words. Caret gives the session a narrow door back to your Mac, and it opens for the thing you asked for and nothing else.
› the mock is on my desktop, use it
It reads the file and works from the design, rather than from your description of the design.
› export that as a CSV
It lands in Downloads and opens. Nothing to copy out of a terminal.
› does this build on my machine?
The box wrote it; your Mac compiles it. Xcode, the simulator, the phone on your desk.
› open the PR so I can look
In your browser, already signed in as you. You read it and merge it.
Schedules
Give it a time, and it starts without you.
A schedule is a prompt with a clock on it. Weekdays at a quarter to nine, every two hours, Sunday at two in the morning — the box wakes, the agent does the work in your repository, and the machine goes back to sleep.
It runs on the box, not on your laptop. So it happens whether or not your Mac is open — and because the box is asleep in between, a job that takes four minutes a night costs you four minutes a night.
Every run is a session
Not a log file. The brief that ran at 08:45 is in your list with its transcript, so you open it and carry on the conversation from wherever it got to.
You can see whether it fired
Each schedule keeps its recent runs, most recent first, with what happened. The question after setting one of these up is always “did it actually run”, and the answer is on the page.
Start on your own Mac. Move when a session is worth keeping.
Local mode is the whole product, free, no account.
Your code is not trained on, and nobody here reads it.