Skip to content

Configuration ​

Lens has no settings file of its own. It reads the Maverick configuration, so whatever you configure for the CLI applies to Lens too. This page lists the keys that change what Lens shows or does.

Where configuration lives ​

Configuration is merged in layers; later layers win. Objects merge key by key; arrays and scalars replace.

LayerPath
Built-in defaults—
Global~/.maverick/config.json, or $MAVERICK_HOME/config.json
Project.maverick/config.json (legacy: maverick.config.json)

Settings → Configuration layers shows which files were found and the effective result. The file is validated on load; an invalid file is reported as a banner in Settings and as an error by the CLI.

Edit, then refresh

Lens notices changes to .maverick/config.json through the file watcher and rebuilds the index. With --no-watch, choose Refresh the project index in the command palette.

Tasks ​

KeyDefaultEffect in Lens
taskRoot.maverick/tasksWhere Lens looks for task folders
workflow.defaultstandardShown in Settings; the workflow preselected for new tasks is always Standard
verification.commandsdetectedShown in Settings; run by Verify and the checks gate
language.docs, language.codeenThe languages agents write documents and code in; editable in Settings

Agent runtime ​

The runtime section is the trust boundary for agents. Lens writes trusted, maxPermission and stages through maverick agent trust and maverick agent stage; everything else you edit by hand.

KeyTypeDescription
runtime.trustedstring[]Providers allowed to run in this repository
runtime.maxPermissionread-only | edit | fullCeiling for every run. Default edit
runtime.defaultPermissionsamePermission used when a run asks for none
runtime.default{ provider, model?, effort? }Fallback provider
runtime.stages.<step>{ provider?, model?, effort?, permission? }Default per workflow step: prd, spec, techspec, tasks, build, fix
runtime.routes[{ match, provider, model?, effort?, permission? }]Pick a provider by subtask type or complexity (low, medium, high)
runtime.timeoutMinutesnumberMaximum run time. Default 30
runtime.bins.<provider>stringPath or name of a provider's executable
runtime.custom[{ id, name?, command, permissions? }]Your own agent command, listed with the built-in providers

Reasoning effort is one of minimal, low, medium, high, xhigh, max, ultra; each provider accepts a subset.

How a run is resolved ​

For each run, Maverick decides the provider, model, effort and permission in this order:

  1. What you chose in the run dialog (or passed as flags to maverick agent run).
  2. The first runtime.routes entry whose match fits the subtask.
  3. runtime.stages.<step> for the step of the run.
  4. runtime.default.

A model or effort from an entry applies only when that entry also chose the provider; otherwise Maverick's recommendation for that provider and step fills in. Then the checks run: the provider must be in runtime.trusted, the permission must not exceed runtime.maxPermission, and the provider must support it. The run dialog always sends a provider, so in Lens the first rule applies and the defaults decide what the dialog preselects.

Hooks ​

hooks run commands around agents and flows. before-agent-run can block a run; after-agent-run runs after it. Both fire for runs started from Lens.

json
{
  "hooks": [
    { "event": "before-agent-run", "run": "./scripts/check-clean-tree.sh", "timeoutMs": 10000 },
    { "event": "after-agent-run", "run": "npm run lint -- --fix" }
  ]
}

WARNING

after-flow-run hooks fire for maverick flow run in the terminal. Flow runs started from Lens call the flow engine directly and do not fire them.

Architecture ​

The architecture section tunes the Devtools analysis and maverick coupling, audit and graph.

KeyTypeDescription
architecture.componentsstring[]Folder globs that define components, such as "src/modules/*"
architecture.depth1–12Fixed folder depth for inferred components
architecture.maxComponents2–200Upper bound on inferred components
architecture.rules[{ from, disallow, allow?, reason? }]Forbidden imports; each violation is a high-severity finding and a health deduction
json
{
  "architecture": {
    "components": ["apps/*", "packages/*"],
    "rules": [
      { "from": "packages/domain/**", "disallow": ["packages/db/**", "apps/**"], "reason": "Domain stays pure" }
    ]
  }
}

Capabilities ​

KeyDescription
capabilities.targetsDefault AI tools to install into
capabilities.catalogsExtra catalogs to browse besides the built-in one
capabilities.layoutlinked (one copy in .agents/, linked into each tool — the default) or copy

Environment variables ​

VariableEffect
MAVERICK_HOMEFolder of the global configuration instead of ~/.maverick

Files Lens writes ​

PathWhenCommit it?
.maverick/cache/project-index.jsonOn start and on every refreshNo — add .maverick/cache/ to .gitignore
.maverick/config.jsonTrust, max permission, step defaults, languageYes
.maverick/tasks/<task>/…Through the commands you run: new tasks, subtask status, flow state and approvals, agent transcripts, reportsYes, as your team prefers
Tool folders (.claude/, .cursor/, .agents/, …) and the capability lockfileWhen you apply a capability changeYes

In the browser, Lens stores only your reviewer name and preferred editor, in localStorage.

See the complete schema in the configuration reference.

AI writes. Engineers decide. · Code under MIT · content under CC BY-NC 4.0.