AGPL-3.0-or-later · forever.

the language

exec

Run. A shell command, captured and typed. One of the four verbs. A verb is a distinct native execution model, and every task speaks exactly one. string form rides /bin/sh · array form is execve, no shell: the injection-safe lane.

  • 7block keysthe contract
  • 0requiredall optional
  • 2check gatestyped findings
  • 2skeletonsspeak this verb

the shape

a complete workflow

Schema-valid whole: this exact text passes nika check (the on-page YAML gate re-validates it on every test run).

run.nika.yaml
nika: v1workflow:  id: runtasks:  build:    exec:      command: ["cargo", "build", "--release"]

inside exec:

7 keys · 0 required

The block's vocabulary comes from the served contract itself (workflow.schema.json). Each key opens its register row.

capture
stringwhich stream becomes the task output
command
arrayargv — the program and its arguments, execve, NO shell. Each element substituted independently (the injection-safe form). Shell features (pipes · redirects · globs) live in `shell:`.
cwd
stringworking directory for the command
decode
stringHow the captured string becomes a value (spec 09 §decode) — illegal with capture: structured (NIKA-PARSE-025)
env
objectenvironment variables for the exec command, a name to value map
shell
stringOne shell line, run via /bin/sh -c — the EXPLICIT dangerous door (pipes · redirects · globs). The blocklist applies here; interpolating untrusted values here is on the author. Exactly one of command|shell.
stdin
stringtext piped to the command’s standard input

The verbs are locked forever: four, never five (fetch is a builtin, not a verb; ordering is the DAG's job, not a word's). The grammar lives in spec 02 · verbs; every other key is in the keyword register. Read the spec →