Skip to content

Handbook

Complete settings reference

Every configuration field, nested option, runtime default and global or project-specific consent boundary.

Reviewed CLI source version: 2.4.0 · Editorial update:

Files and loading order

Global user configuration: ~/.lurus/settings.json. Project configuration: <cwd>/.lurus/settings.json. Do not rely on an additional settings.local.json layer. Use JSON without comments. Preserve existing values when editing; do not blindly overwrite an existing file with examples.

The CLI first loads defaults, then global files and project files. LURUS_API_URL and LURUS_MODEL can override the corresponding file values. Executable settings and permissions become active only after the required consent.

Not simply “project wins”. Ordinary global values are shallowly applied. Project UX fields can override directly, denies accumulate, execution/grants/utility models require consent. Same-name MCP objects replace each other entirely. No general deep merge or live reload guarantee. /config shows cached configuration, has no set, get or reset, and does not generally reload edits. Start a new CLI session after manual edits.

The tables describe effective defaults, not just schema metadata. G = global; P direct = project without override consent; P consent = after deliberate consent; P ignored = not applied by the normal project loader. Model support and explicit CLI overrides also apply.

Minimal project settings

.lurus/settings.json:

{
  "displayCost": true,
  "permissions": {
    "allow": [],
    "deny": [],
    "allowedCommands": ["git status"],
    "deniedCommands": ["git push"],
    "bashAutoApprove": false
  }
}

Cost display applies directly. Grants require consent; allowedCommands is exact Bash text, not a universal Exec grant. git push adds a deny. After restarting, expect configuration visibility and reviewed consent offers, not blanket permission for Git.

Global counterpart ~/.lurus/settings.json:

{
  "disableDangerousTrust": true,
  "indexing": false,
  "permissions": {
    "allow": [],
    "deny": [],
    "allowedCommands": ["git status"],
    "deniedCommands": ["git push"],
    "bashAutoApprove": false
  }
}

disableDangerousTrust and indexing belong globally here. The same fields are ignored by the normal project loader and do not provide persistent project protection.

Every configuration field

Key / exampleType, default and effectScope
apiUrl: "https://example.invalid"String; defaults to the Lurus service. Use only a deliberately selected supported endpoint. $VAR substitution is not guaranteed.G; P ignored; LURUS_API_URL takes precedence.
modelString from /model; otherwise an available default selection.G; P ignored; environment and CLI can override.
temperature: 0.2Optional number. When absent, the model default applies. The schema specifies 0 to 1; support and validation are model-dependent.G; P ignored.
promptCaching: trueBoolean, default true. Enables prompt caching without guaranteeing a cache hit.G; P ignored.
permissions: {}Object containing the rules below. Editing the file alone does not grant approval.G/P; rules are combined subject to consent.
globalHooks: {}Event map; no custom actions when absent. See hooks.G only; P ignored.
projectHooks: {}Event map; no custom actions when absent.P only, after consent; G ignored.
mcpServers: {}Object containing server names and configurations; no custom servers when absent.G/P; same-name objects are replaced entirely; project startup requires consent.
modelAliases: {}Object containing alias names and model values; no custom aliases when absent.G/P after consent; merged by name.
disableDangerousTrust: truetrue blocks /trust on and dangerous startup mode. No such block when absent.G; P ignored.
announcements: []String list; no display when empty. Managed announcements may be added.G; P ignored.
notifications: trueOnly true enables notifications for dialogs and completed turns; platform-dependent.G/P direct.
thinkingMode: "on"on, adaptive or off; defaults to on when absent or invalid. Cannot disable thinking on always-on models.G; P ignored; CLI and current-session values can override.
effort: "high"minimal, low, medium, high, xhigh or max; defaults to high without a valid value. Support is model-dependent.G; P ignored; CLI can override.
maxMode: falseOnly true enables the full model window instead of the normal context limit.G; P ignored; CLI can override.
truncateToolOutput: 25000Optional character limit. Tool-specific defaults and dynamic limits are explained below.G/P direct.
autoLint: trueBoolean or command string; off when absent or false. true runs npm run lint during post-edit verification.G/P after consent; project value replaces global value.
autoTest: "npm run test:unit"Boolean or command string; off when absent or false. true uses npm test.G/P after consent; project value replaces global value.
autoTypeCheck: trueBoolean or command string; off when absent or false. true uses npx tsc --noEmit --pretty.G/P after consent; project value replaces global value.
compactionModelOptional public model selection for compaction and memory. Without a valid value, uses the utility model, then an available default or the current model.G/P after consent; slash changes are global and require restart.
utilityModelOptional public model selection for summaries, background analysis and session titles. Without a valid value, uses an available default or the current model.G/P after consent; changes are global and require restart.
costLimit: 5Number in EUR per session. No stop when absent or 0. Once costs are positive, the session stops after reaching the limit; not a hard spending cap. Orchestration has a separate budget.G; P ignored.
contextBudget: 15000Token budget, default 15,000, with 30% for memory. Limits the memory block, not mandatory instructions or the entire model window.G; P ignored.
costSavingMode: falseCost saving is enabled unless explicitly set to false.G; P ignored.
displayCost: trueOff by default; only true enables display. Cost tracking is independent.G/P direct.
indexing: falseIndexing is enabled by default unless disabled. Account restrictions may prevent activation.G; P ignored during normal loading.
tddGuard: "warn"off, warn or strict; defaults to off. The guard is separate from the TDD prompt.G; P ignored.
hooks: {}Supported older event embedding: global values become globalHooks, project values become projectHooks. Separate hook files also load.G/P according to source.

