Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Layers

Reflex, Instinct and Metacognition each use one model at a time. You assign it in config.json under layers. Cognition is different: it runs agents, each with its own model.

LayerAssignmentRequired apiJob
Reflexone model, editor onlyfimInline completion as you type (Mercury in the example).
Instinctone modelsystemoneTyped decisions and supervision: when to speak, permission review, progress checks.
Metacognitionone modelchatRemarks beside your code, and review of risky calls. Prefers the low variant when the model offers one, otherwise the model’s default.
Cognitionagents, each with its own role and modelchatThe agent loop you talk to.

Assign a model

A layer takes a model name, or an object with a variant:

{
  "layers": {
    "reflex": "inception/mercury-edit-2",
    "instinct": "omniroute/typesafe/jev-1.13",
    "metacognition": {
      "model": "omniroute/combo/deepseek-v4-flash",
      "variant": "low"
    }
  }
}
  • The model must exist in the catalogue and use the api the layer requires.
  • variant is optional. Leave it out for the model’s default. Use null or "off" for no variant. Any other value must name a variant the model offers.

What happens when a layer is not usable

A missing, unknown or API-incompatible assignment turns that layer off, with a clear diagnostic. It does not switch to another model silently.

Layer offEffect
ReflexNo inline suggestions.
InstinctPermission review asks you when it cannot decide. Supervision of long turns falls back to a visible, renewable 500-step cap.
MetacognitionNo remarks. Compaction summaries use the session’s model.

nav doctor reports each layer and why it is off. See Troubleshooting.

Where you see the choices

The terminal’s right panel and the VS Code chat header tooltip show the model of each lower layer and of the current agent, marked when overridden. In the editor clients, assignments are read-only; change them in config.json or a Settings screen.