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.

Get it on GitHub

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.

tasktimecost
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 infor
sheetsany CSV or spreadsheet
landing-pagesdesigned marketing pages, with a bundled design library
codingchanging code in an existing project
commit · reviewcommit messages · reviewing a diff
maccontrolling 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.