Skip to content
Reference

Configuration

The two-tier settings layout, the real precedence chain, and the task config keys the harness and runtime read.

Settings are TOML in two tiers: one global file per machine, and up to two files per project. Every file is optional — with none of them present, built-in defaults apply and flags still work.

Where settings live

TierPath
Global (Windows)%APPDATA%\neo\settings.toml
Global (POSIX)~/.config/neo/settings.toml, honouring XDG_CONFIG_HOME
Global overrideThe file named by $NEO_CONFIG always wins for this tier
Project<repo>/.neo/settings.toml — meant to be committed
Project-local<repo>/.neo/settings.local.toml — personal, added to the repo's .gitignore when neo creates it
Legacy~/.neo/config.toml — read only when the global file is missing

The project tier is found by walking up from the working directory for a `.neo/` directory. `neo config path` shows the resolved locations on this machine, and `neo config list` shows effective values with the tier each came from.

Precedence

  • Explicit CLI flags, and the interactive session's own state
  • Environment: NEO_MODEL, NEO_PROVIDER, NEO_BASE_URL, NEO_API_BASE, NEO_API_KEY
  • Project `.neo/settings.local.toml`
  • Project `.neo/settings.toml`
  • The global settings.toml
  • The legacy ~/.neo/config.toml, only when the global file is absent
  • Built-in defaults

Task configuration keys

These are read per task by the harness and the runtime. Unknown keys pass through the settings layer untouched, so a key one module owns can still be set in any tier.

KeyWhat it doesDefault
max_retriesFull attempts at the whole task, inside run_task3
budget_cap_usdHard cap on model spend per task2.0
adaptive_routingEnable the per-call difficulty routerfalse
model_tiersPer-tier {provider, model, api_key?, api_base?} the router targetsBuilt-in tiers
crash_retriesScheduler attempts after a worker crash or kill — not max_retries1
resumeContinue from a checkpoint when one existstrue
approval"require" parks the worker at the diff-approval gateUnset
approval_timeout_sHow long that gate may block; unset blocks foreverUnset
hang_heartbeat_stale_sHeartbeat age the scheduler treats as a hang30.0
log_rootWhere task logs and sessions are written./logs
plan_with_memoryQuery decision memory before planningtrue
lint_gateStatic pass over changed files before a verify cycletrue
docs_lookup_enabledAllow a step session's DOCS lookupstrue
coordination_detectDetect multi-file fan-out at planning timetrue