Skip to content

Configuration overview

This page is the index: how settings are loaded, in what order they win, and where the full reference lives. For every switch and table, use configuration.md; for fields on bundled plugins only, use the generated plugin options.

Other operator hubs: installation.mdx (where to run the app) · upgrading.md (releases and upgrades).

SourceLocation
Base JSONconfig/default.json (usually committed)
Overridesconfig/local.json (optional; often gitignored)
Process envSmall whitelist only — see configuration.md (not generic FOO__bar__baz mapping)

Files are read from config/ relative to the process current working directory (e.g. app root, or your --config-root install directory).

  1. config/default.json — baseline.
  2. config/local.json — deep-merged on top. Arrays replace; they are not concatenated.
  3. Core env whitelist — overrides or augments the merged JSON (e.g. PORT, AGENT, AGENTS_RUNNER_*, TASKS_MAX_CONCURRENT, TASKS_MAX_WALL_TIME_MS, RUN_RECORDS_PATH). See the tables in configuration.md.
  4. Plugin env whitelist (first-party) — merged only into an existing plugins[] entry with the same package name (plugins are not created from env alone). See configuration.md.

If the same value is set in both JSON and env, env wins for the keys covered by the whitelist (see configuration.md on precedence for some secrets at runtime too).

The server validates the merged result with src/config/schema.ts. Known top-level fields include:

KeyRole
portHTTP port (overridable with PORT).
agentDefault agent id (overridable with AGENT).
agentsPer-agent settings: a map of agent id → { "defaultModel": "…" }, plus a special key runner for child-process limits (timeoutMs, maxBufferBytes, postFinalGraceMs, forceKillDelayMs).
pluginsList of { "package": "…", "options": { … } } entries; each plugin validates its own options (Zod in the plugin package).
pluginSystemPlugin-system behavior flags (strict boot).
observabilityPassed into @agent-detective/observability (e.g. requestLogger.excludePaths).
tasksOrchestrator guardrails: maxConcurrent, maxWallTimeMs — also settable via TASKS_MAX_CONCURRENT / TASKS_MAX_WALL_TIME_MS.
runRecordsOptional JSONL path for task lifecycle lines — also settable via RUN_RECORDS_PATH.
docsAuthRequired / docsApiKeyProtect /docs with an API key; overridable via DOCS_AUTH_REQUIRED / DOCS_API_KEY.

A table and full JSON Schema (draft-7) kept in sync with Zod are in generated/app-config.md — regenerate with pnpm docs:config after changing src/config/schema.ts (the same way pnpm docs:plugins updates plugin options).

Plugin options: not listed in the table above — each plugin’s keys are defined in that plugin’s Zod schema and in generated/plugin-options.md.

When you change Zod in packages/*/src/application/options-schema.ts (bundled plugins), regenerate the markdown reference and commit the diff:

Regenerate plugin options
pnpm docs:plugins

When you change the top-level app schema in src/config/schema.ts:

Regenerate app config reference
pnpm docs:config

In CI, pnpm docs:plugins:check and pnpm docs:config:check fail if the generated files are out of date. Paths: architecture-layering.md.

NeedDocument
Full env reference, Jira, Linear, pr-pipeline, local-repos, validationconfiguration.md
Field-by-field plugin options (bundled plugins)generated/plugin-options.md
Top-level app config table + JSON Schema (from Zod)generated/app-config.md
Plugin system and schema in codeplugins.md (e.g. schema system)
Custom plugins (npm, path, plugins/ directory)extending-with-plugins.md
Install paths and configinstallation.mdx
New releases, git pull, binary refreshupgrading.md
Production layout (systemd, nginx)deployment.md