the language
tools
Whitelist · DEFAULT-DENY (no tools if absent) · gitignore-style globs · `!` negation. One of 59 words the served contract declares, projected from workflow.schema.json, the same file your editor validates against.
- 1surfaceagent
- optionaleverywherea choice, never a miss
- arraytypethe declared shape
- 3skeletonscarry 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.
- agent
arrayWhitelist · DEFAULT-DENY (no tools if absent) · gitignore-style globs · `!` negation.inside agent:
in a real file
from the agent-loop skeleton execute: with: steps: ${{ tasks.plan.output.steps }} agent: # The done-contract belongs IN the prompt: the final message must # carry the schema'd shape, so SAY so — a live model that is not # told finishes in prose and fails NIKA-INFER-002 (proven on GPT). system: "Work the plan step by step. When finished, reply with ONLY your final result as an object carrying a `findings` array (one short string each), then call nika:done." # SLOT prompt: "Plan · ${{ with.steps }}" tools: # SLOT: the MINIMUM grant for the job - "nika:read" - "nika:done" max_turns: 15 # SLOT: the loop bound max_tokens_total: 80000 # SLOT: the spend bound schema: # SLOT: the typed final-message contract type: object required: [findings] properties: findings: { type: array, items: { type: string } }a verbatim slice, real line numbers from agent-loop.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
accepted by
from the blog
defined by
the block it lives in
agent: inside agent:
The whole grammar in one place: the four verbs · the standard library · the spec. Try it in the playground. Read the reference →