the language
max_parallel
Cap concurrent for_each iterations · default unbounded · 1 = sequential. One of 62 words the served contract declares, projected from workflow.schema.json, the same file your editor validates against.
- 1surfacetask
- optionaleverywherea choice, never a miss
- integertypethe declared shape
- 1skeletonscarry this key
the contract
1 declarationDescriptions are the schema's own; the deeper invariants (value languages and regexes) ride the same projection. A miss is a nika check finding before anything runs.
- task
integerCap concurrent for_each iterations · default unbounded · 1 = sequential.one step of the plan
in a real file
from the fanout skeletonfanout.nika.yaml
# `discover` hands back PATH STRINGS — a prompt that interpolates the raw # item shows the model a FILENAME, never the file (measured: a green run # whose fluent « report » was invented from the names alone — check, mock # rehearsal and run all green around it). Reading the item is its own fan. # Delete this task — and fan `process` over `discover` — when your items # already ARE the content (an inline list · fetched records). Need each # content paired with its path? `resume-screener` shows the transpose. read: with: discover: ${{ tasks.discover.output }} for_each: ${{ with.discover }} max_parallel: 8 fail_fast: false on_error: recover: null # an unreadable item yields null · the batch lives invoke: tool: "nika:read" args: { path: "${{ item }}" }a verbatim slice, real line numbers from fanout.nika.yaml, conformance-gated upstream on every spec push. open the full skeleton →
cross-references
skeletons that carry it
defined by
the block it lives in
The whole grammar in one place: the four verbs · the standard library · the spec. Try it in the playground. Read the reference →