Configuration reference
Where every setting lives, when a change applies, and which Settings surface edits it — the three 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 three configuration tiers, catalogs the keys you actually configure, and closes with the folder layout of an installed product.
The three configuration tiers
| Tier | File | What lives there | When changes apply | Edited by |
|---|---|---|---|---|
| Environment file | app/.env | Secrets and wiring: API keys, database connection, daemon endpoints, harvest credentials | After the affected component restarts | Settings ▸ API Keys · Database · Integrations · Daemons · Project, and Observer ▸ Settings ▸ Proxy |
| Runtime config | config/cc.config.json | Hot runtime knobs: output paths, autostart, control planes, graph backend, fleet limits | Immediately — read fresh on the next operation | Settings ▸ Paths & Outputs · Terminals · Database, and Dashboard ▸ Platform Health |
| Preference stores | per-user application-data directory | UI state and per-view preferences: themes, terminal behavior, session resume | Immediately | The 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:
- 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. - The daemons — each background service reads its keys once, at process start.
- The Settings view — the env-backed groups (API Keys, Database, Integrations, 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
nullor 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.
| Section | What it controls | Read by | Settings surface |
|---|---|---|---|
outputs.* | Where output trees land (see Paths and outputs) | the owning daemon, per operation | Settings ▸ Paths & Outputs |
autostart.* | Which background services launch with the app | the app at launch | Dashboard ▸ Platform Health |
control.* | The agent control-plane enable gates | the control servers, live | Settings ▸ Terminals ▸ Agent control planes |
kg.* | Knowledge-graph backend mode and local server heap | the app and the configuration sync | Settings ▸ Database |
missions.* | Fleet worker cap and mission-lint thresholds | the fleet host, fresh per call | Settings ▸ Terminals ▸ Mission fleet |
account.* | The account server the sign-in flow targets | the sign-in and entitlement flow | none — file-edited (see Account server) |
runtime.* | Child-process supervision | the app when spawning daemons | none — shipped default |
features.* | Release toggles for not-yet-released views — fail-closed: absent means hidden | the app | none — file-edited |
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 Settings groups them. The Applies column tells you what, if anything, must restart.
API keys — Settings ▸ API Keys
| Key | What it does | Applies | Where in Settings |
|---|---|---|---|
GEMINI_API_KEY | Embeddings, knowledge-base ingest, and direct Gemini queries. The free tier works. | restart of the affected daemons + next agent session | API Keys ▸ "Gemini key · embeddings & KB" |
GEMINI_IMAGE_API_KEY | Image generation only. Requires a paid-tier key; the image daemon fails loud when it is missing. Leave blank to run without image generation — the daemon is then skipped at launch. | restart of the image daemon | API Keys ▸ "Gemini key · image generation" |
XAI_API_KEY | Reserved. 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.
| Key | What it does | Applies | Where in Settings |
|---|---|---|---|
kg.backend_mode | local (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 agents | Database ▸ Backend mode |
kg.local_heap_mb | The local graph server's memory ceiling in MB (default 1024). | saved hot; takes effect the next time the local server starts | Database ▸ JVM heap (MB) |
ARCADEDB_URI · ARCADEDB_HTTP_URI · ARCADEDB_USERNAME · ARCADEDB_PASSWORD · ARCADEDB_DATABASE | The external connection profile — used when the backend mode is docker. The password must match the server's root password. | restart of the knowledge-base daemon | Database ▸ 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 / Repair | Database ▸ Provisioned (local) |
Paths and outputs — Settings ▸ Paths & Outputs
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. Whether an override is honored depends on the owning daemon —
and the Settings page badges the rows honestly:
| Key | Output tree | Applies |
|---|---|---|
content_site_root | The intelligence desk's content tree — briefings, reports, roundups. Point it at your site's content folder. | hot — read live on the next dispatch |
products_dist_dir | Built product exports. Set a folder to collect all exports in one place. | hot — read live on the next export |
kg_exports_dir | Knowledge-graph export bundles. Must stay outside documents/ — an override inside it is refused. | hot — read live on the next export |
imagegen_archive_dir | Generated hero and inline images. | on the image daemon's next restart |
observer_reports_dir | Harvested news reports. | not honored yet — the value is stored, but no daemon reads it; wiring ships in a later update |
renders_dir | Video render outputs. | not honored yet — ships in a later update |
social_assets_dir | Social drafts and media assets. | not honored yet — ships in a later update |
The three "not honored yet" rows are disabled and badged exactly that way in Settings. They exist so the config surface is complete; setting them today has no effect.
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.
| Key | Component | Default |
|---|---|---|
OBSERVER_DAEMON_URL | Observer (news harvesting) | http://127.0.0.1:8765 |
ROUTINES_DAEMON_URL | Routines (automation engine; also hosts the products, video, and footage APIs) | http://127.0.0.1:8766 |
KB_DAEMON_URL | Knowledge base | http://127.0.0.1:8767 |
IMAGEGEN_DAEMON_URL | Image generation | http://127.0.0.1:8768 |
VOICE_DAEMON_URL · VOICE_WS_URL | Voice (HTTP + WebSocket, one process) | http://127.0.0.1:8769 · ws://127.0.0.1:8770 |
MEMORY_DAEMON_URL | Shared agent memory (read-only surface for the Memory view) | http://127.0.0.1:8771 |
GATEWAY_URL | Shared MCP gateway — one endpoint that fronts the whole tool stack so agent sessions don't each spawn their own servers | http://127.0.0.1:8772 |
Three related switches on the same page:
| Key | What it does | Applies | Where in Settings |
|---|---|---|---|
GATEWAY_TOKEN | Optional 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-sync | Daemons ▸ gateway fields |
ROUTINES_USE_GATEWAY | Route 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 daemon | Daemons |
CC_MAIN_MCP_TRANSPORT | How 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 launched | Daemons ▸ "Main session MCP transport" |
Terminals and the mission fleet — Settings ▸ Terminals
| Key | What it does | Applies | Where in Settings |
|---|---|---|---|
control.terminal | Enable gate for the terminal control plane — agents driving Command Center terminals. The more powerful surface: it can run shell commands. | immediate, and persists | Terminals ▸ Agent control planes |
control.window | Enable gate for the window control plane — agents arranging windows and views. | immediate, and persists | Terminals ▸ Agent control planes |
missions.maxWorkers | Per-mission cap on concurrently spawned fleet workers. Default 8, clamped 1–64. | hot — read fresh on the very next spawn | Terminals ▸ Mission fleet |
missions.staleDays | Days without timeline activity before an active mission surfaces a stale-mission lint finding. Default 30. | hot — next lint run | Terminals ▸ Mission fleet |
missions.archiveAfterDays | Days a completed mission sits inactive before an archival-due lint finding. Default 28. | hot — next lint run | Terminals ▸ 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.
Autostart — Dashboard ▸ Platform Health
autostart.* controls which background services launch with the app: the local
graph server, the knowledge base, image generation, routines, the observer, and
Voice. 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.
Integrations — Settings ▸ Integrations
All optional; leave any group blank to run without it. Applies after the consuming daemon restarts.
| Group | Keys | What it does |
|---|---|---|
| Email account | EMAIL_ADDRESS · EMAIL_PASSWORD · EMAIL_DISPLAY_NAME · EMAIL_IMAP_HOST / _PORT · EMAIL_SMTP_HOST / _PORT | The email account the platform reads and sends through. Any IMAP/SMTP provider. |
| Newsletter harvesting | NEWSLETTER_IMAP_HOST / _PORT · NEWSLETTER_EMAIL · NEWSLETTER_PASSWORD | A dedicated inbox the observer harvests newsletters from. |
| X API fallback | X_BEARER_TOKEN · X_MONTHLY_READ_BUDGET | Optional official-API fallback for X harvesting, with a monthly read budget (default 100). |
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 in the runtime config retargets the account backend the
desktop sign-in and entitlement flow talks to. Leave it null — that is
the shipped state, and it resolves to the production account server. A non-null
absolute origin is an advanced escape hatch for running a local account server
against an installed build; it wins everywhere the sign-in flow runs. There is
no Settings surface for it — edit the file.
Advanced — shipped defaults you should know exist
| Key | What it does | Shipped state |
|---|---|---|
runtime.supervise_children | Binds every spawned background service to the app's own process, so daemons terminate together with Command Center — including on a crash. | true on installed builds — no orphaned processes |
features.* | Release toggles for views that ship dark. Fail-closed: an absent or null flag means the view does not appear anywhere in the app. | all null |
MEMORY_DEFAULT_PROJECT | The 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 engineHighlights of the documents/ tree — the part that is yours:
| Folder | What 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/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 — and reports a pass/fail table. Run it after any environment-file change that did not behave as expected. The check-by-check reference: Doctor checks.