the language
output
Named jq-expression bindings · `${{ tasks.X.<name> }}`. jq is the single data extraction-and-transform language (the former RFC 9535 JSONPath was dropped · jq is a superset · per spec/04-variables.md §216-225). Reserved names forbidden at parse time (spec/04-variables.md §Rules): output · status · error · started_at · ended_at · duration_ms — enforced via propertyNames. One of 59 words the served contract declares, projected from workflow.schema.json, the same file your editor validates against.
- 1surfacetask
- optionaleverywherea choice, never a miss
- objecttypethe 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
objectjqNamed jq-expression bindings · `${{ tasks.X.<name> }}`. jq is the single data extraction-and-transform language (the former RFC 9535 JSONPath was dropped · jq is a superset · per spec/04-variables.md §216-225). Reserved names forbidden at parse time (spec/04-variables.md §Rules): output · status · error · started_at · ended_at · duration_ms — enforced via propertyNames.one step of the plan
in a real file
from the gate-and-act skeleton check: invoke: tool: "nika:fetch" args: url: "${{ const.source_url }}" mode: jq jq: "." output: value: ".value" # SLOT: the jq path to the watched field on_error: # Offline rehearsal · a sample UNDER the threshold — the gate stays # closed, the skeleton runs green before you wire the real source. recover: { value: 42 }a verbatim slice, real line numbers from gate-and-act.nika.yaml, conformance-gated upstream on every spec push. open the full skeleton →
cross-references
skeletons that carry it
the check gates that name it
where it lives
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 →