AGPL-3.0-or-later · forever.

the language

invoke

Use a tool. Fetch a page, write a file, call GitHub. Every tool explicit. One of the four verbs. A verb is a distinct native execution model, and every task speaks exactly one. 28 nika: builtins + mcp:<server>/<tool>; everything callable is a tool.

  • 3block keysthe contract
  • 0requiredall optional
  • 6check gatestyped findings
  • 10skeletonsspeak 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).

use-a-tool.nika.yaml
nika: v1workflow:  id: use-a-tooltasks:  page:    invoke:      tool: "nika:fetch"      args: { url: "https://nika.sh" }

inside invoke:

3 keys · 0 required

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

args
objectthe tool call’s arguments, validated against the builtin’s declared contract before anything runs
tool
stringTool reference · nika:<path> (closed v0.1 builtin set) OR mcp:<server>/<tool> (requires the slash). The namespace set is CLOSED at v1 (spec/02-verbs.md) — an x-<vendor>: prefix is RESERVED, not valid (engine-specific tools route through mcp: · spec/06-stdlib-contract.md §Namespace ownership).
workflow
stringCompose another workflow (spec 14) · a STATIC target: a filesystem path OR registry:owner/name@version (pinned). A templated target is refused at check (NIKA-COMP-001). Exactly one of tool: | workflow: (the invoke tagged union · G21).

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 →