Skip to content

Configuration (~/.coro/config.json)

Coro persists operator settings in ~/.coro/config.json (override with coro start --config). The Zod schema lives in packages/runner/src/config/local-config.ts.

Dashboard first

Settings in the bundled dashboard is the primary way to edit config. Each section maps to keys below; click Save all changes to write the file. Settings → Advanced → Paths shows the resolved config path and offers Show in Finder / Open folder.

Dashboard locationConfig keys
General → Coach modecoachMode.enabled, coachMode.graduateAfterRuns (read-only counters: totalRuns, lastRunAt, graduatedAt)
General → Coro plan modeintake.mode (ai | form | ask-each-time)
Setup → LLM providerplugins.installed.* (executors), llm.defaultProvider, llm.aliases
Setup → Source controlplugins.installed.github / gitlab / bitbucket, legacy git.*
Setup → Issue trackerplugins.installed.jira / linear / github-issues, legacy tracker.*
Extensions → Pluginsplugins.installed.* (drop-ins), install metadata
Extensions → MCP serversmcpServers, inheritClaudeCodeMcps
Extensions → Guardrailsguardrails.enabled, guardrails.rules[]
Advanced → Pathsintelligence.dir, intelligence.gitRemote, paths.workingDir

No dedicated dashboard UI today (edit JSON or use CLI):

KeysHow to set
tenant.overlay (localDir, explicit gitRemote block)JSON, or use Paths → Intelligence git remote for the common git-remote case
cloud.url, cloud.tokencoro login (/guides/hybrid-mode/)
proposals.routing.strategyJSON
setup.completedAt, setup.skipped[]Written by setup wizard
Loki / Tempo endpointsEnvironment variables on the runner host (/guides/observability/)

coro init bootstraps a starter config.json for scripted installs; day-to-day edits should go through Settings.


paths

FieldMeaningDashboard
workingDirJob sandboxes (working/<jobId>/…)Advanced → Paths → Working directory

Derived defaults also exist at runtime (paths.coroIntelligenceDir, paths.baseLayerDir) inside the in-memory Settings object built during bootstrap—these generally should not be hand-edited in JSON.


intelligence

FieldMeaningDashboard
dirOptional checkout used by solo operators for tenant intelligence authoringAdvanced → Paths → Intelligence directory
gitRemoteWhen tenant.overlay is absent but this is set, the resolver synthesises a gitRemote overlay sourceAdvanced → Paths → Intelligence git remote

tenant

FieldMeaningDashboard
displayNameCosmetic label for solo tenants
overlay.kindnone | localDir | gitRemote | cloudBlob (stub)Partial: use Intelligence git remote for gitRemote; full overlay block is JSON-only

overlay declares where tenant-layer Markdown merges on top of @coro-ai/intelligence-base.


plugins.installed

Map of pluginId → { enabled, config } blobs. Executor plugins (Anthropic, OpenAI, …) store API keys / OAuth mode here; SCM + tracker plugins receive provider credentials validated by each plugin’s configSchema.

Dashboard
Setup → LLM provider, Source control, Issue tracker, and Extensions → Plugins

The runner also accepts top-level legacy git / jira blocks — legacyConfigToPlugins synthesises plugin entries when modern plugins data is missing.


llm

FieldMeaningDashboard
defaultProviderExecutor plugin id used when a workflow phase does not pin provider:Setup → LLM provider
aliasesWorkflow keys such as planning / coding{ provider, model, reasoningEffort? }Setup → LLM provider (aliases panel)

Concrete provider-specific configuration still lives under plugins.installed.<provider>.config.


git

Legacy SCM credential carrier:

FieldMeaningDashboard
providerbitbucket | github | gitlabPrefer Setup → Source control plugin cards
workspaceOrg / Bitbucket workspace slug
usernameService account
tokenPAT (never logged verbatim)

tracker

FieldMeaningDashboard
providernone | jira | github | linearSetup → Issue tracker
jira.*baseUrl, username, apiToken
linear.*apiKey, optional teamKey

guardrails

FieldMeaningDashboard
enabledMaster switchExtensions → Guardrails
rules[]Array of overrides matched by id — see Guardrails↑ (per-rule toggles and thresholds)

mcpServers and inheritClaudeCodeMcps

FieldMeaningDashboard
mcpServersMap of server id → { type: stdio|http|sse, …, allowedTools?, disallowedTools?, enabled? }Extensions → MCP servers (JSON editor)
inheritClaudeCodeMcpsWhen true, merge Claude Code’s own MCP config into every job↑ (toggle)

Reserved id coro is rejected — it would shadow the built-in server.


proposals

FieldMeaningDashboard
routing.strategypath (default) routes .coro/** → repo layer, everything else → tenant; agent forces explicit targetLayer on the tool callJSON only

cloud

FieldMeaningDashboard
urlControl-plane base URLcoro login (no Settings UI)
tokenRunner authentication secret (JWT / pairing token)coro login

Presence of both fields selects hybrid mode (Postgres state + cloud webhooks). Otherwise the runner stays on SQLite + polling.


setup

FieldMeaningDashboard
completedAtISO timestamp when the FTUE wizard finishedSetup wizard
skipped[]Optional deferred steps (llm, scm, tracker)Setup wizard

coachMode

Safer defaults for new operators. The runner increments totalRuns on each job dispatch; when totalRuns >= graduateAfterRuns and coach mode is still enabled, the dashboard shows a graduation prompt.

FieldMeaningDashboard
enabledWhen true, new runs default to Interactive and extra New Run guidance is shown until graduationGeneral → Coach mode
graduateAfterRunsDispatch count before the UI treats the user as graduated (default 5)↑ (implicit default)
totalRunsCumulative dispatches (runner-maintained)
lastRunAtISO timestamp of the most recent dispatch
graduatedAtSet when the user dismisses graduation or disables coach mode

When coach mode is active and intake.mode is unset, the dashboard defaults to Coro plan mode (ai).


intake

Controls which surface Runs → New Run opens by default.

FieldMeaningDashboard
modeai (Coro plan mode chat), form (classic fields), or ask-each-time (chooser on each visit)General → Coro plan mode → Default new-run mode
toolsEnabledWhen true (default), plan mode may call read-only tracker/SCM tools (tracker_get_issue, scm_read_file, …). Never writes.General → Allow read-only lookups

Per-session plan-mode model overrides from the chat picker are not stored here — they live only in browser session storage.


  • ~/.coro/state.db — SQLite job store (local mode)
  • ~/.coro/guardrails/*.mjs — Custom script rules referenced from guardrails.rules

See Dashboard tour → Settings for screenshots of each section.