jev-harness is an agent that runs on your own machine. Ask it for something in plain language and it does the work — reads your files, runs the commands, drives a browser, writes what you asked for.
It is built to be cheap and fast enough to leave running all day. Most requests land in a few seconds and cost a fraction of a cent. A heavy day — a hundred requests of mixed size — is a few cents.
It runs as a command line tool or as a desktop app, and it can drive any model you like, including one running locally on your own hardware.
The desktop app, recording its own window during a real run. It looks like a messaging app on purpose: you see what it says, not what it does. The ⓘ — or the typing dots — opens every command and output behind the reply. Threads are continuous and run concurrently.
Demos
Every recording below is a live, unedited run, sped up.
10,000 leads, one sentence. It profiles the sheet, sees the notes are free text, writes itself a script, judges every row and then says who to call.
5,000 invoices — who is about to stiff us?
400 commits — which ones smell like 3am panic fixes?
It browses. It searches, clicks a real result, reads it, and answers with its source — it never types a guessed link. Two real recordings on one clock: the app's window, and the browser it is driving. The browser is a separate clean profile: none of your logins or cookies.
Just ask your computer something.
What day-to-day use costs
Measured on real runs, default models.
| task | time | cost |
|---|---|---|
| a chat reply | ~1 s | $0.0005 |
| which laptop am I on, how much disk is left | ~4 s | $0.0006 |
| what's hogging my CPU | ~6 s | $0.0011 |
| what changed in the last commit | ~10 s | $0.0009 |
| a CSV analysis script, written and run | ~20 s | $0.0009 |
| a designed landing page | ~30–75 s | $0.002 |
| triage a 10,000-row sheet end to end | ~60 s | $0.004 |
Bring your own model
Anything that speaks the OpenAI chat API works — Ollama, LM Studio, llama.cpp, vLLM, MLX, or a GPU box over a tunnel. Run it on your own machine and generation is free and private.
ollama pull qwen3:4b-instruct JEV_PEN_MODEL=ollama/qwen3:4b-instruct node cli.mjs "what changed in the last commit?" # or any OpenAI-compatible server export JEV_PEN_BASE_URL=http://127.0.0.1:1234/v1 JEV_PEN_MODEL=local/your-model-name node cli.mjs "..."
In the desktop app, pick the model from the dropdown in the header. Honest guidance from our own tests: a 4B model on-device writes a correct shell command in about 1.4 s and handles look-ups, git questions and simple edits. It is not enough for a whole analysis script or a designed page — use a stronger model for those.
Teach it your own procedures
A skill is a folder with a written procedure in it. Drop one in and the agent picks it up and
follows it. Your own live in ~/.jev/skills.
| built in | for |
|---|---|
| sheets | any CSV or spreadsheet |
| landing-pages | designed marketing pages, with a bundled design library |
| coding | changing code in an existing project |
| commit · review | commit messages · reviewing a diff |
| mac | controlling and inspecting the Mac it runs on |
Safety
Anything that changes things asks first. Some things always ask, no matter what:
rm -rf, sudo,
kill, git push, stopping services,
piping a download into a shell.
That rule exists because during development an auto-approved run answered “what's hogging my
CPU” by kill -9-ing the user's long-running jobs. A blanket yes is
not consent to that. A question gets an answer, not an intervention.
Every command and output is written to an append-only log on your disk, so any run can be audited after the fact.
Install
git clone https://github.com/erphq/jev-harness && cd jev-harness npm install # only for the desktop app export OPENROUTER_API_KEY=sk-or-... node cli.mjs "which files in src are over 500 lines?" npm run app # the desktop app
Node 20+. No other dependencies for the command line tool. macOS is tested daily; Linux and Windows are implemented but have had far less testing.