For optional model fields, use an actual selection from /model.

Output truncation and index restart

Without truncateToolOutput, character limits depend on the tool: 40,000 for file reads, shell output and web content; 25,000 for text and semantic search; 10,000 for file and directory lists; 80,000 for subagent responses; and 8,000 for other output. Ordinary tool output is also dynamically limited to between 5,000 and 80,000 characters. Subagent responses and plan documents are exempt from that reduction.

/indexing on|off writes a project file and sets a trusted runtime override, but the normal loader does not apply that project value after restarting. That project write alone is not a dependable persistent opt-out. For persistent opt-out use global indexing:false and check the account setting. /indexing clear|delete removes the index, not the setting.

Permission subfields

FieldType / exampleSemantics
allowstring[], ["Read"]General Tool or Tool(pattern) rule, matcher *, **, ?; G/P additive after consent.
denystring[], ["Delete"]Global denies immediate, project adds; project cannot remove global denies. Allow does not override protection gates.
allowedCommandsstring[], ["git status"]Trimmed entire Bash command exactly, no allow wildcard/prefix. Consent/additive.
deniedCommandsstring[], ["git push"]Exact or prefix followed by a space; blocks git push origin main, for example. Additive.
bashAutoApproveboolean, false recommendedControls the safe Bash path, not blanket structured Exec approval. Context-dependent default below.

allowedCommands:["git"] does not permit arbitrary Git commands. git status --short is not git status. Script/CWD/secret/dangerous/capability checks remain; see permissions.

Do not rely on a universal default for bashAutoApprove. Its active effect depends on loaded rules and consent.

Important: A project value of false is not a persistent veto against an approved global value of true. For protection, explicitly set bashAutoApprove to false globally and review or revoke existing grants.

MCP subfields

All fields live under mcpServers.<name>; see the full MCP workflow:

FieldType, default and boundary
typestdio, http or sse. Defaults to http with a URL, stdio with a command.
commandString, required for stdio. Do not combine with url.
argsString list, stdio only. No arguments when absent or empty.
env, env.<NAME>Object with string values, stdio only. Adds to or overrides the allowed child environment. Never commit secrets.
cwdOptional resolvable working-directory path, stdio only.
urlHTTP-/HTTPS-URL string, required for remote servers. Destination checks are not comprehensive SSRF protection.
headers, headers.<NAME>Object with string values, remote only. Header validation remains active; manage secrets through the CLI.
headerRefs, headerRefs.<NAME>Protected CLI-managed references for the relevant source, server and project path. Do not create or edit manually.
timeoutPositive finite number in milliseconds, default 15,000. The CLI flag requires a positive integer.
trustOnly global true grants tool trust. Project servers remain untrusted even with true.
includeToolsString list of exact unqualified tool names; empty means unrestricted.
excludeToolsExact tool names, not globs. Takes precedence over includeTools.

