Configuration reference¶
This page is the canonical reference for atlas.json. Other pages show only
the fields they need; every field, default, and precedence rule is defined
here.
How loading works¶
- ATLAS reads one dependency-free JSON file,
atlas.jsonby default, or the path given by--config. - Explicit CLI/API arguments win over config-file values.
- Unknown fields are rejected so spelling mistakes fail loudly.
- Relative paths are resolved relative to the config file;
~is expanded. "version"must be1(or omitted).- ATLAS never stores credential values. Set provider keys in your environment.
Minimal config¶
Most projects only need this:
{
"version": 1,
"trace_output": "./atlas-program",
"atlas_model": "gpt-5"
}
Everything else has a sensible default.
Core fields¶
| Field | Default | Purpose |
|---|---|---|
trace_output |
required | Program-specific folder for traces, evidence, and manifest state. This is the program identity: same folder = same program. |
atlas_model |
required for learning | Model used by ATLAS generation, judging, and refinement. Keep it separate from your task-solving model. |
trace_root |
~/.atlas-skill/traces |
Root for per-taxonomy trace folders after acceptance. |
store_dir |
~/.atlas-skill/taxonomies |
Flat taxonomy store: one JSON file per taxonomy_id. |
inherit |
unset | taxonomy_id to start from. Unset (or the string "none") starts from built-in MAST. |
dashboard |
true |
Let integrations launch the localhost dashboard automatically. |
evidence_export |
unset | Optional external snapshot sink for session-end evidence. A .json value is written as that exact file; any other value is treated as a directory receiving one <program_id>.json per program. |
redact_traces |
true |
First-party adapters strip credential-looking substrings (API keys, tokens, cookies) from traces before persistence. Disable only when traces are known clean and exact text matters. |
Learning fields¶
| Field | Default | Purpose |
|---|---|---|
generation_threshold |
5 |
Warm-up trace count before generating a taxonomy from MAST. Raise it if early traces are noisy or unrepresentative. |
generation_stops |
false |
If true, the current task waits for generation to finish; if false, running tasks continue on MAST and the result activates afterwards. |
skip_judge |
false |
Skip Reflection-Judge cleanup of generated taxonomies (structural validation still runs). |
k_init |
10 |
Traces required before the first refinement of an active stored taxonomy. |
k |
20 |
Traces required between later refinements for the same program. |
refinement_stops |
false |
If true, the current task waits for refinement to finish. |
advanced_refinement |
false |
Add one support-judge repair pass during refinement. |
freeze |
false |
Inference-only mode: record traces and evidence but skip generation and refinement. Use for pinned-taxonomy A/B evaluations. |
Hook integrations (Claude Code, Codex) always run generation and refinement
in background workers regardless of generation_stops / refinement_stops:
a hook process is killed at the harness's per-hook timeout, so inline learning
is honored only by the single-LLM and CLI paths that own their process.
See TRACES_AND_LEARNING.md for how these interact.
Gate fields¶
Form failures (unparseable reflections) and substantive repairs draw on separate budgets, so tuning one loop cannot silently disable the other.
| Field | Default | Purpose |
|---|---|---|
repair_rounds |
3 |
Substantive REPAIR_REQUIRED repair opportunities at the final gate before honest unresolved release. |
format_retries |
2 |
Reflection parse/shape failures tolerated per checkpoint cycle before the gate releases. Format re-prompts are targeted: they name the missing elements and pin the previous verdict. |
max_retries |
3 |
Legacy shared knob, accepted indefinitely: maps to repair_rounds when repair_rounds is not set. |
gate_exhaustion_policy |
"raise" |
Single-LLM only. "raise" errors when the repair cap is hit; "release" returns the best answer and records gate_allowed=false (useful for benchmark wrappers). |
Model transport fields¶
Transport is selected by model-id shape; these fields adjust it:
| Field | Default | Purpose |
|---|---|---|
model |
unset | Task-solving model for atlas-single-run (same as its --model flag). Not used by learning calls. |
openai_base_url |
unset | OpenAI-compatible endpoint override; also honored via the OPENAI_BASE_URL environment variable. |
openai_api_key_env |
unset | Name of the environment variable holding the key for that endpoint. Store the variable name, never the value. |
Credential expectations per provider are covered in INSTALLATION.md.
Integration-scoped fields¶
| Field | Default | Purpose |
|---|---|---|
project_dir |
unset | Project directory for the install CLIs (same as --project-dir). |
claude_code |
unset | Claude Code adapter policy. claude_code.built_in_hooks enables/disables built-in events and sets tool matchers; see CLAUDE_CODE.md. |
codex |
unset | Codex adapter policy under codex.hooks; see CODEX.md. |
failure_throttle_calls |
5 |
Claude Code: minimum tool calls between repeated PostToolUseFailure nudges for the same failure. |
failure_recency_seconds |
30 |
Claude Code: minimum seconds between repeated failure nudges. |
recent_activity_messages |
8 |
Single LLM: trajectory-window size (messages) delivered at checkpoints. |
recent_activity_chars |
12000 |
Single LLM: trajectory-window size (characters) delivered at checkpoints. |
The legacy top-level built_in_hooks, custom_hooks, and codex_hooks
fields are still accepted as compatibility aliases for the scoped forms.
Display metadata¶
| Field | Default | Purpose |
|---|---|---|
repo |
auto-discovered | Display-only repository label shown in the picker and dashboard. Never routes taxonomy selection. |
repo_path |
unset | Directory used to auto-discover the display repo label from git metadata. |
Full example¶
{
"version": 1,
"trace_output": "./atlas-program",
"trace_root": "~/.atlas-skill/traces",
"store_dir": "~/.atlas-skill/taxonomies",
"atlas_model": "gpt-5",
"inherit": null,
"generation_threshold": 5,
"generation_stops": false,
"skip_judge": false,
"k_init": 10,
"k": 20,
"refinement_stops": false,
"advanced_refinement": false,
"freeze": false,
"repair_rounds": 3,
"format_retries": 2,
"dashboard": true,
"claude_code": {
"built_in_hooks": {
"SubagentStop": false,
"PostToolUse": ["Bash", "Edit"],
"PostToolUseFailure": {
"enabled": true,
"matchers": ["Bash"]
}
}
}
}
Validate any config with:
atlas-doctor --config atlas.json