agenticonsult logoagent i /consultDocs
Reference

Configuration reference

Where every setting lives, when a change applies, and which surface edits it — the configuration tiers, the key catalog, and the install folder map.

Every Command Center setting is a value in a file under your install root (or in your per-user application-data directory). There is no hidden settings database. Which file a setting lives in decides when a change applies — some settings are hot and apply on the next operation, others need the affected component to restart. This page maps the configuration tiers, catalogs the keys you actually configure, and closes with the folder layout of an installed product.

The three configuration tiers

TierFileWhat lives thereWhen changes applyEdited by
Environment fileapp/.envSecrets and wiring: API keys, database connection, daemon endpoints, harvest credentialsAfter the affected component restartsSettings ▸ API Keys · Database · Email · Daemons · Project, and Observer ▸ Settings ▸ Proxy
Runtime configconfig/cc.config.jsonHot runtime knobs: output paths, autostart, control planes, graph backend, scheduling, mail behavior, fleet limitsImmediately — read fresh on the next operationSettings ▸ Project · Terminals · Doctor · Database, the Routines and Calendar toolbars, Email ▸ Agent, Dashboard ▸ Platform Health
Preference storesper-user application-data directoryUI state and per-view preferences: themes, terminal behavior, session resumeImmediatelyThe view or dialog that owns the preference

app/.env — keys and wiring (restart-bound)

The environment file is the home of everything secret or structural: API keys, the graph-database connection, daemon endpoints and ports, and optional harvest credentials. The annotated template ships next to it as app/.env.example; the live file is local to your machine and its values never leave it — Settings panels only ever report whether a secret is set.

Three consumers read this file:

  1. The configuration sync — generates the install root's .mcp.json (the tooling manifest every agent session loads) from the environment file. Saving from any Settings panel re-runs it automatically.
  2. The daemons — each background service reads its keys once, at process start.
  3. The Settings view — the env-backed groups (API Keys, Database, Email, Daemons, Project) read and write the file directly.

Because every consumer reads it at startup, every change here is restart-bound: after a save, restart the affected daemon (Dashboard ▸ Platform Health) — running agent sessions pick the change up on their next launch. This is by design; anything that must apply live lives in the runtime config instead.

Generated files — never hand-edit. .mcp.json (and .mcp.http.json) at the install root are written by the configuration sync from the environment file. Direct edits are overwritten on the next save. To change what they contain, change the environment file.

config/cc.config.json — hot runtime settings

The runtime config lives at the install root under config/, deliberately outside the app tree. It is created from a shipped template on first run and never overwritten afterward. The app and the daemons read it lazily — per operation, not at boot — so a change applies on the very next operation, with no restart and no sync step.

Its contract keeps it safe to edit by hand:

  • Every value is optional. A null or absent key means the built-in default — an untouched file is stock behavior exactly.
  • Unknown keys pass through. A hand-added key is never dropped by a Settings save.
  • Secrets and wiring do not belong here — they stay in the environment file.

Each section below has its own entry in the key catalog.

SectionWhat it controlsRead byWhere you set it
outputs.*Where output trees landthe owning daemon, per operationSettings ▸ Project
autostart.*Which background services launch with the appthe app at launchDashboard ▸ Platform Health
control.*The agent control-plane enable gateseach plane's own server, liveSettings ▸ Terminals ▸ Agent control planes
calendar.*Whether scheduled work fires, and the clock's limitsthe routines daemon, per requestThe Calendar header (dispatch); file-edited for the limits
email.*The mailbox registry, the inbox monitor, and the mail agent's authoritythe email daemon, the email tool surface, and the email routineSettings ▸ Email · Email ▸ Agent
components.*Which capabilities Command Center provisions for youthe setup wizard, Doctor, the routines daemonFirst-run setup ▸ Components · Settings ▸ Doctor ▸ Components
source_preference.*Managed install versus one already on your systemthe routines daemon, per resolveSettings ▸ Doctor ▸ Media
agent_cli.*Which agent CLI and model an unattended run inheritsthe routines daemon, per dispatchRoutines ▸ Global agent default
kg.*Knowledge-graph backend mode and local server heapthe app and the configuration syncSettings ▸ Database
missions.*Fleet worker cap and mission-lint thresholdsthe fleet host, fresh per callSettings ▸ Terminals ▸ Mission fleet
runtime.*Child-process supervisionthe app when spawning daemonsnone — shipped default
account.*The account service sign-in targetsthe sign-in and entitlement flownone — leave it null

