Run it elsewhere.
Put errand -- in front of the command you'd normally
run. Your working tree goes over, uncommitted edits included. The
logs stream back and you get the exit code. No remote clone to
babysit.
$ brew install
lydakis/errand/errand
Examples
I build Atlas, a
NixOS host for agents, on an Apple Silicon Mac. Its VM tests need
/dev/kvm, which a Mac can't give you, so they crawled
under emulated QEMU. My Linux box had KVM and nothing to do.
I didn't want to commit half-done work, SSH in, pull, run and copy results back every time. So I wrote errand. Now the tests run on the Linux box, straight from my uncommitted tree.
These days my coding agents use it more than I do.
GeorgeHow it works
-
Your files go over
Tracked files and uncommitted edits. Git-ignored files stay home, and repeat runs ship only what changed.
-
It runs over there
Each job gets a fresh workspace on the runner. Your local files stay untouched.
-
Output comes back
Logs stream back with the real exit code. Ctrl-C stops the job, Ctrl-D detaches.
-
Changes come back
Changed files are kept, even on failure.
errand fetch --applybrings them into your checkout.
How fast it is
Medians from the scoreboard in the repo.
From saving a file on a laptop to it showing up on a Linux
runner with push --watch, 1,000-file checkout.
Fetching and applying a finished job's changes from that runner, 1,000-file checkout.
Applying 128 changed files across 128 directories on macOS, before and after the 0.5 apply work.
More
-
errand --where 'os=linux,go' -- go test ./... - Pick any runner that has what the command needs.
errand --on local -- make test- Run in a separate workspace on this machine.
-
errand push --workspace dev --watch --apply - Keep a workspace on the runner in sync while you edit.
-
errand --cache compiler=target -- cargo test - Reuse the runner's build cache between jobs.
.errand.toml- Save a project's usual runner, caches and ports.
errand doctor- Tells you why a runner isn't answering.
Good to know
- It runs commands directly on machines you control. It's not a sandbox.
- Commands run without a terminal attached. Run coding agents in their noninteractive mode.
- Install the same errand version on both ends.
- A Windows PC can run jobs but can't send them yet. experimental
- No telemetry. MIT licensed.
Set it up
Both machines on the same Tailscale network, or plain SSH.
-
On both machines
brew install lydakis/errand/errand
Or grab a binary from GitHub Releases.
-
On the machine that runs things
errand setup
Installs and starts the runner service.
-
On your laptop
errand peers discover # then run the line it prints, like: errand peers add mac-mini YOUR_RUNNER_HOSTNAMEUsing SSH instead?
errand peers add mac-mini YOUR_SSH_HOST --ssh -
From any Git checkout
errand -- make test
The first runner you add is the default. Pick another with
--on NAME.
Windows runner (experimental)
scoop bucket add errand https://github.com/lydakis/scoop-errand scoop install errand errand setup
Runs jobs sent from a Mac or Linux machine over Tailscale. See what works so far.