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
| 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 · Email · Daemons · Project, and Observer ▸ Settings ▸ Proxy |
| Runtime config | config/cc.config.json | Hot runtime knobs: output paths, autostart, control planes, graph backend, scheduling, mail behavior, fleet limits | Immediately — read fresh on the next operation | Settings ▸ Project · Terminals · Doctor · Database, the Routines and Calendar toolbars, Email ▸ Agent, 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, 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
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.
Each section below has its own entry in the key catalog.
| Section | What it controls | Read by | Where you set it |
|---|---|---|---|
outputs.* | Where output trees land | the owning daemon, per operation | Settings ▸ Project |
autostart.* | Which background services launch with the app | the app at launch | Dashboard ▸ Platform Health |
control.* | The agent control-plane enable gates | each plane's own server, live | Settings ▸ Terminals ▸ Agent control planes |
calendar.* | Whether scheduled work fires, and the clock's limits | the routines daemon, per request | The Calendar header (dispatch); file-edited for the limits |
email.* | The mailbox registry, the inbox monitor, and the mail agent's authority | the email daemon, the email tool surface, and the email routine | Settings ▸ Email · Email ▸ Agent |
components.* | Which capabilities Command Center provisions for you | the setup wizard, Doctor, the routines daemon | First-run setup ▸ Components · Settings ▸ Doctor ▸ Components |
source_preference.* | Managed install versus one already on your system | the routines daemon, per resolve | Settings ▸ Doctor ▸ Media |
agent_cli.* | Which agent CLI and model an unattended run inherits | the routines daemon, per dispatch | Routines ▸ Global agent default |
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 |
runtime.* | Child-process supervision | the app when spawning daemons | none — shipped default |
account.* | The account service sign-in targets | the sign-in and entitlement flow | none — 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
| 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. 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 start | 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) |
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:
| Key | Output tree | Applies |
|---|---|---|
content_site_root | The 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_dir | Per-batch harvest digests, the raw feed the intelligence writers read. Default documents/general_reports/observer-reports. | hot — read on the next dispatch |
renders_dir | Video 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_dir | Built 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_dir | Generated hero and inline images — the live image library. Default documents/imagegen/images. | on the image daemon's next restart |
imagegen_raw_archive_dir | The 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_dir | Knowledge-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_dir | Run 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.
| 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, footage, and calendar 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 — the service behind the Memory view, where entries are searched, corrected, and deleted | 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 |
EMAIL_DAEMON_URL | Email — the service behind the mail cockpit's compose, message list, and inbox monitor | http://127.0.0.1:8773 |
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" |
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:
| Key | Off means | Applies |
|---|---|---|
control.window | Agents 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.terminal | Terminal 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.calendar | Agent writes to the schedule are refused; agent reads still answer. | on the next call — saving is the effect |
control.email_send | Sends, replies, and forwards are refused; composing and saving drafts still work. | on the next call — saving is the effect |
control.graph_write | Agent 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
| Key | What it does | Applies | Where in Settings |
|---|---|---|---|
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.
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.
| Key | What it does | Default |
|---|---|---|
calendar.dispatchEnabled | The 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.maxConcurrent | How many dispatched entries may run at once; the rest wait for capacity. Clamped 1–32. | 4 |
calendar.horizonDays | How far ahead occurrences are materialized. Clamped 1–365. | 30 |
calendar.retentionDays | How 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.
| Key | What it does | Applies |
|---|---|---|
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_account | Which 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 account | The 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:
| Key | What it does | Default |
|---|---|---|
email.monitor_enabled | The 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_seconds | Seconds between poll passes. Clamped 15–3600. Set in the same monitor panel. | 60 |
email.agent_autorun | Whether 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_drafts | The 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_accounts | Which 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.
| Key | The capability | Skipping it means |
|---|---|---|
components.python_runtime | The managed Python runtime and the daemon environments | The automation platform — routines, knowledge base, agents, video, mail — cannot start |
components.knowledge_graph | The local graph database behind Cortex, the knowledge base, and memory | Cortex and the knowledge base have no graph to read or write |
components.media_tools | ffmpeg, for audio and video processing | Footage preparation and video rendering cannot process media |
components.video_node | The pinned Node runtime the video engines need | The video engines cannot be installed or run |
components.whisper_stt | Local transcription models shared by footage preparation and Voice | Transcription 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.
| Key | Values | Meaning |
|---|---|---|
source_preference.node · source_preference.ffmpeg | auto (default) · system · managed | auto 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.
| Key | What it does | Default |
|---|---|---|
agent_cli.headless_engine | Which agent CLI an unattended run uses: claude or codex. | claude |
agent_cli.codex_model · agent_cli.codex_effort | Model 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_map | Translates 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.
| Key | Service |
|---|---|
autostart.kg_local | The provisioned-local graph server (local backend mode only) |
autostart.knowledge_base | Knowledge base |
autostart.shared_agent_memory | Shared agent memory |
autostart.imagegen | Image generation |
autostart.routines | Routines |
autostart.observer | Observer |
autostart.voice | Voice |
autostart.mcp_gateway | The shared MCP gateway |
autostart.email |
Newsletter and harvesting keys — Settings ▸ Email
All optional; leave any group blank to run without it. Applies after the consuming daemon restarts.
| Group | Keys | What it does |
|---|---|---|
| Newsletter harvesting (inbound) | NEWSLETTER_IMAP_HOST / _PORT · NEWSLETTER_IMAP_EMAIL · NEWSLETTER_IMAP_PASSWORD | A dedicated inbox the observer polls to read newsletters for ingestion. Separate from your own mailboxes, and unrelated to sending. |
| Newsletter sending | RESEND_API_KEY · RESEND_AUDIENCE_ID · RESEND_FROM_EMAIL | Sending 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 fallback | X_BEARER_TOKEN · X_MONTHLY_READ_BUDGET | Reserved 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
| Key | What it does | Shipped state |
|---|---|---|
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/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.