Skip to main content

The questions everyone asks

Yes. Install the latest tagged release with Homebrew or install.sh, then run nika check and nika run locally. The engine is still pre-1.0 and hardening toward the 1.0 launch, but the nika: v1 language envelope is already stable.
Two independent axes. The language envelope nika: v1 is frozen forever: files you write never break. The engine follows real semver toward 1.0 (0.90 release-candidate today, then 1.0.0, 1.1, …). Same model as SQL or GraphQL: the contract is stable, implementations iterate.
No. There are exactly verbs (infer · exec · invoke · agent), locked forever. Fetching a URL is calling a tool: invoke: { tool: "nika:fetch" }. If you see fetch: as a verb anywhere, it’s the pre-spec legacy dialect.
local runtimes (Ollama · LM Studio · llama.cpp · LocalAI · vLLM). Point model: ollama/llama3.2:3b at your machine and the whole workflow runs with zero cloud. mock/echo runs with nothing at all: that’s what the templates default to.
Always ${{ … }}: what’s inside is CEL. The bare {{ … }} form is legacy and rejected by the validator. Same rule: there are no template filters (| upper, | truncate): transforms are jq, in output: bindings or nika:jq.
Schema-valid ≠ spec-valid. The validator also enforces the semantic rules: tasks.* references live at the boundary only (with: · after: — a body reference is NIKA-VAR-021, hoist it into with:), when: must be a CEL boolean over local namespaces, nika:done only inside an agent’s tool list, exactly one verb per task. The error names the exact rule. Fix that rule, nothing else, re-check.

Errors you’ll hit, decoded

Every failure is a typed structure with a stable code and a transient flag (error model). The frequent ones:

When it breaks, in order

1

Read the code, not the message

NIKA-<NAMESPACE>-<NNN> is stable and greppable. The catalog gives the namespace’s contract.
2

Check transient

transient: true → retry can help (declare retry: with backoff). transient: false → the input or the file is wrong; retrying burns money.
3

Recover structurally

on_error: recover: substitutes a fallback value · on_error: on_codes: scopes recovery to specific codes (recover the not-found, still fail loudly on permission-denied).
4

Ask with context

Two guided forms exist so nothing gets lost: First run failed (a stumble in your first minutes is a bug, even when nothing crashed) and I was confused here (paper cuts are bugs in the teaching). The output of nika welcome is the perfect diagnostic attachment — it prints key presence, never values. For everything else, Discussions is the fastest lane. Security findings: security@supernovae.studio, never public issues.
Nika ships zero telemetry — the binary never phones home. These forms and Discussions ARE the project’s analytics: a report that you reached your first green run in under two minutes is a data point we cannot get any other way.

See also

Error codes

The namespaces + the typed error shape.

Templates

Skeletons that avoid most of these errors by construction.

Security model

Why fetch/exec block what they block.

Live engine state

What’s admitted today ( crates).