Reference
Configuration
Every Duscode configuration key, covering checks, budgets, models, providers, memory, workers and more, plus where the user and project config files live and how they combine.
Duscode works with no configuration at all. Most settings people change are in the Settings dialog, which writes your user config for you. You can also edit the JSON files:
| File | Applies to | Notes |
|---|---|---|
~/.duscode/config.json |
All your projects | Your user config. It moves with DUSCODE_HOME. |
<project>/.duscode/config.json |
One project | Travels with the project if you commit it |
The user config loads first, then the project config on top:
- Most keys: the project's value replaces yours, including whole objects such as
budgetandworkers. providers: merged per provider.models: combined. An entry with the sameidreplaces the earlier one.tiers: merged per tier.
Duscode reads the config when it first opens a project. After you change it, restart Duscode (Ctrl+C, then duscode again) to pick up the change. The terminal app reads it each time it starts.
Warning
For your safety, a project config can't set a provider's
baseURL,apiKey,apiKeyEnv,protocolorkeyless. Those decide where your keys are sent, so they belong in your user config only.
Example
{
"checks": ["pnpm typecheck", "pnpm test -- --run"],
"budget": { "perTaskUsd": 3, "perDayUsd": 30 },
"tiers": { "standard": ["claude-sonnet"], "frontier": ["claude-opus"] },
"browserCheck": true
}All keys
| Key | Type | Default | What it does |
|---|---|---|---|
checks |
string[] | detected | Commands for the verification gate. [] turns the gate off. |
browserCheck |
boolean | false |
Adds a browser smoke check of the preview to the gate |
budget.perTaskUsd |
number | 2 |
Spending limit per task, in US dollars. See Budgets. |
budget.perDayUsd |
number | 20 |
Spending limit per UTC day, across sessions |
workers.maxConcurrent |
number | 3 |
Worker agents running at once |
workers.perTaskUsd |
number | budget.perTaskUsd |
Budget for each worker's task |
tiers |
object | — | Preferred models per tier, in order: { "fast": [...], "standard": [...], "frontier": [...] } |
models |
object[] | — | Add models, or override built-in ones by id. See Providers and models. |
providers |
object | — | Turn providers on or off, or add your own. See Providers and models. |
baselineModel |
string | best frontier model | The model that savings are measured against |
defaultModel |
string | standard tier | The one model used on the Free plan |
useClassifier |
boolean | true |
Not used by Auto's routing, which starts every task on the fast tier (see Routing and costs) |
memory |
boolean | true |
Memory across sessions |
turns.perTask |
number | 60 |
Working turns per task before Dus saves its work and carries on once (merge work and long plans get more; waiting turns don't count). Also in Settings → Budgets for the open project. |
queue.parallel |
boolean | true |
Run independent queued requests at the same time as helpers, merged one at a time |
feedback |
boolean | true |
Record problems in Duscode itself in Settings → About & updates → Feedback for Duscode |
lessons |
boolean | true |
Read the project's lessons at the start of every task |
lead |
boolean or object | true |
Lead plans for big, separable requests; { "budgetUsd": 5 } caps a whole run |
judgement |
boolean or object | true |
Dus's working habits; switch one off with, for example, { "flaky": false } (baseline, environment, diagnose, orient, turns, history, flaky, remember) |
lsp |
boolean | true |
Language servers: exact definitions, references, types and renames, and type errors checked after every edit |
journal |
boolean | true |
Write the project journal |
blueprint |
string | — | The project's architecture, such as nextjs-app. Usually set from the workspace. |
setupDone |
boolean | — | Set when you finish or skip the first-run architecture question |
sandbox |
string | "auto" |
"auto", "required" or "off": whether commands run in the OS sandbox. A project can only set "required". |
network.allow |
string[] | — | Extra hosts every sandboxed command may reach. User config only. See Network. |
permissionMode |
ask, auto, plan |
Auto in a worktree, Ask in the project folder | The mode new sessions start in. User config only. |
routing.mode |
economy, balanced, maximum |
balanced |
How routing trades cost for strength. A project config can't choose maximum. |
routing.learned |
false or { minSamples, successBar, halfLifeDays } |
{ 5, 0.8, 14 } |
How Auto learns which model fits which kind of work: recent tasks a model needs, the share it must pass, and how fast old results fade. false keeps the tier defaults. User config only. |
notifications.quietHours |
{ enabled, start, end } |
off, 22:00–07:00 |
No desktop, Slack or Teams messages in this window |
editor.fontSize, editor.tabSize |
number | 13, 2 |
The editor's text size and indent |
editor.wordWrap, editor.formatOnSave, editor.minimap |
boolean | false, false, true |
Editor behaviour |
terminal.shell, terminal.fontSize, terminal.copyOnSelect |
string, number, boolean | login shell, 13, false |
The terminal |
git.branchPrefix |
string | duscode/ |
Prefix for session branches |
git.prDraft |
boolean | false |
Open pull and merge requests as drafts |
git.prBase |
string | the session's base branch | The branch pull requests target |
git.commitStyle |
plain, conventional |
plain |
How suggested commit messages are written |
sessions.newSession |
worktree, main |
worktree |
Where a new session works |
sessions.autoArchiveDays |
number | 0 (off) |
Archive sessions idle this many days |
region.locale |
string | system |
Date and number format, such as en-GB |
region.currency, region.usdToGbp |
auto, USD or GBP, number |
auto, 0.75 |
Show costs in pounds as an estimate, at this rate. auto (not chosen) shows pounds when your format or browser language is British English, and dollars otherwise |
Project instructions
Instructions in prose belong in DUSCODE.md (or AGENTS.md, CLAUDE.md, or the Cursor and Copilot rule files, which Dus also reads) in the project root, not in the config. See Project instructions.
Keys
API keys don't go in config files. Add them in Settings → Models & keys, or use environment variables. See Providers and models.