One section is read by the platform but not written into the shipped template: calendar. Absent means the defaults below, and you add the block by hand only if you want to change them.

Preference stores — per-view UI state

Per-view preferences — the UI theme, terminal pane behavior, session-resume switches, activity-log retention — live in small per-user files in your operating system's application-data directory, outside the install root. They apply immediately, persist across restarts, and are per-machine. You never edit these files directly; the owning view writes them (Settings ▸ Themes, Settings ▸ Terminals, the New Workspace dialog, and so on).

One note on precedence: for any value that is backed by the environment file, the environment file is authoritative — the app re-reads it at every launch. Preference stores only hold state that has no environment-file counterpart.

Key catalog

The curated list — the settings a buyer actually configures, grouped the way the product groups them. The Applies column tells you what, if anything, must restart.

API keys — Settings ▸ API Keys

KeyWhat it doesAppliesWhere in Settings
GEMINI_API_KEYEmbeddings, knowledge-base ingest, and direct Gemini queries. The free tier works.restart of the affected daemons + next agent sessionAPI Keys ▸ "Gemini key · embeddings & KB"
GEMINI_IMAGE_API_KEYImage generation only. Requires a paid-tier key. Leave it blank to run without image generation: the image daemon still starts and reports itself as unconfigured, every non-generating surface (the archive, settings, generation history) keeps working, and only generation is unavailable.restart of the image daemon — it reads the key once, at startAPI Keys ▸ "Gemini key · image generation"
XAI_API_KEYReserved. The Voice assistant authenticates via OAuth, so this key is normally unused.—API Keys ▸ "xAI API key"

The Gemini model and embedding identifiers (EMBED_MODEL, LLM_MODEL, GEMINI_MODEL, EMBED_DIM) also live in the environment file. The shipped defaults are correct; change them only if you know a newer model you want and accept re-embedding consequences.

Knowledge-graph backend — Settings ▸ Database

The knowledge graph runs on ArcadeDB in one of two backend modes. The mode itself is a hot runtime-config value; the connection profiles are environment-file values.

KeyWhat it doesAppliesWhere in Settings
kg.backend_modelocal (the provisioned server the app runs itself, no Docker) or docker (any external instance you point it at).hot — "Apply switch" repoints the app immediately; restart the knowledge-base daemon and running agent sessions to carry the switch to agentsDatabase ▸ Backend mode
kg.local_heap_mbThe local graph server's memory ceiling in MB (default 1024).saved hot; takes effect the next time the local server startsDatabase ▸ JVM heap (MB)
ARCADEDB_URI · ARCADEDB_HTTP_URI · ARCADEDB_USERNAME · ARCADEDB_PASSWORD · ARCADEDB_DATABASEThe external connection profile — used when the backend mode is docker. The password must match the server's root password.restart of the knowledge-base daemonDatabase ▸ the connection fields (External mode)
CC_KG_LOCAL_* (server dir, ports, username, password, database)The provisioned-local profile. Fully installer-managed: Settings ▸ Database ▸ Install fills every value, and the password is auto-generated per machine. You normally never touch these.managed by Install / RepairDatabase ▸ Provisioned (local)

The two profiles share an HTTP port (2480) but not a database protocol port: the provisioned-local server listens on 7687, and the external profile ships pointed at 7688 so it cannot collide with an unrelated graph database on the conventional port. An unqualified "the database port" is the most common way to get a connection refused from a server that is running perfectly.

Paths and outputs — Settings ▸ Project

Output-tree relocations live in the runtime config (outputs.*). Blank means the default folder under the install root; set an absolute path to relocate that output tree, including onto another drive. The Settings rows badge how each one is picked up:

KeyOutput treeApplies
content_site_rootThe intelligence desk's content tree — briefings, reports, roundups. Point it at your site's content folder. Default content/observer-news, and this one is project-relative.hot — read on the next dispatch
observer_reports_dirPer-batch harvest digests, the raw feed the intelligence writers read. Default documents/general_reports/observer-reports.hot — read on the next dispatch
renders_dirVideo render outputs and their per-render sidecars. Default remotion/renders; the render-job history stays there even when you relocate the media.hot — read on the next render
products_dist_dirBuilt product exports. Set a folder to collect every export in one place; blank keeps each product's own export folder.hot — read on the next export
imagegen_archive_dirGenerated hero and inline images — the live image library. Default documents/imagegen/images.on the image daemon's next restart
imagegen_raw_archive_dirThe full-resolution originals kept before compression. The largest tree the image pipeline produces and never pruned, so a good candidate for another drive — and also the asset library the cover, video-brief, and composition pickers browse. Default imagegen_png_archive.hot — read on the next generation
kg_exports_dirKnowledge-graph export bundles. Must stay outside documents/ — an override inside it is refused, so exports are never re-ingested.hot — read on the next export
email_reports_dirRun reports from the mail agent, listed in Email ▸ Email Reports. Default documents/general_reports/email_reports.hot — read on the next run

Two rules worth knowing before you relocate anything. Keep a tree that you want searchable inside documents/ — the knowledge graph walks that folder, and a tree moved outside it simply stops appearing there. And stateful data deliberately does not move with its output: the render-job history, for instance, stays in the project tree even when the media it describes lives on another disk.

Daemon endpoints and agent transport — Settings ▸ Daemons

Each background service derives its port from its own URL key, and the app resolves every call through the same key — change a URL and client and server move together. The host stays 127.0.0.1 (these are local child processes); the port is the knob. All changes apply after the affected daemon restarts.

KeyComponentDefault
OBSERVER_DAEMON_URLObserver (news harvesting)http://127.0.0.1:8765
ROUTINES_DAEMON_URLRoutines (automation engine; also hosts the products, video, footage, and calendar APIs)http://127.0.0.1:8766
KB_DAEMON_URLKnowledge basehttp://127.0.0.1:8767
IMAGEGEN_DAEMON_URLImage generationhttp://127.0.0.1:8768
VOICE_DAEMON_URL · VOICE_WS_URLVoice (HTTP + WebSocket, one process)http://127.0.0.1:8769 · ws://127.0.0.1:8770
MEMORY_DAEMON_URLShared agent memory — the service behind the Memory view, where entries are searched, corrected, and deletedhttp://127.0.0.1:8771
GATEWAY_URLShared MCP gateway — one endpoint that fronts the whole tool stack so agent sessions don't each spawn their own servershttp://127.0.0.1:8772
EMAIL_DAEMON_URLEmail — the service behind the mail cockpit's compose, message list, and inbox monitorhttp://127.0.0.1:8773

Three related switches on the same page:

KeyWhat it doesAppliesWhere in Settings
GATEWAY_TOKENOptional gateway hardening. Blank keeps it open on loopback like every other local service; set a long random value to require a bearer token.restart + re-syncDaemons ▸ gateway fields
ROUTINES_USE_GATEWAYRoute routine dispatches through the shared gateway (default on). Health-gated — a down gateway falls back automatically, so it never strands a routine.restart of the routines daemonDaemons
CC_MAIN_MCP_TRANSPORTHow app-launched agent terminals reach their tools: stdio (each session spawns its own servers — the default) or gateway (share the one gateway stack, with automatic fallback at launch).next agent terminal launchedDaemons ▸ "Main session MCP transport"

Agent control planes — Settings ▸ Terminals ▸ Agent control planes

One switch per plane, each answering a single question about what agents may do unattended. Every plane is on unless you turn it off, and every plane fails open: an unreadable config reads as on, so a stop is always something you turned on rather than something that arrived by accident. The model behind these switches — what a plane governs, what it records, and how it differs from your subscription — is Autonomy and controls. The keys:

KeyOff meansApplies
control.windowAgents can no longer navigate views or place the app's windows.immediately, and the stored value re-seeds the plane at the next launch
control.terminalTerminal tools are refused; agent-spawned sessions and fleets cannot launch. This is the most powerful plane — it can run shell commands.immediately, and the stored value re-seeds the plane at the next launch
control.calendarAgent writes to the schedule are refused; agent reads still answer.on the next call — saving is the effect
control.email_sendSends, replies, and forwards are refused; composing and saving drafts still work.on the next call — saving is the effect
control.graph_writeAgent mutations of the knowledge graph are refused; graph reads still answer.on the next call — saving is the effect