A project server replaces a same-name global object entirely. Rejecting the project source does not guarantee starting a global fallback server.

Hook subfields

hooks|globalHooks|projectHooks.<Event>: Definition[]; definitions have optional matcher:string and hooks:Action[]:

  • Command action: type:"command", command:string, optional timeout:number ms.
  • HTTP action: type:"http", url:string, optional method:"POST"|"PUT"|"PATCH", headers:Record<string,string>, timeout:number.
  • The timeout defaults to 30,000 ms and the HTTP method to POST. A separate hooks.json contains the event map directly.

Hooks covers complete examples, supported events, blocked headers, matchers and failure behavior.

Advanced project scenarios

.lurus/settings.json for existing reviewed npm scripts:

{
  "autoLint": true,
  "autoTest": "npm run test:unit",
  "displayCost": true
}

After project consent, verification uses the existing lint and test:unit scripts. Review the npm lifecycle, working directory and script contents; changes can require new approval. Do not create wrapper scripts to bypass a denied operation.

For modelAliases, obtain the public selection from /model first. Use {"my-review":"<selected-public-model>"} and replace the placeholder before use. Project aliases require consent and merge by name with global aliases. The project model value itself is not applied.

Managed values and legacy fields

Manage skill activation with /skills activate|deactivate and agent approval with /agents trust|untrust, rather than editing stored management data manually. Bundled skills are active by default.

  • Select interaction mode through a CLI flag or /mode, not by manually setting mode in the file.
  • permissionMode is a process option, not a supported settings key.
  • disableBypassPermissions is an older global alias for disableDangerousTrust; use the latter in new configurations.
  • costWarningThreshold is ignored; use costLimit.
  • lurus.config.json, .lurusrc, allowedPaths, blockedPaths, requireConfirmation, beforeWrite and afterCommit are not current CLI settings.

Schema and public environment

The local settings schema does not fully describe all supported options and defaults. Do not rely solely on its validation or assume a public $schema URL exists. Use the field types and scopes documented here.

VariableEffect and boundary
LURUS_API_KEYA nonempty value after trimming whitespace overrides stored authentication. Invalid values cause an error, not fallback. Use a secret manager; never commit it.
LURUS_API_URL, LURUS_MODELOverride the corresponding file values.
LURUS_AUTO_CONSENT1, true, yes or on, ignoring surrounding whitespace and case, grants broad consent for settings, hooks and MCP. Use only for deliberately trusted automation, not as a default.
LURUS_BASH_PASS_ENV, LURUS_HOOK_PASS_ENV, LURUS_MCP_PASS_ENVComma-separated variable names forwarded in addition to the fixed child-process allowlist. Each approved value is fully visible to the child.
HTTP_PROXY, HTTPS_PROXY, NO_PROXY and lowercase formsLowercase takes precedence. NO_PROXY accepts comma or whitespace separators; loopback is added.
NODE_EXTRA_CA_CERTSAdds trusted corporate certificates. Do not disable TLS verification.
EDITOR, VISUALExecutable editor for prompts and memory, not arbitrary shell code.
LURUS_GIT_CLONE_TIMEOUT_MSClone timeout during installation: default 90,000 ms, allowed range 5,000 to 600,000 ms.

Troubleshooting and automation cover safe usage.

A deliberate choice

Before your first prompt.

Interactive demo
Lurus Codeprivacy-demo · illustrative workspace

Demo session ready. Your model choice and data route are separate decisions.

Illustrative scenario. No real sign-in, security test or code transmission takes place.

Image preview