Configuration

Zox merges JSON configs (later wins):

  1. ~/.config/zox/config.json (user)
  2. <workspace>/.zox/config.json (project)
  3. Env overlay (for example ZOXX_MEMORY_AUTO_SUMMARIZE)

Loaded by loadZoxConfig (packages/config/src/load.ts). Deep-merge objects. Unknown keys at the root of the schema may be stripped or rejected depending on Zod object mode; judge is strictObject — extra keys inside judge fail parse.

Minimal project config

json
{
  "model": "anthropic/claude-sonnet-4-20250514",
  "agent": "build",
  "sandbox": { "mode": "worktree" }
}

Schema map (optional keys)

From packages/config/src/schema.ts:

KeyPurpose
modelDefault provider/id
agentDefault profile
instructions.filesExtra instruction files for context
sandbox.modehost / worktree / container / remote
sandbox.worktree.cleanupkeep / remove
sandbox.envAllowlistEnv vars allowed into tool processes
sandbox.network.allowHostsNetwork allowlist
context.windowTokensContext window size
context.overflowThresholdFraction that triggers overflow handling
context.prune.*Optional prune policy
budget.preCompactTokenThresholdSoft compact trigger
budget.maxTurnsStop after N turns
budget.maxUsdPerTaskSpend cap
memory.autoSummarizeDefault on; SessionEnd → .zox/memory/auto/
memory.summarizeModelModel used for summaries
memory.startupInjectCountHow many memories at start
memory.rollingSummaryRolling summary flag
memory.autoInjectExtra inject paths
tools.webfetch.maxBytes / allowedHostsWeb fetch limits
skills.autoLoadSkill names loaded at start
skills.loadPathsExtra skill directories
skills.catalog*Catalog injection limits
mcp.serversStdio MCP map
index.embeddings.apiKeyEnvParsed, ignored (no dense embeddings yet)
providersExtra / override provider specs
judgeJev prompt guardrail
observabilityOTel / metrics / recordContent

Environment variables

VariableRole
ANTHROPIC_API_KEY / OPENAI_API_KEY / GOOGLE_API_KEY / GEMINI_API_KEY / GROQ_API_KEY / OPENROUTER_API_KEYProvider keys
ZOXX_SERVER_TOKENShared secret for HTTP (zox serve / attach)
ZOXX_MEMORY_AUTO_SUMMARIZE0/false disables; 1/true enables
ZOXX_OBSERVABILITY0 disables metrics path in server listen
TYPESAFE_API_KEYJev (or judge.apiKeyEnv)

Note the double X in ZOXX_*.

Richer example

See docs.md §13.3 for MCP, budget, memory, and observability blocks in one project file.