The first two are held in memory by the servers that enforce them, which is why the switch acts immediately and the file's job is to remember the choice for next launch. The other three are read from the file on every call, so for those persisting the value is the live effect — including when you edit the file by hand.

control.email_send also stops your own composer. It is the one plane that is not agent-only: your Send does not go through the agent tool surface, but it does go through the same mail client underneath, and the stop lives inside that client. While the switch is off, nothing leaves this machine by mail — agent or human. If your own Send stops working while drafts still save and reading is fine, check this key first.

Terminals and the mission fleet — Settings ▸ Terminals

KeyWhat it doesAppliesWhere in Settings
missions.maxWorkersPer-mission cap on concurrently spawned fleet workers. Default 8, clamped 1–64.hot — read fresh on the very next spawnTerminals ▸ Mission fleet
missions.staleDaysDays without timeline activity before an active mission surfaces a stale-mission lint finding. Default 30.hot — next lint runTerminals ▸ Mission fleet
missions.archiveAfterDaysDays a completed mission sits inactive before an archival-due lint finding. Default 28.hot — next lint runTerminals ▸ Mission fleet

The remaining switches on this page are preference-store values (hot, per-machine): Auto-resume on restart and Keep agents warm (session resume), and the pane drag-to-reorder behavior. The two per-spawn agent toggles — skip permission prompts and auto-trust new folders — live in the New Workspace dialog, not in Settings.

Calendar — the Calendar header, and the file

The scheduling clock reads these on every request, so a hand edit applies to the next sweep. Only the first has a control in the app; the rest are file-edited, and the section is absent from the shipped template, so add it if you want to change them.

KeyWhat it doesDefault
calendar.dispatchEnabledThe master arm switch. Off, the clock still keeps the board honest — it materializes upcoming occurrences and marks what was missed — but fires nothing. The Calendar header reads Armed or Dispatch paused, and clicking it writes this key.on
calendar.maxConcurrentHow many dispatched entries may run at once; the rest wait for capacity. Clamped 1–32.4
calendar.horizonDaysHow far ahead occurrences are materialized. Clamped 1–365.30
calendar.retentionDaysHow long finished occurrences are kept, so a look back at last quarter is not a hole. Clamped 30–3650.400

Whether anything fires and whether agents may write to the schedule are different questions with different switches: calendar.dispatchEnabled is the first, control.calendar above is the second, and neither implies the other.

Email — Settings ▸ Email and Email ▸ Agent

Mail is configured in two halves, on purpose. The account registry — who you are, which hosts, which mailboxes are enabled — is a hot runtime-config value you edit in Settings ▸ Email. The passwords are environment-file values: each registry entry names the environment key that holds its password rather than carrying the password itself.

KeyWhat it doesApplies
email.accounts[]The mailbox registry: id, label, address, display name, IMAP and SMTP host and port, enabled, and password_env — the environment key holding that account's password. An enabled account whose password does not resolve is treated as disabled at run time rather than failing.hot for the registry; the password itself is restart-bound
email.default_accountWhich account id is used when a caller names none. Absent means the first enabled account.hot
EMAIL_PASSWORD · EMAIL_SUPPORT_PASSWORD · one key per further accountThe passwords the registry entries point at, in the environment file. The EMAIL_ADDRESS / host / port keys beside them are a single-account fallback used only when no registry exists.restart

The switches that decide how much the mail agent does on its own live in the same section, and their controls are in the Email view:

KeyWhat it doesDefault
email.monitor_enabledThe always-on inbox watcher. It is inert until a mailbox is actually connected — with no working account the service reports that it is waiting for one rather than erroring. Switch: the monitor control in the Email tab bar, which also shows its status and last error.on
email.monitor_poll_secondsSeconds between poll passes. Clamped 15–3600. Set in the same monitor panel.60
email.agent_autorunWhether newly queued mail dispatches the mail agent automatically (debounced). That dispatch spends agent tokens, so turn it off to work the queue by hand. Switch: Email ▸ Agent.on
email.auto_approve_draftsThe standing authorization. On, a reply-disposition draft that passed the agent's own confidence gate sends immediately instead of waiting for you. Everything else — replies needing more information, anything classified human-only or personal, forwards, flagged senders — still takes the per-message path. Switch: the Auto-approve toggle on Email ▸ Agent, which is the default each mail routine's own Auto-send switch can override.off
email.agent_accountsWhich accounts the mail agent works through when it processes the queue. Absent or empty means all of them; a dispatch that names an account always proceeds on that one.all

