Reference

Configuration reference

Every field of control-center.yaml, with its type, default and meaning. The Mac app generates this file for each project; you can also write it yourself.

The file#

Everything project-specific is configuration in one YAML file, control-center.yaml. The Mac app uses the file in your repository if one exists and points at it, or generates a private one in its own data. From source, acc looks for --config, then ACC_CONFIG, then control-center.yaml or control-center.yml in the current folder.

A minimal configuration:

project:
  name: example-app
  repo: ~/code/example-app
  checks: { test: "npm test" }
  check_runtime: { mode: docker, endpoint: unix:///var/run/docker.sock, image: example-app-checks:local }
tracker: { type: local }
agents:
  - { id: claude, name: "Claude Code", role: engineer, adapter: claude-headless }

The fully commented example is examples/control-center.yaml. Unknown or invalid values are reported with their path, for example agents.0.metered_opt_in: …, and the daemon does not start until they are fixed.

Top level#

KeyRequiredSection
projectyesproject
agentsyes, at least oneagents
trackerno, default localtracker
import_sourcesnoimport_sources
policiesnopolicies
knowledgenoknowledge
graphifynographify
code_hostnocode_host
infranoinfra
servernoserver
routing, workflownoReserved

project#

FieldTypeDefaultMeaning
namestringrequiredDisplay name, also the default Docker Compose project name
repopathrequiredThe git repository. ~ is expanded; a relative path resolves from the configuration file's folder.
docker_projectstringnameCompose project name, if different
integration_branchstringintegrationWhere agent branches merge. Created from your production or first protected branch if missing. Must not be protected.
protected_brancheslist[main]Pushes are blocked by a per-worktree pre-push hook
production_branchstringnoneThe branch releases go to
checksmap of name → command{}Commands the engine can run against committed source
required_checkslistall checksThe checks the engine re-runs after every run and at every merge
check_runtimeobjectnoneWhere checks run; see below. Without it, checks are unavailable and merge gates stay closed.
categoriesmap of category → labels{}Issue labels that put an issue in a quality-floor category, e.g. schema_security: [schema, security, migration]
release_gateslist[]Reserved; validated but not used yet

check_runtime#

mode: docker runs checks offline in a local container. See Project checks in Docker.

FieldTypeDefaultLimits
modedockerrequired
endpointstringrequiredA local Unix socket: unix:///…
imagestringrequiredAn installed image; resolved to its immutable ID
binaryabsolute pathdocker on PATHPins the Docker CLI
cpusnumber10.1 to 8
memory_mbinteger51264 to 8,192
pidsinteger12816 to 512
workspace_mbinteger102464 to 4,096
timeout_secondsinteger9001 to 3,600

mode: host-fixture with an absolute fixture_repo exists only for the disposable demo and tests. It also requires an opt-in marker in that repository's Git folder. Never use it for a real project.

agents#

A list of agents. Each id must be unique.

FieldTypeDefaultMeaning
idstringrequiredLowercase letters, digits and dashes, up to 32 characters
namestringrequiredDisplay name
roleenumrequiredlead, engineer, reviewer, qa, researcher
adapterenumrequiredclaude-headless, codex-cli, cursor-agent-cli, opencode-server, generic-cli, relay
providerenumsubscriptionModel source: subscription, anthropic-api, openai-api, cursor-api, openrouter, ollama, ollama-cloud, lmstudio
billingenumfrom providersubscription, metered or local
metered_opt_inbooleanfalseExplicit per-agent consent to per-token billing. Required by API-key providers and billing: metered.
on_demandbooleanfalseAllows paid overage. Requires metered_opt_in.
budget_usd_per_daynumbernoneDaily stop threshold on recorded usage
pricing{ input_per_mtok, output_per_mtok }nonePrices per million tokens, for estimates when the provider reports no cost
base_urlURLprovider defaultEndpoint override. Local servers must be http://127.0.0.1, localhost or [::1] without credentials; the Ollama cloud API route only accepts https://ollama.com.
ollama_routedaemon or apidaemonollama-cloud only: a signed-in local Ollama, or the cloud API with a Keychain key
wire_apiresponses or chatresponsesCodex wire protocol for OpenRouter
enabledbooleantruefalse saves a draft that is never probed or dispatched
modenormal or coordinator-onlynormalCoordinators never take code-writing work
modelstringnewestnewest, or a literal model id
model_familystringnoneLimits newest, e.g. opus
allowed_modelslistnoneModels this agent may use
effortenumnonelow, medium, high, xhigh, max
concurrencyinteger11 to 8 simultaneous runs
binaryabsolute pathautoPins one copy of the vendor CLI
command, argsstring, listnonegeneric-cli only. args may use {prompt}, {model}, {cwd}, {effort}.
stdinprompt or nonepromptgeneric-cli: write the prompt to standard input when no argument holds it
allow_shellbooleantrueShell commands without per-command approval
auto_approve_commandslist[]Extra shell prefixes auto-approved for agents that route approvals here
instructionsstringemptyUp to 4,000 characters added to every assignment
skillslist[]Up to 24 published skill ids
subscription_groupstringnoneAgents sharing one of your subscriptions
subscription, vendorstringnoneLabels shown in the UI, e.g. Claude Max
surfaceenumclicli, desktop-app, web-app, ide

Which harness runs which provider#

ProviderHarnesses (first is the default)
subscriptionclaude-headless, codex-cli, cursor-agent-cli, generic-cli, relay
anthropic-apiopencode-server, claude-headless
openai-apiopencode-server, codex-cli
cursor-apicursor-agent-cli
openrouteropencode-server, codex-cli
ollamaopencode-server, codex-cli
ollama-cloudopencode-server
lmstudioopencode-server, codex-cli (currently blocked)

Models ending in -cloud or :cloud run on Ollama's servers and must use provider: ollama-cloud.

tracker#

TypeFields
localkey_prefix (default LOC)
githubrepo (owner/name, required), live (false), poll_seconds (60, minimum 10), label_prefix (acc:), gh_binary
linearteam (required), project, live (false), poll_seconds (60), state_names (category → exact state name), api_url

Outbound trackers do nothing until live: true. See Trackers.

import_sources#

A list of read-only issue sources for Import issues. Each has id (lowercase, digits, dashes), name, type (github or linear), enabled (false), and repo for GitHub or team (and optional project) for Linear.

policies#

FieldTypeDefaultMeaning
zero_extra_spendbooleantrueNever fall back to paid usage. Cannot be removed in the app's settings editor.
newest_model_rulebooleantruePre-flight requires the newest eligible model
quality_floormap{}Category → minimum model class, e.g. code: "sonnet-class high"
model_classeslist of { class, pattern }built-in heuristicsOrdered patterns that classify model ids; first match wins
allowed_models, denied_modelslistnone, []Project-wide model allow and deny lists
require_approvallistpush_protected, deploy, prod_db_write, migration_apply, publish, send_messageActions that always come to you
redact_envlist[]Environment variable names whose values are redacted everywhere, e.g. DATABASE_URL
stall.no_event_minutesnumber10Stall alert after this long without run events
stall.approval_pending_minutesnumber15Alert when an approval waits this long
idle_alert_minutesnumber5Alert when an agent idles this long with work queued
auto_dispatch_nextbooleantrueStart the next queued item when Now finishes
rulesmap of rule → booleanall onauto_refill, stall_detection, failure_retry, usage_limit, handoff_enforcement, infra_watch
quiet_hours{ start, end }noneHold notifications during these hours
privacy.strict_mcpbooleantrueKeep your personal MCP servers out of agent runs
accounts.modepersonal or api-keys-onlypersonalSee Personal use or API keys only
accounts.terms_max_age_daysinteger90Re-confirm own-account use this often (1 to 365)
accounts.api_key_rotation_daysinteger90Remind to rotate stored keys (1 to 730)

knowledge#

Optional. Connects an Obsidian vault or Markdown folder for shared notes and One Ask.

FieldTypeDefaultMeaning
vaultpathrequiredThe vault or Markdown folder
foldervault-relative pathAgent Control CenterThe folder One Connect owns; each project gets a subfolder
context_folderslist[]Up to 32 extra folders agents may read. Nothing else is read.
obsidian_cliauto, on, offautoUse the official Obsidian CLI for search when Obsidian is running
obsidian_binary, vault_namestringautoOverride the CLI path and vault name
write.contract, write.brief, write.issues, write.handoffs, write.decisionsbooleantrueWhich notes are written
search.semanticbooleanfalseLocal semantic search
search.endpointURLhttp://127.0.0.1:11434Must be http://127.0.0.1 with no credentials or path
search.embedding_modelstringembeddinggemmaAn installed embedding model
search.answer_modelstringnoneAn installed local model for plain-language answers
search.budget_charsinteger6000Source budget per answer, 1,500 to 12,000

graphify#

FieldTypeDefaultMeaning
enabledbooleantrueBuild the code graph when Graphify is installed
binarypathgraphify on PATHPins the Graphify executable
auto_updatebooleantrueRebuild when the integration branch moves (AST only, no cost)
semanticbooleanfalseLLM extraction. Uses a paid API and requires semantic_opt_in: true.
semantic_opt_in, semantic_backendboolean, stringfalse, noneConsent and backend for semantic extraction
budgetinteger1500Token budget for graph queries, 100 to 20,000
publish_reportbooleantrueCopy the graph report into the vault

Dictionary's own intake always uses AST extraction with LLM keys stripped, whatever semantic says.

code_host#

Optional, read-only. One of:

ProviderFields
githubrepo (owner/name)
gitlabproject (id or path)

Both accept activated (false), host, scopes (an activated connection needs a host and at least one scope), poll_seconds (15 to 300), finding_issues (manual or rule), an optional webhook (secret_account: github-webhook or gitlab-webhook; max_skew_seconds; replay_window_seconds) and fixture_base (a loopback URL, for tests).

infra#

Optional, read-only hosting and database probes.

FieldMeaning
finding_issuesmanual (default) or rule: file problems as issues automatically
vercelproject, plus activated, host, scopes
supabaseproject_ref, migrations_dir (default supabase/migrations), plus activated, host, scopes

server#

FieldDefaultMeaning
port7317Dashboard and API port on 127.0.0.1. --port and ACC_PORT override it.

Reserved sections#

routing (work type → agents in order of preference) and workflow (methodology kanban, scrum or waterfall, auto_start, wip_limit, review, auto_merge, sprint and phases) are parsed and validated, but the current engine does not act on them yet. Use the canvas to define how work flows.

Editing settings in the app#

Settings → Project and policies edits the selected project's configuration: branches, checks and their Docker runtime, model rules, stall thresholds, code-host and infrastructure drafts, Graphify, and redaction rules.

  • Review settings changes creates an exact, expiring Decision. Confirm it to save. Settings, your answer and the audit events commit together and survive a restart.
  • A stale or replaced draft cannot be applied, and settings cannot change while work is running or queued.
  • Protected branches, required approvals, strict connector scope and the zero-extra-spend default cannot be removed through this editor.
  • Saving runs no project code, contacts no provider, pulls no image and activates no remote integration. Code-host and infrastructure drafts are activated separately in Connectors.
  • Repository identity and the Docker namespace stay bound to the project registered in the Mac app.

Edit this page on GitHub