Skip to main content
Nika is local-first: point model: at a local server and your data never leaves the machine. This page is the ladder, from the one-command path to production servers.

1. The one-command path: Ollama

Install Ollama, then:
That’s it. In any workflow (the same local default the engine scaffold and brew caveat teach):
nika doctor confirms the wiring (it detects the running Ollama server and prints the exact fix if something is off).
qwen3.5:4b is the first-run local default: small enough for most laptops, good enough for structured extraction. Swap the tag for anything in the Ollama library: llama3.2, mistral, phi4, larger Qwen variants. Rehearse with model: mock/echo when you want zero daemon and zero keys — mock simulates the model reply; it does not disable tools or effects.

Audit first, then run on your own machine. nika check clears a meeting-notes workflow before any model is called; then a local Ollama model (ollama/llama3.2:3b) turns a sample transcript into typed action items, written to action-items.json with a hash-chained trace. No provider key, no cloud call for the model. Captured from the real CLI; the file is a shorter demo version of the meeting actions example.

2. Any Hugging Face GGUF, still one command

Ollama pulls directly from the Hugging Face Hub. Any public GGUF repo works, no account needed:
Pick a quantization explicitly with a tag:
Then reference it in the workflow exactly as pulled:
Rule of thumb for quantizations: Q4_K_M is the sane default (quality per GB), Q8_0 when you have RAM to spare, Q2/Q3 only when memory is tight. The Hub’s GGUF filter lists every compatible repo.

3. LM Studio: the visual browser

Prefer a GUI? LM Studio browses Hugging Face, downloads models with a click, and serves an OpenAI-compatible endpoint. Start its server, then:

4. Servers: llama.cpp and vLLM

For shared machines and production:
  • llama.cpp llama-server serves any GGUF: model: llamacpp/<model>
  • vLLM serves full-precision Hub models at datacenter throughput: model: vllm/<hub-repo-id>
Both speak the same OpenAI-compatible dialect; the prefix picks the provider, nothing else in the file changes.

Checking what’s wired

Doctor reports every provider (local servers detected, cloud keys present) with a fix-form per missing piece. The audit before a run prices local models at $0.000:

Thinking time is budgeted for

A local thinking model legitimately needs minutes for one completion on consumer hardware — well past the 30s a cloud round-trip expects. Nika’s provider deadlines are per class: local providers (ollama, lmstudio, llamacpp, localai, vllm) get ≥ 300s by default, cloud providers 30s. No 30s-everywhere default silently kills a local run mid-think. When a task needs more than the default, the task’s own timeout: governs the provider deadline directly:
Full semantics (per-class defaults, the 600s silent-connection ceiling, streaming): YAML reference · Timeouts.

Swapping between local and cloud

The file does not change shape. One line moves the workflow between a laptop and an API:
The permits boundary applies either way: a permits: block with no net.http entry means the workflow cannot reach the network even if the model could. Local model + closed permits = fully air-gapped AI work.

Providers

The full catalog and how one InferRequest speaks every dialect.

First workflow

Five minutes from install to a checked, runnable file.

Model bench

Pick your default local model on a measured table, not vibes.

Cost honesty

Why a local run is unpriced — never « free » — and how floors work.