Skip to main content
Useful AI work shouldn’t disappear into chats. Nika turns repeatable AI work into files you can run, review, diff and share: one .nika.yaml file, four verbs, one Rust binary. If you do the same AI task twice, make it a workflow.
Nika runs today: brew install supernovae-st/tap/nika, then nika check and nika run. No API key needed for your first run (--model mock/echo previews any workflow offline).

What Nika is

A workflow language plus its reference engine. The YAML file is the contract: readable by you, writable by your agents, executed deterministically, audited before a single token is spent. Four verbs (infer, exec, invoke, agent) and nothing else; fetching a URL, writing a file, calling GitHub are all tools under invoke.
workflow.nika.yaml
nika: v1
workflow: summarize

tasks:
  - id: read
    invoke:
      tool: nika:fetch
      args:
        url: https://example.com/post.md
        mode: text

  - id: summarize
    depends_on: [read]
    infer:
      model: ollama/llama3.1               # <provider>/<name> · local · zero key
      prompt: |
        Summarize in one sentence:
        ${{ tasks.read.output }}

  - id: save
    depends_on: [summarize]
    invoke:
      tool: nika:write
      args:
        path: "/tmp/summary.txt"
        content: "${{ tasks.summarize.output }}"
The nika CLI, nika check, nika run, nika lsp, and read-only nika mcp are live in v. Use nika init once per repo for schema + agent rules, then nika wire <client> when you want an agent client to call the real Nika oracle.

What Nika is not

  • Not an agent framework. No abstractions over agent loops you can’t read.
  • Not a chatbot wrapper. No conversation state hidden in vendor APIs.
  • Not another SDK. The YAML file is the interface.
  • Not a SaaS. AGPL means the source travels with the binary.

I want to…

Scan this table before you dive into a section. It’s the fastest map.
I want to…Best option
Install Nika locallyInstallation
Run my first workflowFirst workflow
Start from a real exampleExamples gallery
Write a workflow well (or have an agent write it)Patterns · Agent authoring
See every .nika.yaml fieldYAML syntax reference
Understand how verbs executeConcepts · Verbs
Pick an LLM providerConcepts · Providers
Look up a NIKA-XXX error codeReference · Error codes
Understand the engine architectureConcepts · Architecture
Check the engine’s live build stateReference · Status
ContributeGitHub → supernovae-st/nika

Why YAML

Because the same file is read by the machine and understood by the human. No DSL, no Python-pretending-to-be-config, no JavaScript callbacks scattered across nodes. The schema is the contract.

Why Rust

Because workflows fail in production, and a single binary with zero runtime dependencies fails predictably. Because the engine must be auditable, line by line. Because clippy warnings and zero unwraps in src/ are not aspirational. They are enforced by CI on every commit.

The engine in one diagram

Built in the open, crafted crate by crate under a strict admission discipline. The live engineering state (crates · tests · hygiene) is one click away at Reference · Status, the design at Concepts · Architecture.

Examples · real jobs

What would YOUR Monday look like? Starter to epic, every industry.

How to write Nika

The twelve patterns of well-written Nika, each taught by a canonical example.

Install Nika

What ships at v, what doesn’t, how to track releases.

Workflows

How a .nika.yaml file becomes an executed graph.

Providers

Local-first: Ollama · llama.cpp · vLLM · LM Studio, or any cloud API.

Architecture

Six layers. Why L0 has zero async and zero I/O.

The Nika ecosystem

🦋