Skip to content

Config Keys

The keys you actually change. Curated, not exhaustive — every key with its live/inert status is in the Configuration Reference; the why is in §09 — Configuration.

Resolution in one line

appsettings.json < {Environment}.json < env vars < appsettings.Local.json < SystemSettings (DB, runtime, no restart). So appsettings.Local.json beats environment variables, and a meaningful SystemSettings row beats the file layers.

Secrets live only in gitignored appsettings.Local.json; committed files keep REPLACE_ME_VIA_LOCAL_OVERRIDE.

Most-changed keys

Key Default Layer Controls
ConnectionStrings:DefaultConnection Host=localhost;…;Database=aetherium_refactor_db;… appsettings Postgres connection (set password locally)
Aetherium:Storage:WorkspaceRoot ${AETHERIUM_WORKSPACE_ROOT} → platform default appsettings Workspace root
Aetherium:Storage:GlobalKnowledgePath ${AETHERIUM_KNOWLEDGE_PATH} → platform default appsettings Global knowledge library
WorkspaceRootPath / DefaultProjectPath / GlobalKnowledgePath (empty → file wins) SystemSettings Runtime path overrides
AI_ModelId (unset) SystemSettings Operator-wide default model
AI_WorkerModelId (unset) SystemSettings Non-supervisor worker default
AI_SupervisorModelId falls back to AI_ModelId SystemSettings Layer-2 gap-detection model
AI_VerificationEnabled false SystemSettings Step verifier for teams without a verification block (template block wins)
AI_VerifierModelId falls back to AI_SupervisorModelId → AI_ModelId SystemSettings Judge model for step verification
AI_TrajectoryJudgeModelId falls back to the team's verifier_model_id → AI_SupervisorModelId SystemSettings Judge model for the end-of-run trajectory evaluation
AI_BaseUrl http://localhost:1234 SystemSettings LM Studio chat endpoint
SearXNG_Url (unset → DuckDuckGo) SystemSettings web_search backend
Aetherium:Research:SearchMinIntervalMs 1500 appsettings Minimum spacing between outbound web_search calls, process-wide (clamped 0–30000)
ChromaDb:Endpoint http://localhost:8000 appsettings ChromaDB REST endpoint
ChromaDb:ScoreFloor 0.525 appsettings Lowest cosine similarity a retrieved chunk may have
AI_KnowledgeInjection on SystemSettings false stops knowledge injection into prompts; benchmark mode always stops it
Knowledge_ActiveGeneration 0 SystemSettings Generation of knowledge collections that reads and writes use (aetherium_global_g1, …); flipping back rolls back
Aetherium:KnowledgeIndex:WorkRoot /var/lib/aetherium/kb-rebuild appsettings Records of each index rebuild (export, manifest, report)
Aetherium:KnowledgeIndex:KbRoot /var/lib/aetherium/kb appsettings Promotion candidates and approved domain documents, kept as files
Aetherium:KnowledgeIndex:*Gate 0.9 self · 0.9 known-item · 0.95 overlap · 0.999 fingerprint appsettings Checks a rebuilt generation must pass before it goes live
Container_IdleTimeoutMinutes 60 SystemSettings Idle → stop
Container_DestroyGracePeriodMinutes 30 SystemSettings Stopped → destroyed
Container_CleanupIntervalMinutes 5 SystemSettings Cleanup poll interval
MaintenanceMode false SystemSettings true → 503 on build/create routes
ToolApproval_TimeoutSeconds 300 SystemSettings Restricted-tool approval window
Aetherium:VramOrchestration:Enabled true appsettings Per-run model residency and affinity pins
Aetherium:VramOrchestration:PreemptGraceSeconds 20 appsettings Grace a preempted batch lease gets before its model is unloaded
Aetherium:VramOrchestration:Services (empty) appsettings GPU services (systemd user units) a lease may name; started, budgeted and stopped by the arbiter, kept warm for an optional LingerSeconds after the last lease
Aetherium:VramOrchestration:ProtectedStandardSetSlots ["Secondary"] appsettings Slots whose standard set no lease may evict
Aetherium:VramOrchestration:ServiceStartMaxCelsius 0 (off) code CPU temperature (k10temp Tctl) above which a lease waits to start a GPU service on the Engine's own machine
Aetherium:VramOrchestration:DefaultNodeInstance Worker appsettings Slot a node that names a model but no slot runs on, when that slot holds its model
Aetherium:Tts:BaseUrl http://127.0.0.1:8100/v1 appsettings The voice service tts_render posts to (/audio/speech)
Aetherium:Tts:RefsDir ~/.cache/dnd-models/tts-qwen/refs appsettings Reference clips (<name>.wav + <name>.txt) the voice tools can clone
Aetherium:Tts:DefaultVoice host appsettings Reference voice for a speaker the voice map does not name
Aetherium:Tts:GapSeconds 0.18 appsettings Silence between spoken lines in a rendered MP3
Aetherium:Tts:DesignBaseUrl http://127.0.0.1:8101/v1 appsettings The voice design service that turns a design: … voice into a reference clip
Aetherium:Tts:RelayVoices (empty) appsettings Voice names POST /v1/audio/speech accepts, each mapped to a reference clip under RefsDir
Aetherium:Tts:RelayIdleMinutes 10 appsettings How long the speech relay keeps the voice service running after its last request
AI_InferenceLeaseIdleMinutes 15 SystemSettings Idle window of an interactive inference lease (the /v1 relay)
Aetherium:LMStudio:Instances:<slot>:Backend LmStudio appsettings LlamaServer serves the slot from a llama.cpp llama-server in router mode (context set by the server's preset, not per load)
AI_StepRepairRounds 2 (0–4) SystemSettings Extra rounds after a deliverable-gate failure only, on top of AI_StepRounds
AI_RepetitionRuleArmed false SystemSettings Lets the repetition rule bounce a looping agent; off, it only logs [REP-RULE]
AI_ImageExampleArm unset (arm A) SystemSettings B drops the booster from comfyui_generate's example prompt, for an A/B; unset is the shipped schema
Aetherium:Decision:Enabled / :Shadow false / false appsettings The decision layer's semantic-repetition guard; Shadow asks and logs but never bounces
Aetherium:LMStudio:Instances:<slot>:InteractiveCopies Secondary: gemma-4-e4b-it → gemma-interactive appsettings A second loaded copy that serves interactive relay traffic
Aetherium:LMStudio:Instances:<slot>:Card (unset) appsettings The Aetherium:Gpus:Cards card the slot runs on; its unit is pinned to that card
Aetherium:LMStudio:Instances:<slot>:Machine (unset) appsettings Display only: the machine the Inference page groups the slot under; needed for a slot on another machine reached through a local port forward
Aetherium:LMStudio:Instances:<slot>:RestoreDelaySeconds 0 appsettings Wait after the slot's last lease ends before restoring its standard set; each release restarts it
Aetherium:Gpus:Cards (empty) appsettings The GPUs by name: ROCm Uuid, VulkanDevice for a Vulkan build; Host (SSH destination) and ListenAddress for a card in another machine
Aetherium:Gpus:RemoteSshKey (unset) appsettings Identity file for SSH to a card's Host; that machine forces it to services/aetherium-gpu-node
Aetherium:LMStudio:SlotOrder Primary, Secondary, then by name appsettings Order failover tries alternate slots in, and the relay looks for a model in
Aetherium:RolePlacement:<role> (empty) appsettings {Slot, Pin} for a side role (Verifier, TrajectoryJudge, Embeddings, Compaction, …)
Aetherium:LMStudio:OfflineFallbackSlot (unset) appsettings Slot an unpinned side role runs on while its own slot is known down (last two health probes failed); unset, it stays and fails
Aetherium:Embeddings:ModelId text-embedding-nomic-embed-text-v1.5 appsettings Model id the knowledge index embeds with (a llama-server router needs a preset name); with PrefixScheme it is the index's stamp
Aetherium:Embeddings:RawModelId text-embedding-nomic-embed-text-v1.5 appsettings Model id of the untemplated path lessons use
Aetherium:ImageFinishing:Enabled false code 2K re-render of a Qwen-Image team's images after each Completed run
AI_InstanceAvailabilityCheck true SystemSettings Scheduler instance-availability layer; false disables it without a redeploy
AI_ReasoningEffort (unset → off) SystemSettings low/medium/high/xhigh reasoning on the two planning turns only (worker turns: the template's config.reasoning_effort)
Aetherium:Finishing:AutoTrigger false appsettings true → a build reaching Completed opens a finishing gate for that project (unattended design work on every finished build)
Finishing_DirectorModel / Finishing_DirectorInstance template's pins SystemSettings Model and slot for the finishing team's director and designer
Finishing_WorkerModel / Finishing_WorkerInstance template's pins SystemSettings Model and slot for its researchers and writer; a model without its slot stays on Primary
ModelRegistry:Path built-in default appsettings / env Benchmark model registry; configured-but-missing is fatal at startup
Aetherium:ModelRegistry:FailOnMissing (unset) appsettings Force the registry check on or off

Model resolution

Per-agent model resolves: node model_id → registry routing → AI_WorkerModelId (workers) → team default (AI_ModelId → template team.config.model → loaded model → local-model).

Cloud-prefixed IDs are skipped

A candidate that is empty, "default", or starts with gpt-, claude-, o1-, o3-, gemini-, palm-, command- is skipped by the local-inference path. A stray gpt-4o left in any tier is silently ignored, not dispatched.

Two LM Studio homes (a classic trap)

Chat/routing reads SystemSettings (AI_BaseUrl, LMStudio_MultiInstanceConfig); model-management/VRAM reads the Aetherium:LMStudio:Instances:* appsettings block. They are not synced for Primary and Secondary — set the endpoint you actually chat against in the Settings page. Any other slot's runtime row is built from its registry entry.

Don't bother — inert keys

These look configurable but do nothing today (full list in the Configuration Reference):

  • Aetherium:Cleanup:IdleTimeoutMinutes (and the other timers there) — shadowed by the Container_* SystemSettings rows; change those instead.
  • ChromaDb:DefaultCollection; Gemini:ApiKey. (The Aetherium:Docker:* and Aetherium:Pools:* sections were removed on 2026-09-06; the container-pool and agent-isolation keys followed on 2026-09-07, along with the code behind them.)

No retention on the audit table

The tool-security audit table grows without bound — no config key. Prune it yourself (Commands · backup).