Execution Styles

Nash tasks support three execution styles. Each task must use exactly one style.

Command Style

The command field passes a single string to the system shell for interpretation. Shell features like pipes, redirects, globbing, and variable expansion are all available.

[[task]] id = "serve" title = "Start Dev Server" command = "npm run dev -- --port 3000"

A shell override can be used to force a specific shell regardless of the platform default:

[[task]] id = "deploy" title = "Deploy" shell = ["bash", "-c"] command = "deploy.sh --env production"

Argv Style

The argv field passes an argument vector directly to the executable without shell interpretation. No globbing, no variable expansion, no piping — the process receives exactly the tokens you specify.

[[task]] id = "lint" title = "Lint Project" argv = ["cargo", "clippy", "--", "-D", "warnings"]

This is ideal when arguments contain spaces, special characters, or when you want deterministic behavior across platforms without quoting concerns.

Multi-Step Execution

Tasks with [[task.step]] entries run a sequence of commands in order. If any step fails, execution stops and the task is marked as failed.

[[task]] id = "quality-gates" title = "Quality Gates" target = "new_tab" [[task.step]] name = "Format Check" command = "cargo fmt --check" [[task.step]] name = "Lint" command = "cargo clippy -- -D warnings" [[task.step]] name = "Tests" argv = ["cargo", "test"]

Step-Level Overrides

Each step can override task-level settings:

FieldTypeDescription
namestringHuman-readable step name (shown in progress output)
cwdstring / pathStep-local working directory
envtableStep-local environment variables (merged with task)
shellarray of stringsStep-local shell argv prefix
commandstringShell command for this step
argvarray of stringsArgv-style execution for this step
[[task]] id = "build-and-test" title = "Build & Test" env = { NODE_ENV = "production" } [[task.step]] name = "Frontend Build" cwd = "./frontend" command = "npm run build" [[task.step]] name = "Backend Tests" cwd = "./backend" env = { TEST_DB = "sqlite" } command = "pytest"

Note: Step cwd and env are composed into generated scripts in declaration order. Earlier steps' env vars are inherited by later steps within the same task.

Continue to Targets & Execution Domains to control where your tasks run.