> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nika.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Introduction

> Intent as Code: the workflow language for AI. One file, 4 verbs, one binary. Runs on your laptop.

export const Ecosystem = () => <CardGroup cols={3}>
    <Card title="nika.sh" icon="globe" href="https://nika.sh">
      The site — what Nika is, in one scroll.
    </Card>
    <Card title="Language spec" icon="file-contract" href="https://github.com/supernovae-st/nika-spec">
      `nika: v1`, Apache-2.0. The contract these docs explain.
    </Card>
    <Card title="Engine source" icon="gem" href="https://github.com/supernovae-st/nika">
      Rust, AGPL-3.0-or-later. Every commit public.
    </Card>
    <Card title="Editor extension" icon="puzzle-piece" href="https://marketplace.visualstudio.com/items?itemName=supernovae.nika-lang">
      VS Code · Cursor · Windsurf — check-as-you-type, DAG view, trace replay.
    </Card>
    <Card title="Homebrew tap" icon="beer-mug-empty" href="https://github.com/supernovae-st/homebrew-tap">
      `brew install supernovae-st/tap/nika` for the latest tagged CLI release.
    </Card>
    <Card title="SuperNovae" icon="star" href="https://supernovae.studio">
      The Paris studio crafting Nika. 🦋
    </Card>
  </CardGroup>;

export const STATUS = {
  head: "95962d5cd",
  branch: "main",
  version: "0.91.0",
  cratesWorkspace: 39,
  cratesAdmitted: 39,
  cratesTarget: "42",
  wipCrates: [],
  libTests: 2989,
  clippyWarnings: 0,
  adrs: 62,
  adrsAccepted: 42,
  adrsProposed: 18,
  providers: 32,
  capabilityRules: 49,
  hygieneVectors: 38,
  hygieneGreen: 28,
  hygieneYellow: 3,
  hygieneRed: 0,
  lastUpdated: "2026-06-25"
};

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.

<Info>
  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).
</Info>

<video autoPlay muted loop playsInline poster="/images/posters/chat-to-workflow.png" style={{ borderRadius: "0.75rem" }}>
  <source src="https://mintcdn.com/supernovae-acdf3706/vVkJcOKMcsJbQfuN/videos/chat-to-workflow.webm?fit=max&auto=format&n=vVkJcOKMcsJbQfuN&q=85&s=f42fec0b44ba9eee8dcd54b4e3dcfc18" type="video/webm" data-path="videos/chat-to-workflow.webm" />

  <source src="https://mintcdn.com/supernovae-acdf3706/vVkJcOKMcsJbQfuN/videos/chat-to-workflow.mp4?fit=max&auto=format&n=vVkJcOKMcsJbQfuN&q=85&s=f6668fe15487cb082296878626e9579a" type="video/mp4" data-path="videos/chat-to-workflow.mp4" />
</video>

*A repeated chat prompt becomes a workflow file. Real capture: the audit
and the run are the actual CLI output, on a local model (`$0.000`).*

## 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`.

```yaml workflow.nika.yaml theme={"system"}
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 }}"
```

<Note>
  The `nika` CLI, `nika check`, `nika run`, `nika lsp`, and read-only
  `nika mcp` are live in v{STATUS.version}. 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.
</Note>

## 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…

<Tip>
  Scan this table before you dive into a section. It's the fastest map.
</Tip>

| I want to…                                        | Best option                                                               |
| ------------------------------------------------- | ------------------------------------------------------------------------- |
| Install Nika locally                              | [Installation](/getting-started/installation)                             |
| Run my first workflow                             | [First workflow](/getting-started/first-workflow)                         |
| Start from a real example                         | [Examples gallery](/examples/overview)                                    |
| Write a workflow well (or have an agent write it) | [Patterns](/guides/patterns) · [Agent authoring](/guides/agent-authoring) |
| See every `.nika.yaml` field                      | [YAML syntax reference](/reference/yaml-syntax)                           |
| Understand how verbs execute                      | [Concepts · Verbs](/concepts/verbs)                                       |
| Pick an LLM provider                              | [Concepts · Providers](/concepts/providers)                               |
| Look up a `NIKA-XXX` error code                   | [Reference · Error codes](/reference/error-codes)                         |
| Understand the engine architecture                | [Concepts · Architecture](/concepts/architecture)                         |
| Check the engine's live build state               | [Reference · Status](/reference/status)                                   |
| Contribute                                        | [GitHub → supernovae-st/nika](https://github.com/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 **{STATUS.clippyWarnings} clippy warnings** and **zero
unwraps** in `src/` are not aspirational. They are enforced by CI on every
commit.

## The engine in one diagram

```mermaid theme={"system"}
%%{init: {'theme':'dark','themeVariables':{'background':'transparent','mainBkg':'transparent'}}}%%
flowchart LR
    F["workflow.nika.yaml<br/><i>portable · readable · verifiable</i>"] --> E["<b>nika</b><br/>single Rust binary"]
    E -->|infer| L["LLMs<br/>Ollama · LM Studio · any API"]
    E -->|exec| S["shell"]
    E -->|invoke| T["tools · MCP"]
    E -->|agent| A["autonomous loop"]
```

<sub>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](/reference/status), the design at
[Concepts · Architecture](/concepts/architecture).</sub>

## Read next

<CardGroup cols={2}>
  <Card title="Examples · real jobs" icon="rocket" href="/examples/overview">
    What would YOUR Monday look like? Starter to epic, every industry.
  </Card>

  <Card title="How to write Nika" icon="compass-drafting" href="/guides/patterns">
    The twelve patterns of well-written Nika, each taught by a
    canonical example.
  </Card>

  <Card title="Install Nika" icon="download" href="/getting-started/installation" horizontal>
    What ships at v{STATUS.version}, what doesn't, how to track releases.
  </Card>

  <Card title="Workflows" icon="diagram-project" href="/concepts/workflows" horizontal>
    How a `.nika.yaml` file becomes an executed graph.
  </Card>

  <Card title="Providers" icon="server" href="/concepts/providers" horizontal>
    Local-first: Ollama · llama.cpp · vLLM · LM Studio, or any cloud API.
  </Card>

  <Card title="Architecture" icon="layer-group" href="/concepts/architecture" horizontal>
    Six layers. Why L0 has zero async and zero I/O.
  </Card>
</CardGroup>

## The Nika ecosystem

<Ecosystem />

You are reading Nika's documentation. For programmatic discovery: each
page exposes its heading tree via the Mintlify `.md` export at
`<url>/.md`. The canonical engine state lives at `/reference/status`
(imports `/snippets/_status-snapshot.mdx`, which is auto-generated by
`scripts/mintlify-snapshot.sh` from `scripts/refresh-status.sh`). Do
not quote hard-coded counts. Import `STATUS` and reference
`STATUS.cratesAdmitted`, `STATUS.libTests`, etc.

🦋
