Command and flags
argus [globs...]Positional arguments are globs of test files to discover and run. With none, the defaults
are **/*.test.ts and **/*.test.tsx.
| Flag | Short | Default | Purpose |
|---|---|---|---|
--timeout <ms> |
-t |
10000 |
Per-file Hermes timeout |
--concurrency <n> |
-c |
CPU count, capped at 8 | Max files in flight |
--hermes <path> |
— | Hermes binary to use, overrides ARGUS_HERMES |
|
--engine <name> |
project’s pin, preferring V1 | legacy or v1 |
|
--provision |
off | Authorise building Hermes from source | |
--help |
-h |
Print usage and exit 0 |
Environment
Section titled “Environment”| Variable | Effect |
|---|---|
ARGUS_HERMES |
Hermes binary path. Overridden by --hermes. |
NO_COLOR / FORCE_COLOR |
Honoured — colour comes from Node’s util.styleText. |
--timeout
Section titled “--timeout”argus --timeout 30000 "src/**/*.test.ts"Applies to the whole Hermes process for one file, not to individual tests. Exceeding it
kills the process and reports the file as timeout, exit code 2.
There is no per-test timeout. The unit of isolation is the file, so the unit of timeout is too.
--concurrency
Section titled “--concurrency”argus -c 1 "src/**/*.test.ts" # sequential — useful when debuggingargus -c 16 "src/**/*.test.ts"Defaults to availableParallelism() clamped to 8. Each unit is a full process, so pushing
it far past your core count buys nothing.
Only a strict positive integer is accepted. 0, negatives, 1.5, 1e2 and 2abc are all
rejected with a usage error and exit code 2 — a silently coerced concurrency is a
performance mystery waiting to happen.
--engine
Section titled “--engine”argus --engine v1 "src/**/*.test.ts"argus --engine legacy "src/**/*.test.ts"Only legacy and v1 are accepted. A typo is rejected, never ignored — silently falling
back to the default would run the tests on an engine you did not ask for, which is the
exact failure this flag exists to prevent.
Asking for an engine your project does not pin is a usage error:
--engine legacy is not available: react-native 0.87.0 pins only: v1.--hermes
Section titled “--hermes”argus --hermes /opt/hermes/bin/hermes "src/**/*.test.ts"Outranks everything, and is not probed before selection: naming a path entitles you to an error about that path rather than a silent fallback onto another binary.
If it turns out to be a different engine than your project targets, you get the mismatch warning — a warning, not a refusal.
--provision
Section titled “--provision”argus --provision "src/**/*.test.ts"Authorises a source build when nothing else in the chain can supply a binary. Needs git,
cmake and ninja. Never happens without this flag — a multi-minute build is not
something to trigger by accident.
Quote them. Unquoted globs are expanded by your shell before Argus sees them, which usually
works and occasionally does something surprising with **.
argus "src/**/*.test.ts" # ✓argus "src/**/*.test.ts" "lib/**/*.test.tsx" # ✓ severalargus src/cart.test.ts # ✓ a literal pathnode_modules is excluded from discovery. Report order follows discovery order even though
execution is parallel, so output is stable run to run.
A run that matches zero files exits 2. There is no passWithNoTests yet — it is on the
roadmap.
No config file yet
Section titled “No config file yet”Test globs, ignore patterns, timeout, concurrency, esbuild target, module aliases and the
JSX runtime are all either flags or built-in defaults. There is no argus.config.ts.
The design is settled — first match wins across --config <path>, argus.config.ts,
.mts, .js, .mjs, .config/argus.config.ts, then a package.json field, then
built-in defaults; precedence lowest to highest is defaults → package.json → config file
→ environment → CLI flags. It is not implemented.
Exit codes
Section titled “Exit codes”| Code | Meaning |
|---|---|
0 |
Every test passed |
1 |
At least one test failed |
2 |
Something else went wrong — infra failure, timeout, protocol failure, usage error, or zero files matched |
Details: Reporting and exit codes.