Latest engine release: v. 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. The
0.123.x line is the previous one. Homebrew, the install script, the release
archives and the container image all give you this version. The npm package
@ bundles its own engine build,
so an npm install never depends on the CLI you installed another way.
After installing, nika --version and nika --help are the source of truth
for your binary.Install
- Homebrew
- Install script
- npm
- Container
- cargo binstall
- Nix
- From source
macOS and Linux:Recent Homebrew versions gate third-party taps behind a trust prompt.
If the install reports the tap as untrusted, run
brew trust supernovae-st/tap once and retry.First run
No account, API key, model download or agent is needed for this step.1
Check the binary
nika {STATUS.version} ({STATUS.engineSha}) for this release.2
Read the mirror
nika welcome prints what this binary contains, what it sees on your
machine, and the next line to type. On v that line is
; this page is gated on saying the same
thing. Your machine reads the screen line
by line.3
Write and run a first file, offline
nika compile hello writes a ready starter file without calling any
model, nika check audits it, nika run runs it on mock/echo (a
rehearsal model that echoes the prompt back) and nika trace verify
checks the record the run left in .nika/traces/.On a terminal, bare
nika (no arguments) opens the
terminal Session, where you describe a job in
your own words. On a machine with no key, local model or signed-in agent
app, it first asks you to choose an intelligence. You can leave with
Ctrl+C and come back once one is ready. Piped or redirected, bare nika
prints the same mirror as nika welcome.The loop you will keep using. nika compile writes a starter file, nika check audits it before anything runs, nika run runs it, and nika trace verify confirms the run’s record is intact. All four commands captured from the real CLI on nika 0.121.0, offline; the answer comes from the mock/echo rehearsal model, not a real model.
nika init scaffolds a repository for agents and editors when you want one,
not before (what it writes).
nika wire <client> adds Nika’s read-only MCP server to one agent client.
Installers never edit editor or agent configuration.
Seal your runs
Every run writes a hash-chained record. To also sign it, so thatnika trace verify answers SEALED, mint a run-signing key once per
machine:
~/.nika/keys/ (the private key in mode
0600), where every process reads it, on macOS and on Linux: nika in your
terminal, the engines your applications start through the
SDK, and nika serve. The SDK’s engines and
nika serve never open an OS keychain, so for them the key must be a file.
NIKA_KEYCHAIN=off skips only the keychain. Without it, nika key init
depends on the platform:
- macOS. 0.124.1 opens no keychain, even from a terminal:
nika doctorsaysthe keychain is not opened by this ad-hoc build, even for the signed release. A plainnika key initwrites the same files, unless the keychain holds a run-key that Nika 0.122 or older stored there. Then it refuses, and the repair it names,nika key align, cannot read or copy that key: it exits withthis process does not open the keychain. With the variable,nika key initmints a new key as files, a new signing identity beside the old keychain key. - Linux. Run from a terminal,
nikaalso uses the desktop’s Secret Service, and 0.124.1 cannot tell whether it already holds a run-key. A plainnika key inittherefore refuses withrun-signing key material already exists, even on a new machine. On a desktop, its--forcestores the key in the Secret Service only, where SDK engines andnika servenever look;nika key align, run once from a terminal, copies that key to~/.nika/keys/.
NIKA_RUN_KEY_FILE and NIKA_RUN_PUB_FILE to two paths:
nika key init mints the pair there (or place a pair you already hold), and
every run signs with it. Set the same two variables where you verify:
nika trace verify then attributes those journals without --key, and a
nika serve started with them verifies its jobs’ journals the same way. Without any key, runs still succeed
and nika trace verify reports them UNSEALED.
Platforms
Each release also publishes
supernovae-st-nika-check-wasm-<release>.tgz, a
WebAssembly build of the static checker only; it does not run workflows.
Servers and headless Linux
Nika confines everyexec: child and external MCP server inside an OS
sandbox when the host provides one: Seatbelt on macOS (part of the OS) and
bubblewrap on Linux. A minimal server image often lacks bubblewrap; install
it once:
noop, and the outcome depends on
the workflow:
- No
permits:block. An absent block declares zero authority, so only a file with no effect at all (pure computation, nothing spawned) runs, on a best-effort basis. Anyexec:or other effect is refused at admission (NIKA-AUTH-006). - A
permits:block andexec:tasks. The run refuses to start (NIKA-1710). A declared boundary the host cannot enforce would be a broken promise, so the engine fails closed instead of running unconfined.
off is a waiver, not a silent escape: the run’s journal records
sandbox_policy and sandbox_waived on its opening frame, so a sealed trace
shows you chose it. An unknown value refuses to start (NIKA-1711).
nika doctor shows the backend in its sandbox row, and
nika explain NIKA-1710 teaches the refusal with the fix for each OS.
Verify a download
Every release publishes its archives with Then check what you hold, in up to three independent ways:Replace
SHA256SUMS and two kinds of
build provenance. Download one archive and the checksum file:macos-arm64 with macos-x64, linux-x64 or linux-arm64 for
your platform. --ignore-missing checks only the archives you downloaded.A real answer, later
The first run is a rehearsal. When you want a real answer, choose one path:- A model on this machine.
nika model pullandnika model serve, or a local server such as Ollama. See Local models. - A provider key. Export the provider’s variable in your shell; the providers catalog names each one.
- An agent app you already use. A signed-in agent CLI such as Claude Code
or Codex can serve a run through
--access. See Harness access.
nika doctor reports which of these your machine can use, by presence only:
it never prints a key’s value.
What Nika writes on your machine
-
nika, one binary. No daemon, no background service, no telemetry. -
~/.nika/, created when you first need it: -
In a project directory:
.nika/traces/(run records) and other.nika/state appear when you run workflows there;nika initandnika wirewrite only the files they list.
Shell completions
The binary generates its own completions, always in step with the verbs your version ships:- zsh
- bash
- fish
elvish and powershell are available too. Run the same command again after
an upgrade to pick up new verbs.
Uninstall
Remove the binary the way you installed it:Next
The terminal Session
Describe a job in your own words; review the file before it is saved.
First workflow
Write one
.nika file by hand, check it, run it.Your machine
Read the mirror and the diagnosis this binary prints.
Editor setup
Schema validation and the
nika lsp language server.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. 🦋