auto_approve_drafts is the one flag in this section that ships off, and deliberately: letting an agent answer a customer unattended is a decision you make, not one you inherit. control.email_send above sits over all of it as the master stop.

Components and install sources — Settings ▸ Doctor

components.* is your consent for what Command Center sets up on your machine. The first-run setup step and Settings ▸ Doctor ▸ Components are two views of this one section; every key defaults to enabled, and only an explicit false opts out.

KeyThe capabilitySkipping it means
components.python_runtimeThe managed Python runtime and the daemon environmentsThe automation platform — routines, knowledge base, agents, video, mail — cannot start
components.knowledge_graphThe local graph database behind Cortex, the knowledge base, and memoryCortex and the knowledge base have no graph to read or write
components.media_toolsffmpeg, for audio and video processingFootage preparation and video rendering cannot process media
components.video_nodeThe pinned Node runtime the video engines needThe video engines cannot be installed or run
components.whisper_sttLocal transcription models shared by footage preparation and VoiceTranscription falls back to a cloud provider, or is unavailable

An opt-out suppresses automatic provisioning only. An explicit Install in Doctor always proceeds and turns the flag back on — asking for the install is the act of enabling it — and opting out never removes something already installed.

source_preference.* answers the neighbouring question: when Command Center has both its own managed copy and one already on your system, which wins.

KeyValuesMeaning
source_preference.node · source_preference.ffmpegauto (default) · system · managedauto prefers your system copy once its major version meets the version Command Center pins, and falls back to the managed copy when the system version cannot be read. system and managed pin the answer regardless of version.

It only decides between installs that both exist — with one present, that one is used whatever you set. Both are hot: the next resolve re-decides, no restart. Set them from the Prefer control on the Node and ffmpeg rows in Settings ▸ Doctor ▸ Media.

Agent CLI defaults — Routines ▸ Global agent default

agent_cli.* is the install-wide default for unattended runs — routines, the Calendar's headless dispatches, harvest fan-out, the intelligence writers. Precedence, most specific first: a per-dispatch override, then the routine's own declaration, then this section, then the built-in default.

KeyWhat it doesDefault
agent_cli.headless_engineWhich agent CLI an unattended run uses: claude or codex.claude
agent_cli.codex_model · agent_cli.codex_effortModel and reasoning effort for the alternative CLI, kept separate from the Claude model because the two vocabularies do not overlap — switching engines preserves both selections instead of destroying one. Names are passed through, never checked against a fixed list: what is available depends on your installed CLI and the plan it is signed in to.the CLI's own default
agent_cli.model_mapTranslates capability tiers across the two vocabularies, so the split you already have between workhorse and deep-reasoning routines survives an engine switch. A tier with no row simply lets the CLI pick.empty

Saving from the Routines toolbar writes this one file and rewrites no routine definition, so switching back is exactly reversible. Choosing the alternative CLI requires it installed, signed in, and synced; a dispatch that cannot satisfy that is refused with a stated reason rather than run ungrounded.

Autostart — Dashboard ▸ Platform Health

autostart.* controls which background services launch with the app. The default is on for everything — a fresh install starts ready. Flip a service off from its Platform Health toggle; the change applies at the next app launch.

KeyService
autostart.kg_localThe provisioned-local graph server (local backend mode only)
autostart.knowledge_baseKnowledge base
autostart.shared_agent_memoryShared agent memory
autostart.imagegenImage generation
autostart.routinesRoutines
autostart.observerObserver
autostart.voiceVoice
autostart.mcp_gatewayThe shared MCP gateway
autostart.emailEmail

Newsletter and harvesting keys — Settings ▸ Email

All optional; leave any group blank to run without it. Applies after the consuming daemon restarts.

