Harness
An assistant that does things, on a model that never leaves your Mac.
Harness reads and writes files, runs commands and searches the web on your own laptop, with a model running on its own GPU. No account, no API key, no cloud. Nothing you type is sent to anyone.
macOS, open source2026Python · llama.cpp · Metalharness.davidcvet.com
How it works
That loop is the whole difference between a chatbot and an assistant.
It reads what the model writes, notices when it asks for a tool, runs the tool and hands the result back, until the model answers.
- 01
You ask
From the browser, the terminal or a phone. Every front end drives the same loop.
- 02
The model streams
A quantised model on llama.cpp and Metal, a token at a time.
- 03
It asks for a tool
List, read, write or edit files, search the web, fetch a page, run a command.
- 04
You see what it will do
Before a write: the path, whether it exists, and what would replace it.
The result goes back to the model, and round it goes.
What the model is thinking
You can read why it did what it did.
Reasoning streams into a panel of its own, then stays in the transcript, folded to a line.
Safety
Seven tools, and the rules around them.
Approvals can be relaxed, a category at a time. The refusals are not settings.
Writing or editing a file
You see the exact change first. The preview is all that stands between the model and your file.
Anything chained, piped or backticked
The first word of a pipeline tells you nothing about the rest of it.
Reading keys and credentials
Tool output is kept in the session file, so a key read once is a key on disk.
Writing to system paths, ~/.ssh or your shell config
Breaking these breaks the machine, not your work. No approval can authorise it.
Scheduled runs
Nobody is awake at 3am to approve anything, so the write tools are switched off.
From your phone
Set the laptop working while you are out.

This Mac only
bin/harnessNo token needed.
Your Wi-Fi
bin/harness --lanNeeds the access token.
Anywhere, over Tailscale
bin/harness --remoteBinds only the Tailscale address: the socket does not exist on your network or the internet.
Your model, your machine, your files.
Python 3.9 or later and nothing else, to run or to test. 129 tests, most of them on the guards.

