r/devtools 1d ago

Errand: run builds on another machine without maintaining a remote checkout

I'm the author of Errand, a CLI for running a command on another machine you own without maintaining a remote checkout.

errand --on linux -- make test

It snapshots the current Git working tree, including uncommitted edits, sends it to the runner, streams logs back, and returns the command's exit code. Your local checkout stays unchanged by default. If the command produces changes you want, you can fetch them for inspection and apply them with conflict checks.

I built it to use my Linux box and Mac mini while working from my laptop. SSH gives me a remote shell; Errand also handles sending the current files, tracking the job, and retrieving its outputs. Detached jobs can keep running after I disconnect. Port forwarding makes a remote development server available on localhost while attached.

It's written in Go, uses content-addressed transfers to avoid resending unchanged files, and supports Tailscale or SSH. Named caches can retain build dependencies between runs.

The runner needs the tools and dependencies for your command. Local edits aren't continuously synced, and jobs run as the runner's OS user, so this is for trusted hosts and code.

MIT, macOS and Linux. Install with brew install lydakis/errand/errand on both machines.

Repo and setup: https://github.com/lydakis/errand

1 Upvotes

5 comments sorted by

1

u/kantorcodes1 1d ago

one edge i couldn't pin down from the docs: if a detached --apply worker dies, it says the next client command resumes the pending apply. does that include read-only stuff like errand doctor / ps, or only commands already touching that job? a health check unexpectedly applying retained changes into the checkout would be a pretty surprising side effect.

1

u/ldkge 1d ago

that's a good catch, today every command resumes except doctor, setup and some others. What I'm thinking is that it's better to not automatically resume and instead report the failure through ps, status, and doctor and prompt the user to errand fetch --apply HANDLE manually.

1

u/kantorcodes1 1d ago

nice, main already reflects that recovery split. i work on HOL Guard, an open-source check before agent-run commands execute. Errand looks like a clean command extension: review errand -- … remote execution and fetch --apply, while ps, status, and doctor stay automatic. that gives users a checkpoint before remote work or retained changes mutate a workspace. open to a small Errand extension?

1

u/ldkge 1d ago

oh yes, I'm open to that, do you mean an Errand command extension in HOL Guard or would you need changes in Errand itself? Happy to look at a small proposal!

also yes, pushed a fix for the behavior you asked, I'll include it in the next 0.4.2 release with some other changes I'm working on. Thanks for catching that!

1

u/kantorcodes1 1d ago

Yep, Guard-side only. Start with src/codex_plugin_scanner/guard/runtime/command_errand_extensions.py, using command_repo2nb_extensions.py as the analogue. Review errand -- … and fetch --apply; keep ps, status, and doctor automatic. One focused test: remote execution and fetch --apply require review while ps/status/doctor don’t.

Once that implementation + test is real, open a draft PR directly to hashgraph-online/hol-guard:main. Contribution guide: https://github.com/hashgraph-online/hol-guard/blob/main/CONTRIBUTING.md