--dry shows what the next run will do, without running anything. One
file changed in packages/b:
$ vx run build test --all --dry
would run:
β packages/a#build cache hit (local) 4ab2bc0d
βΆ packages/b#build cache miss β would exec e8c0e9d5 ~19ms
β packages/c#build cache hit (local) 5e8ed98e
β packages/d#build cache hit (local) 9f1cef08
β packages/a#test cache hit (local) 9ea4543b
βΆ packages/b#test cache miss β would exec 537a0bf3 ~19ms
β packages/c#test cache hit (local) 6c5e8b3a
β packages/d#test cache hit (local) 5b407891
8 task(s) planned, 6 cache hits (6 local), 2 would run.
predicted: ~19ms wall Β· ~38ms total execution
$ vx run build test --all
βΊοΈ 10ms success miss packages/b#test
βΊοΈ 17ms success miss packages/b#build
The plan said two tasks would run. The run ran those two.
Linux x64 Β· vx 69617eb Β· 2026-10-23
The plan uses the real keys
A hit in the plan is a hit in the run. The time next to a task is its
last run. The prediction lays those times on the graph, so parallel
tasks overlap.
JSON for scripts and agents
{"id":"packages/a#build","project":"packages/a","task":"build","hash":"4ab2bc0d55dd78a0","cacheStatus":"hit-local","deps":[],"p50Ms":22}
--dry=json gives one object per task. An agent can check if a run is
worth starting, or show a reviewer what a change rebuilds:
vx run build --affected --dry=json
Draw the graph
Each task lists its deps, so Graphviz is one jq away:
vx run build --all --dry=json \
| jq -r '"digraph G {", (.tasks[] | .id as $t | .deps[] | " \"\(.)\" -> \"\($t)\""), "}"' > graph.dot
dot -Tsvg graph.dot > graph.svg
Reference: the CLI. More at
vznjs.github.io/vx.
Originally published on the vx blog. vx is open-source (MIT) task orchestration with a build cache: vznjs.github.io/vx Β· GitHub.
Written with AI assistance.
Top comments (0)