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

Configuration

wisp runs with no configuration at all. When you want it to behave differently, the settings live in one optional file, ~/.wisp/config.json (or $WISP_HOME/config.json), which you can change from the command line, from chat, or by hand. This guide is a tour of what is worth changing and how; the reference lists every field with its default.

Look before you change

wisp config                     # every setting in effect, defaults applied, as JSON
wisp config list                # the settings `set` can change: each one's value or (default), and what it does
wisp config get approval.threshold
$ wisp config get approval.threshold
moderate	the default

The model’s inspect tool and the MCP resource wisp://config show the same view, read-only.

Change a setting

wisp config set model ollama:granite4.1:8b
wisp config set approval.timeoutSeconds 300
wisp config set routing.ladder system ollama:qwen3.8:27b     # a list: words, or a JSON array
wisp config unset approval.timeoutSeconds                    # back to the default

In chat, /config set and /config unset do the same, with Tab completing the settings and their values. Each change is checked before it is written: an unknown setting, a value the setting does not take, or a file that would no longer load is refused with the reason, and nothing changes. The rest of the file is kept as it is, and the file is written readable by you alone. Changes apply from the next session: a running chat keeps the settings it started with. A change that weakens the gate or the audit (the threshold at never or dangerous, the classifier at rules, the audit off) prints a note. Every change is audited as config.change.

wisp’s model cannot change its configuration: there is no tool for it, and its sandboxed commands cannot write ~/.wisp (ADR 0040). A command you approve to run outside the sandbox could, which is why you are asked about each one (ADR 0064).

The settings worth knowing

You want to…SettingDefault
Run on a local model by defaultmodelsystem
Be asked less, or moreapproval.threshold: safe, moderate, dangerous, or nevermoderate
Choose what judges each commandapproval.classifier: coreml, system-model, or rulescoreml
Wait longer, or forever, for your answerapproval.timeoutSeconds (0 waits forever)600
Remember project and always approvals for longerapproval.persistDays30
Give commands more timecommandTimeoutSeconds (0 is no limit), and the cap a call or thread may ask for, commandMaxTimeoutSeconds120, 1,800
Stop the model asking to run a command outside the sandboxcommandPolicy.sandbox.allowOutsideSandboxtrue
Give the model its memory, models, or ask toolcontext.memory, tools.models, tools.askfalse
Leave a built-in tool out everywheretools.disablednone
Add house style to every conversationsystemPromptExtensionnone
Turn notifications offnotifications.enabledtrue
Check replies with a model too, or not at allverification.mode: off, readers, or modelreaders
Keep a thinking model from thinkingollama.models.<name>.think false, or ollama.think for every modelunset
Hold a model to a windowollama.models.<name>.contextLengthsized from memory

Editing the file by hand

Some settings are edited only by hand: the rest of commandPolicy (the deny and allow patterns, the sandbox’s writable paths and network), custom tools, and fact kinds. Partial objects are fine; anything you leave out keeps its default:

{
    "systemPromptExtension": "Prefer British spelling.",
    "commandTimeoutSeconds": 300,
    "commandPolicy": {
        "sandbox": { "writablePaths": ["~/Library/Caches", "~/.cargo/registry", "~/.cargo/git", "~/.npm"] }
    }
}

writablePaths replaces the default list, so repeat the defaults you want to keep. A malformed file, or an invalid commandPolicy pattern, is an error that names the problem (exit 64), and wisp doctor’s config line says whether the file parses. Unknown fields are ignored. Where each section is described:

SectionReference
commandPolicyrun_command
approvalRisk classification and approval
tools.customCustom tools: your own command templates, run through the same gate
ollama, mlx, llamacpp, lmstudio, coreaiModel backends
context, facts, assessmentManaging the context window
routingADR 0037

Instructions, in three layers

What the model is told has three layers, in order (ADR 0017): wisp’s own system prompt, which you cannot change; your systemPromptExtension, for every session on this Mac; and a conversation’s own instructions, from --instructions on the command line or instructions when an MCP thread starts.

Environment

VariableEffect
WISP_HOMEMoves wisp’s home, ~/.wisp, elsewhere: a scratch directory to try something without touching your state
WISP_LOGdebug, info, or error: mirror wisp’s diagnostics to stderr (Logging)
WISP_LLAMACPP_API_KEY, WISP_LMSTUDIO_API_KEYA llama.cpp or LM Studio server’s key, kept out of config.json