Skip to main content
Say what you want done. Keep it as a file. Nika turns repeatable AI work into a small .nika workflow you keep. Before anything runs, its check shows what the workflow will do, which models and tools it uses, what it may touch and what it can cost, without calling a model. You run it when you decide, with the model you choose, local or cloud, and every run leaves a tamper-evident record you can verify. One open-source binary: no Nika account and no hosted service. 0.124 is the current release line. Work stays focused on maintenance, security and the media capabilities workflows need; native video is planned for 0.125.

Audit first, then run. A meeting-notes job you would otherwise redo in a chat, kept as one .nika file: nika check audits it before any model is called, then a local model (ollama/llama3.2:3b) turns a sample transcript into typed action items and the run leaves a hash-chained record. Captured from the real CLI, on one machine, with no API key: the check on nika 0.121.0, the local-model run on nika 0.109.2. The file is a shorter demo version of the meeting actions example.

Your first result

Install the CLI, then work in an empty directory. This example calculates a total and writes report.md using built-in tools. It needs no model, API key, account or network connection. Save this as report.nika:
report.nika
Check the file, run it, and read the result:
The run returns:
The file contains:
These are actual calculations and a file write, with no model or mock response. Re-running replaces only the declared report.md. The with: binding makes save wait for summarize; permits: names the allowed tools and output file. The run prints a trace path under .nika/traces/. nika trace verify reads the latest one (pass a path to pick another) and checks the record’s integrity. A fresh machine without a signing key reports UNSEALED, even when the hash chain is intact: run NIKA_KEYCHAIN=off nika key init once and later runs report SEALED (Seal your runs). A successful verification does not establish that a model’s answer is correct. See traces for the evidence tiers. Continue with offline examples for known inputs and exact expected outputs, the terminal Session to describe a job in your own words, or the TypeScript quickstart to run workflows from an application. The SDK starts its bundled engine directly; no server is needed.

A real job, when you are ready

Meeting actions turns a transcript into typed, tracker-ready action items. It defaults to a local model (ollama/qwen3.5:4b, no provider key, your own compute); point it at a cloud provider and nika check prices the run before anything executes. nika try meeting-actions rehearses it on the mock model, with no key and no model call, and the page lists what a real run needs. Same file shape as above; the model and tools change, the lifecycle does not.

What just happened, one concept at a time

  1. The file is the contract. The verbs infer, exec, invoke and agent — nothing else: fetching a URL or writing a file is a tool under invoke, declared and auditable.
  2. Admission before execution. nika run audits the file before anything executes; a refused file never starts. nika check is the same audit on its own, for CI.
  3. Permits are the blast radius. permits: {} declares zero authority. A workflow that touches a file, a host or a shell must say so, or admission refuses it (NIKA-SEC-004; with no permits: block at all, NIKA-AUTH-006).
  4. Runs leave evidence. Each run writes a hash-chained trace under .nika/traces/; nika trace verify inspects the record and reports whether it is sealed. Verification proves the record was not tampered with — not that a model was right.

Ask the file three questions

For an input marked required: true with no default:, the run refuses to start: the CLI exits 3 naming the missing key (NIKA-1708), and the SDK’s run() throws NikaOperationError. Nothing is half-executed; a red admission never becomes a run.
The task that needs it is refused at check. An absent permits: block means zero authority — effects stay refused until the file declares them (NIKA-AUTH-006). nika check --infer-permits drafts the tightest block for you.
One line. mock/echo rehearses with no key and no model call (tools and fetches stay real), ollama/llama3.2:3b runs locally, and cloud providers take their environment key. The file, the check and the record keep the same shape; nika check re-prices the run for the new model, and asks for a larger max_tokens when a reasoning model needs room to think.

Where next

SDK quickstart

Checks, live events, inputs and receipt verification — the full typed lifecycle on the published npm package.

First workflow

Write a workflow by hand: tasks, bindings, structured output.

Examples · real jobs

Starter chains to multi-step reports: every file passes nika check, and each page lists what it needs to run.

Providers

Your model choice: local inference (Ollama needs no provider API key) or a hosted provider when you need one.
These docs track the current stable engine, v. The npm package releases on its own channel; each page names the channel it means.

The Nika ecosystem

Documentation

Guides, reference contracts and working examples.

Language spec

the nine-key envelope, Apache-2.0. The contract these docs explain.

Engine source

Rust, AGPL-3.0-or-later. Every commit public.

TypeScript SDK

Use one typed lifecycle locally or against authenticated nika serve HTTP.

Editor extension

The editor extension, frozen at 0.120 and not qualified with 0.124: use nika lsp and the JSON Schema.

Homebrew tap

brew install supernovae-st/tap/nika for the latest tagged CLI release.

SuperNovae

The Paris studio crafting Nika. 🦋
🦋