just
recommended — command runner for workspace task codification
What it is
just is a command runner in the tradition of make, stripped of all build-system semantics. No dependency DAGs, no implicit rules, no .PHONY. A Justfile is a list of named shell recipes, nothing more. The tagline is apt: "Just a command runner."
Why we have it
The DooD (Docker outside Docker) pattern requires two flags every time you spawn a container from inside this one:
docker run --rm \
--volumes-from "$(hostname)" \
--add-host host.docker.internal:host-gateway \
...
Without a wrapper, this is easy to get wrong — and we did get it wrong, using -v /workspace/group:... which passes a container-internal path the Docker host doesn't know. The --volumes-from $(hostname) idiom copies mount specs directly from the current container.
just drun codifies this so there's nothing to remember:
just drun alpine:latest ls /workspace/group/Justfile
What we use it for
Available recipes:
default # List available recipes
drun *args # DooD-safe docker run wrapper
drun-net *args # Same, with explicit bridge network
podcast-build # Build podcast pipeline image
podcast-run # Build + run podcast pipeline
index-stars # Ingest GitHub stars into Antfly
reviews-build # mdsite build for reviews site
rehydrate # Run ensure-deps.sh
The Justfile lives at /workspace/group/Justfile. just is installed by ensure-deps.sh and persisted at /home/node/.local/bin/just.
What's good
Readable output. just prints the recipe before running it, so you always see the expanded command — including the resolved $(hostname). Makes DooD debugging obvious.
Splat args. The *args variadic syntax means drun is a real passthrough wrapper, not a rigid script. You can run just drun alpine:latest sh -c "..." and any image/entrypoint combination works.
Dead simple. No YAML, no Go templates, no DSL to learn. Just shell, with named entry points.
Persistent. ensure-deps.sh installs just on rehydration, so it survives container wipes. The Justfile is in the git repo.
What's awkward
Quoting at recipe boundaries. Shell quoting doesn't compose cleanly across just's arg expansion. Complex sh -c "..." invocations may need extra escaping. In practice, use simple args or pipe through a file.
PATH. just isn't on the default PATH — you need /home/node/.local/bin in PATH (added by ensure-deps.sh). ensure-deps.sh must run before just is available.
Not a build system. It intentionally has no dependency tracking. If you need "build this only if that changed," you're back to make or a shell conditional.
Verdict
The right scope. We needed a way to codify --volumes-from $(hostname) without writing a one-off shell function buried in .secrets. just drun is findable, self-documenting, and composable. The Justfile will grow as new recurring patterns emerge.
Rating: 4/5 — does exactly what it says, installs in seconds, no footguns yet.