GroupKeysWhat it does
Newsletter harvesting (inbound)NEWSLETTER_IMAP_HOST / _PORT · NEWSLETTER_IMAP_EMAIL · NEWSLETTER_IMAP_PASSWORDA dedicated inbox the observer polls to read newsletters for ingestion. Separate from your own mailboxes, and unrelated to sending.
Newsletter sendingRESEND_API_KEY · RESEND_AUDIENCE_ID · RESEND_FROM_EMAILSending your own newsletter as a bulk broadcast through Resend, an account you bring. The From address must be on a domain you have verified there. Blank disables it: the Send action stays visible and reports that it is not configured.
X API fallbackX_BEARER_TOKEN · X_MONTHLY_READ_BUDGETReserved and surfaced here for a future re-enable. Inbound X harvesting currently runs entirely through the observer's own path, which needs no key and has no rate limit.

The harvesting inbox has two accepted spellings: the panel writes NEWSLETTER_IMAP_EMAIL and NEWSLETTER_IMAP_PASSWORD, while the environment template still lists the earlier NEWSLETTER_EMAIL and NEWSLETTER_PASSWORD. Both are read, so a file written either way keeps working.

Proxy — Observer ▸ Settings ▸ Proxy

The observer's residential-proxy credentials (PROXY_POOL_USER, PROXY_POOL_PASS, PROXY_ROTATING_URL) are environment-file values, but you configure them from the Observer view's own Settings panel, not the global Settings — it includes a provider preset, a connection test, and the transport toggles. Full setup, provider formats, and expectations: BYO proxy setup. Changes apply after the observer daemon restarts.

Project root — Settings ▸ Project

The active project directory — the workspace Command Center operates on. Set it with Settings ▸ Project ▸ Browse; it syncs to the file-access allowlist and every file-backed view, and new terminals open there. The optional PROJECT_ROOT environment key overrides the automatic resolution; leave it blank on a normal install.

Account server

account.base_url names the account service the desktop sign-in and entitlement flow talks to. Leave it null — that is the shipped state.

On an installed build the key has no effect: sign-in and entitlement always resolve to the production account service, and an override written into the file by hand is ignored. It exists for development builds of the app itself. There is no Settings surface for it, and nothing about a normal install requires one.

Advanced — shipped defaults you should know exist

KeyWhat it doesShipped state
MEMORY_DEFAULT_PROJECTThe project stamp written on new shared-memory entries. Blank defaults to the workspace folder name.blank

The folder layout

The buyer's mental map of an installed product — what lives where under the install root. Depth on the documents/ workspace itself is in Your workspace and documents.

<install root>/
├── CLAUDE.md            the operating contract — every agent session reads it first
├── .claude/             the agent control plane
│   ├── agents/          agent definitions
│   ├── skills/          skill packages
│   ├── protocols/       the doctrine corpus (described, not reproduced, in this manual)
│   └── routines/        routine definitions
├── mcp-servers/         the MCP servers and background daemons
├── app/                 the desktop application
│   ├── .env             ★ keys + wiring (the environment file)
│   └── .env.example     the annotated template
├── config/
│   └── cc.config.json   ★ hot runtime settings (created on first run)
├── .mcp.json            generated agent-tooling manifest — never hand-edit
├── documents/           your working tree: reports, missions, news, context artifacts
├── arcadedb/            the provisioned-local graph server home (server · runtime · data)
├── remotion/            the programmatic video engine
└── hyperframes/         the HTML-first video engine

Highlights of the documents/ tree — the part that is yours:

FolderWhat accumulates there
documents/general_reports/Agent-written reports, research, and the per-mission working folders
documents/grand-blackboard/The standing strategic directives and the missions log
documents/context-artifacts/Context artifacts — the curated grounding notes for agent sessions
documents/news_harvest/Harvested news items and the observer's index
documents/schedules/Calendar dispatch briefs, the reports scheduled runs write, and the calendar audit log
documents/terminal-workspaces/Terminal workspace state and the agent-control audit log
documents/outside_sources/Files you bring in from outside — PDFs, data, reference material

Two things live outside the install root, in your per-user application-data directory: the app's window preferences and secrets mirror, and the per-view preference stores (theme, terminal behavior, session resume). They are per-machine by design and move with your user profile, not the install.

Verifying a configuration

Settings ▸ Doctor runs the readiness checks — environment file present, every placeholder resolved, tool interpreters on disk, the graph database reachable, each control plane's current state — and reports a pass/fail table with a fix action on the rows that have one. Run it after any change that did not behave as expected. The check-by-check reference: Doctor checks.

On this page