Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/Skidbladnir

.nornir/airgapped-agent.md

Airgapped-agent guide

How to drive a local, offline model over a large Rust workspace using nornir as the ground-truth provider — "go through the source and crates, find dependencies / function calls" without the model ever walking raw source (where it hallucinates edges). This is the practical companion to the Explore and Architecture chapters in design.md.

The principle: tooling-first, model-second

A small local model is good at summarizing and navigating structured facts and bad at deriving them from raw code. So don't ask it to "read the repo and work out the call graph" — point it at nornir's MCP server and let it query. nornir already holds every projection (deps, calls, symbols, full-text, vectors) keyed by git SHA, served over MCP for exactly this. Reserve a frontier model (e.g. Opus) for judgement; offload "index it, list it, find it" to the local one.

Model + harness (as of mid-2026)

The query surface (what the model calls)

Start every session — and after any context reset — with orientation, then drill in. None of these require a checked-out binary except where noted.

Orient

Crate dependencies (Mímir)

Function calls & symbols

Search

Populating the facts (operator, once per repo/release)

The query tools read what's been persisted. Seed it with:

nornir map <repo>                       # syn scan + workspace index build + snapshot
nornir introspect symbols --persist \
        --repo <repo> target/debug/<bin>   # DWARF symbols + callgraph → dwarf_* tables

nornir map is the one-shot for the syn/knowledge + full-text side; introspect symbols --persist adds the DWARF side from a debug-info binary (keyed to the member's HEAD SHA). Both write to the warehouse, so every later query — and every past SHA — is a warehouse read, no re-scan.

Why this beats raw-source RAG