Skip to main content
Nika’s editor story has two tiers: (1) generic JSON-Schema validation that works with any yaml-language-server-compatible editor, and (2) the nika lsp server plus the VS Code/Cursor extension for deeper workflow intelligence.
v state: the binary ships nika schema, nika lsp, nika mcp, and nika wire. Use nika init for repo-local schema/rules, or nika wire <client> for explicit MCP client setup.

Tier 1 — JSON schema validation (today)

Any editor with yaml-language-server can validate .nika.yaml against the workflow schema.
Install the YAML extension (Red Hat). It picks up the schema via the # yaml-language-server directive at the top of .nika.yaml, or via settings.json:
settings.json
{
  "yaml.schemas": {
    "https://nika.sh/spec/v1/workflow.schema.json": "*.nika.yaml"
  }
}
Or let nika init write this wiring for the current repo.

In-file schema hint

Add one comment at the top of any .nika.yaml so the schema works with zero editor configuration:
# yaml-language-server: $schema=https://nika.sh/spec/v1/workflow.schema.json
nika: v1
workflow: hello

tasks:
  - id: greet
    infer:
      model: ollama/llama3.1               # <provider>/<name> · local · zero key
      prompt: "..."

What tier 1 gets you

Field autocomplete

Verb keys, provider names, model identifiers, capability parameters.

Inline errors

Missing required fields, schema mismatches, wrong types.

Hover docs

Every field documented inline — descriptions come from the JSON Schema.

Format on save

Via prettier-plugin-yaml or LSP-driven formatting.

Tier 2 — nika lsp + extension

The generic yaml-language-server covers structural validation. A custom nika-lsp crate adds Nika-specific semantics:
Resolves ${{ tasks.X.output }} across task boundaries. “Go to definition” jumps from a binding reference to the source task. Unused outputs flagged. Circular dependencies detected before run.
Tracks untrusted inputs (fetched URLs, user-provided strings) flowing into sensitive sinks (shell commands, MCP invocations). Surfaces violations in the editor before CI catches them.
Inline DAG preview — a small panel showing the task graph as you type. Click a node to jump to its definition.
Types provider: → autocompletes from the catalog ( canonical providers · plus extended catalog IDs). Types model: after a provider → autocompletes from that provider’s models. Invalid pairs flagged inline.
tools: [...] on a model without tool_calling → warning. JSON schema on a model without json_mode: schema → warning with fallback suggestion.

Roadmap

CapabilityStatusAdmission
JSON Schema (yaml-language-server)shippednika schema + public schema URL
nika lsp L4 crateshippednika lsp
VS Code / Cursor extensionshippedMarketplace + OpenVSX
MCP agent oracleshipped, read-onlynika mcp (nika_check, nika_explain)
Zed / Neovim native integrations🧭 plannedCommunity + v1.0

Next

Schema reference

.nika.yaml top-level keys + workflow envelope.

YAML syntax

Full grammar for every verb step.

First workflow

Preview of the target first-run experience.

Constellation

When each crate admits.