Computer-use agents built on frontier models work, but every step ships a screenshot to a big model and waits several seconds for a plan. A twelve-step task can cost close to a dollar. Most of those steps do not need a plan at all: they need one choice from a short list of buttons.
awlevin/typesafe-computer-use, called jev for short, is built on that observation. Per the README it drives a Mac toward a goal you type in plain English for about a fiftieth of a cent per step. It reads the screen deterministically, asks a small classifier which action comes next, and only calls a writing model when a text field genuinely needs free text or the classifier has stopped and the screen needs reading.
This post covers what it is good for, the install, and a safe first run.
The README measures one decision on the same screenshot and goal against Claude Opus 5 given a bare screenshot:
| jev | frontier model, bare screenshot | |
|---|---|---|
| cost per decision | $0.0002 | $0.032 |
| cost per 12-step task | $0.003 | $0.40 to $0.90 |
| model latency | 0.13 to 0.38 s | 5.2 s |
| full step with capture and OCR | about 1.5 s | about 5.5 s |
It is honest about the catch: the big model read event dates off the pixels and compared them unaided, while the classifier needed date parsing written in code. Every piece of reasoning a frontier model does for free has to be rebuilt as deterministic state.
You need macOS 14 or newer, Python 3.12 or newer and uv. Windows 10 and 11 are experimental.
git clone https://github.com/awlevin/typesafe-computer-use
cd typesafe-computer-use
uv sync
cp .env.example .env # fill in the keys
The .env variables:
TYPESAFE_API_KEY (required): used for every decision.ANTHROPIC_API_KEY (optional): used for typing free text, writer-proposed URLs and the final answer. The README documents pointing the writer at another model instead, including LM Studio, Ollama or any OpenAI-compatible server.CLICKER_EMAIL (optional): enables the type_email action.CLICKER_BROWSER (optional): defaults to Google Chrome.
Then grant your terminal Screen Recording and Accessibility in System Settings, Privacy & Security. Without the first, captures are just wallpaper. Without the second, clicks are silently dropped and --act refuses to start.
It drives your real mouse and keyboard, so start without --act:
uv run clicker "open the Playground" # dry run: one step, prints what it would do
uv run clicker-inspect "any goal" # capture and open the annotated screen + payload
Clear the terminal before you run it. The terminal is on screen, so its text becomes OCR input.
uv run clicker "open the Playground" --act # up to 100 steps
uv run clicker "log in" --act --steps 20 --delay 3 # longer and slower
uv run clicker "log in" --act --handoffs 0 # the classifier alone
To stop a live run, press Ctrl-C or slam the mouse into the top-left corner of the screen. The loop also stops on done, low confidence, a stall or the step limit. Every run writes a runs/<timestamp>/ folder, so a stalled run can be replayed offline, and the README says a run folder attached to a bug report is the most useful thing you can send.
The projects collected on the TypeSafe Computer Use page show it as a base layer:
If your task lives entirely in a browser, Browser Use's Jev Ultrafast applies the same classifier idea to a numbered table of page elements, and jev itself has a browser backend that reads the DOM over Chrome DevTools with no OCR and no screen permission.
--steps value and, for anything risky, the documented Linux sandbox in a container.
Source repo: awlevin/typesafe-computer-use. License: MIT.
Want the setup commands for 50 AI repos people actually ship with? Get the free AI Repos That Actually Ship pack: https://dedupedai.com/ship-pack/?utm_source=devto&utm_medium=article&utm_campaign=shippack