Runs take turns
Two runs in one checkout wait for each other instead of fighting over files.

An editor’s run and yours, or two terminals, can start at once. Two writers on one output folder make broken builds that are hard to trace.
vx takes a lock per workspace. The second run waits, says which process it is waiting for, and starts the moment the first one ends.
// what it prints
$ vx run build --all
[vx] waiting for another vx run (pid 4821) on this workspace to finish…More in Run what you mean

Run just the task
Skip the dependency chain when you know it is already built.

Timeouts
A hung task is killed and reported as a timeout, not left to stall the run.

Pass arguments through
Arguments after -- reach the task, and the cache keeps each set apart.

Group tasks
Name a set of tasks once and run them with one word.

Source-only packages still count
A package with no build step still moves its dependants’ cache keys when its files change.

Say what a task needs
One short syntax for upstream, cross-project and pattern edges.

A typo never runs half the graph
Ask for a task no project has and vx stops before anything starts.

Filter by tag
Tag projects once, then run a task across every project with that tag.

Filter by folder
Pick projects by where they live, or the root project alone.

Remote pools at their own width
Send work to a remote pool and vx fills the pool, not your laptop’s core count.