Skip to content

CLI Reference

Commands

commandwhat it does
outdolist available tasks, grouped
outdo <task> [flags] [-- args]run a task and its dependency DAG
outdo <task1> <task2>run multiple tasks (shared deps run once)
outdo ls [--json]list tasks — machine-readable with --json
outdo graph [--dot] [--json]dependency graph as mermaid, graphviz dot, or JSON
outdo explain <task> [--json]why each planned task will run or skip (cache diagnosis, inputs, backend); never runs
outdo --print-env <task> [--json]resolved env with per-key provenance + schema verdict; never runs
outdo initscaffold a starter do.ts (+ gitignore .outdo/)
outdo completion <shell>completion script for bash | zsh | fish | powershell

Global flags

Global flags go before the task name; everything after the task name belongs to the task.

flagvaluesdefaultmeaning
-w, --watchoffre-run affected tasks when watched files change
-j, --concurrency <n>integer ≥ 1CPU countmax parallel tasks
--continueoffkeep running independent tasks after a failure
--log-order <mode>stream | grouped | autoautolive prefixed lines vs per-task blocks (auto: stream in a TTY, grouped in CI)
--output-logs <mode>full | errors-only | nonefullhow much child output to show
--dry[=json]offprint the plan (incl. cache status) without running
--affected[=<rev>]rev via = formoffonly run tasks affected by git changes vs <rev> (default: merge-base with origin's default branch)
--profile[=<file>]path via = formoffwrite a Chrome trace of the run (default .outdo/trace.json)
-f, --forceoffignore the fingerprint cache (still records fresh fingerprints)
-F, --filter <pattern>repeatableselect workspace packages — see Workspaces
--isolateoffforce the child-process backend even for pure chains (multiplexed output, tree-kill semantics)
--jsonoffmachine-readable output — runs emit a JSON report on stdout, logs move to stderr
--color <mode>auto | always | neverautoalso --no-color; honors NO_COLOR / FORCE_COLOR
-h, --helpglobal help; outdo <task> --help shows the task's flags
-V, --versionprint the version

--affected and --profile take their value with = only (--affected=main, not --affected main) so a following task name is never swallowed. --watch is exclusive with --json, --profile, and --affected (usage error, exit 2).

Environment variables outdo reads

variableeffect
NODE_ENVselects the env cascade layer (default development)
NO_COLOR / FORCE_COLORcolor output off/on (flag --color wins)
OUTDO_WATCH_POLL=1force the polling watch backend
OUTDO_LOG=debuginternal debug logging on stderr

Shell completions

sh
# bash (~/.bashrc)
eval "$(outdo completion bash)"

# zsh (~/.zshrc)
eval "$(outdo completion zsh)"

# fish
outdo completion fish > ~/.config/fish/completions/outdo.fish

# PowerShell ($PROFILE)
outdo completion powershell | Out-String | Invoke-Expression

Completions are dynamic: task names, per-task flags, and subcommands come from your actual do.ts at TAB-time.

Released under the MIT License.