Skip to content

Colony Configuration Reference

This document is the Colony configuration reference. It covers global infrastructure sections, agent configuration, and the config resolution chain. For multi-repo and multi-tenant configuration (Colony Cloud), see the Multi-Repo (Colony Cloud) section at the bottom.

Colony uses YAML configuration files. The config is loaded from the first location found in this order:

  1. Path passed via the --config CLI flag
  2. ./colony.config.yaml (current working directory)
  3. ~/.colony/config.yaml (user home directory)

If no config file is found, Colony uses built-in defaults where available.

Call resolveConfig() before any GitHub operations. This function validates the config and resolves credentials from environment variables — reading GITHUB_TOKEN (or the value of token_env) into github.token, reading GitHub App private keys from disk, and resolving per-repo secrets.

Never use the raw parsed config object directly for GitHub operations; always go through resolveConfig().

Authentication and identity settings for the target repository.

FieldTypeDefaultDescription
ownerstringrequiredGitHub organization or user that owns the target repository
repostringrequiredTarget repository name
token_envstring'GITHUB_TOKEN'Name of the environment variable containing the Personal Access Token used for GitHub API calls
appGitHubAppConfigGitHub App credentials for the coder identity (Analyzer, Developer). Use instead of token_env for App-based auth
ops_appGitHubAppConfigSeparate GitHub App credentials for the ops identity (Sprint Master, Reviewer, Merger). Allows two distinct bot identities
ops_token_envstringName of the environment variable containing the PAT for the ops identity. Alternative to ops_app
bot_usernamestringDisplay name shown for bot-authored comments and labels

Used by github.app and github.ops_app.

FieldTypeDefaultDescription
app_idnumberrequiredGitHub App ID (found in the App settings page)
private_key_pathstringrequiredPath to the .pem private key file for this App
installation_idnumberrequiredInstallation ID for this App on the target organization or repo

Controls the prefix used for all pipeline state labels created by Colony on GitHub issues.

FieldTypeDefaultDescription
prefixstring'colony'Prefix for pipeline state labels (e.g. colony:analyzing, colony:in-development). Change this if you need to run multiple Colony instances against the same repo with distinct label namespaces

Controls log output from all Colony processes.

FieldTypeDefaultDescription
levelstring'info'Pino log level. Valid values: 'trace', 'debug', 'info', 'warn', 'error', 'fatal'
format'json' | 'pretty''pretty'Log output format. Use 'json' in production/containerized deployments for structured log ingestion; use 'pretty' for local development

Controls how Colony creates and manages git worktrees for each issue.

FieldTypeDefaultDescription
repo_dirstring'.'Path to the local git clone of the target repository. Colony creates worktrees under this directory
base_dirstring'~/.colony/workspaces/{owner}/{repo}'Base directory for worktrees. Supports {owner} and {repo} template tokens which are substituted at runtime
cleanup_after_mergebooleantrueRemove the worktree after a PR is merged. Set to false to retain worktrees for post-merge inspection
setup_commandstringCommand to run after creating a worktree, instead of the default npm install. Use for non-TypeScript repos (e.g. 'bundle install' for Ruby/Rails)
setup_timeoutnumber300Seconds to allow the setup command to run before timing out
prune_blocked_after_daysnumber7Days before worktrees for blocked issues are automatically pruned
review_workspace_basestringContainer-local path for ephemeral reviewer worktrees. Required when the reviewer runs in an isolated container with a different filesystem layout
skip_pre_push_hookbooleanWhen true, passes --no-verify to git push. Colony runs its own validation steps, so this is safe in containerized deployments where the local pre-push hook is not meaningful
branchstring'main'Default branch name for the repository. Override when the repo’s default branch is not main (e.g. 'master', 'develop')

Connection settings for the Postgres database used by the pipeline store. This section is optional for configuration — if omitted, Colony reads DATABASE_URL from the environment using built-in defaults. However, a Postgres connection is always required at runtimecolony doctor will always validate database connectivity regardless of whether this section is present.

FieldTypeDefaultDescription
url_envstring'DATABASE_URL'Name of the environment variable containing the Postgres connection string
max_connectionsnumber10Maximum number of connections in the pg connection pool. Increase for high-throughput deployments with many concurrent workers
idle_timeoutnumber10000idleTimeoutMillis for the pg connection pool (milliseconds). Lower this for connection-constrained environments
sslbooleanfalseEnable SSL for Postgres connections. Required for most cloud-hosted Postgres instances (e.g. RDS, Cloud SQL)

Database migrations: Colony runs Postgres migrations automatically at agent startup — both the sprint-master and worker call PipelineStore.initialize() which applies all pending migrations before the agent begins processing. No manual migration step is needed. If startup fails with a migration error, verify DATABASE_URL connectivity and that the Postgres user has CREATE TABLE privileges.

Controls the local event log written by Colony agents. This section is optional.

FieldTypeDefaultDescription
enabledbooleanEnable or disable event logging
dirstring'~/.colony/events'Directory where event log files are written
retention_daysnumber30Number of days to retain event log files before pruning

Configures the webhook receiver that listens for incoming GitHub webhook events. This section is optional — omit it if you are not running the webhook receiver.

FieldTypeDefaultDescription
enabledbooleanrequiredEnable the webhook receiver
portnumber (1–65535)requiredPort for the webhook receiver HTTP server to listen on
secret_envstringName of the environment variable containing the HMAC secret used to verify webhook payloads from GitHub
dispatch_hoststringHost used for agent wake dispatch when a webhook event is received

Controls Claude CLI invocation behaviour and model selection for all agents.

FieldTypeDefaultDescription
timeoutnumber1800Overall Claude CLI invocation timeout in seconds
max_retriesnumber1Number of times to retry a failed Claude invocation
inactivity_timeoutnumber300Seconds without stdout/stderr output before the process is killed with SIGKILL
max_cost_per_issuenumberUSD cost cap per issue. When the accumulated cost for an issue reaches this limit, the Claude invocation is aborted, the issue is moved to colony:blocked, and Colony posts a comment with the cost breakdown. To unblock: raise this value in config, then remove the colony:blocked label from the GitHub issue to re-trigger processing. Omit for no limit.
binary_pathstring'claude'Path to the Claude CLI binary. Override when the binary is not on PATH or you need a specific version
provider'anthropic' | 'foundry''anthropic'API provider for Claude Code CLI. Use 'foundry' to route through Azure Foundry
foundryClaudeFoundryConfigAzure Foundry configuration. Only used when provider: 'foundry'
modelsClaudeModelsConfigPer-agent model overrides
scalingClaudeScalingConfigPer-complexity turn limits and model overrides. When omitted, built-in defaults are used (see below)

Used by claude.foundry. Only applies when claude.provider is 'foundry'.

FieldTypeDefaultDescription
resourcestringAzure resource name. URL constructed as https://{resource}.services.ai.azure.com/anthropic. Mutually exclusive with base_url
base_urlstringFull Foundry base URL. Mutually exclusive with resource
api_key_envstring'ANTHROPIC_FOUNDRY_API_KEY'Environment variable holding the Foundry API key
pin_models.opusstringPin the Opus deployment name (sets ANTHROPIC_DEFAULT_OPUS_MODEL)
pin_models.sonnetstringPin the Sonnet deployment name (sets ANTHROPIC_DEFAULT_SONNET_MODEL)
pin_models.haikustringPin the Haiku deployment name (sets ANTHROPIC_DEFAULT_HAIKU_MODEL)

Example:

claude:
provider: foundry
foundry:
resource: my-azure-resource
api_key_env: ANTHROPIC_FOUNDRY_API_KEY
pin_models:
opus: claude-opus-4-6
sonnet: claude-sonnet-4-6
haiku: claude-haiku-4-5

Authentication: set ANTHROPIC_FOUNDRY_API_KEY in your environment, or omit it to use Azure Entra ID (DefaultAzureCredential chain). See the Claude Code Foundry docs for details.

Used by claude.models.

FieldTypeDefaultDescription
developerstring'claude-opus-4-6'Model used for the developer agent
reviewerstring'claude-sonnet-4-6'Model used for the reviewer agent
analyzerstring'claude-sonnet-4-6'Model used for the analyzer agent
plannerstring'claude-opus-4-6'Model used for the planner agent
mergerstring'claude-sonnet-4-6'Model used for the merger agent

Used by claude.scaling. The config is a map with keys small, medium, and large (matching issue complexity levels). Each entry is a ClaudeScalingEntry.

Example:

claude:
scaling:
small:
developer_max_turns: 80
medium:
developer_max_turns: 150
large:
developer_max_turns: 250
no_progress_window: 75
FieldTypeDefaultDescription
developer_max_turnsnumberrequiredMaximum Claude turns for a developer invocation at this complexity. Built-in defaults: 80 (small), 150 (medium), 250 (large)
modelstringOverride the model for this complexity level, taking precedence over claude.models.developer
effort'low' | 'medium' | 'high' | 'max'Effort level hint passed to the Claude CLI for this complexity
planning_max_turnsnumber500Maximum turns for planning sub-tasks at this complexity
no_progress_windownumberNumber of turns without measurable progress before aborting. Only set by default for large issues (75)
backstop_max_turnsnumber500Hard turn ceiling regardless of other limits

Tuning for first use: The defaults work well for evaluation. If you find issues timing out or review checks failing on slow test suites, these are the first fields to adjust:

FieldDefaultRecommended starting point
claude.timeout1800Increase to 3600 for large repos with long build times
review.timeout_per_check120Raise to 300 for slow test suites
agents.sprint_master.poll_interval3030 is sufficient for evaluation; lower only if you need sub-30s latency and have webhooks configured

Controls PR review behaviour: deterministic check commands, LLM review rounds, CI gating, and merge policy.

FieldTypeDefaultDescription
checksRecord<string, string>{}Named shell commands to run as deterministic review checks (e.g. test: 'npm test', lint: 'npm run lint'). Keys are check names; values are shell commands
timeout_per_checknumber120Seconds allowed for each check command before it is killed
max_review_cyclesnumberMaximum number of LLM review rounds before giving up. Unlimited if unset
max_reimplement_cyclesnumberMaximum number of times the developer re-implements after a review rejection. Unlimited if unset
max_diff_linesnumber3000Truncate the PR diff at this many lines when sending it to the LLM reviewer
rebase_before_checkbooleantrueRebase the PR branch onto the base branch before running check commands
auto_merge_on_approvalbooleanfalseAutomatically merge the PR after the reviewer approves it
require_ci_passbooleantrueWait for all required CI checks to pass before merging
ci_check_timeoutnumber300Seconds to wait for CI checks to complete before timing out
ci_required_checksstring[][]Names of specific CI checks that must pass. When empty, all checks must pass
format_commandstringFormatting command to run before review checks (e.g. 'npm run format:fix'). Optional
empty_verdict_auto_approvebooleantrueAuto-approve when the LLM returns an empty or unparseable verdict and all deterministic checks passed

Configures the Colony agent processes. Each agent type extends a common set of fields. Agents run as standalone processes (singletons) or as part of the per-repo worker pool.

All agent types share these base fields:

FieldTypeDefaultDescription
enabledbooleantrueWhether the agent runs
poll_intervalnumber30Seconds between poll cycles (minimum 5)
health_portnumber(per agent)HTTP health check port
effort'low' | 'medium' | 'high' | 'max'Claude effort level for this agent

Issue intake and pipeline monitoring. Enqueues tasks to the Postgres work queue when issues transition states.

FieldTypeDefaultDescription
Common fieldshealth_port: 9100See Common AgentConfig Fields
intake_mode'all' | 'tagged''tagged'Whether to pick up all new issues or only colony-tagged ones
heartbeat_timeout_minutesnumber5Minutes before reclaiming stale tasks from workers that stopped heartbeating
sweep_cooldown_minutesnumber10Minutes to suppress re-enqueueing a sweep task after completion (0 to disable)
label_sync_limitnumber25Max issues to reconcile labels for per poll cycle
projection_drain_limitnumber50Max queued GitHub write projections to drain per poll cycle

Issue analysis and triage. Uses bare AgentConfig with no additional fields.

FieldTypeDefaultDescription
Common fieldshealth_port: 9101See Common AgentConfig Fields

PR review: deterministic checks plus LLM review. Uses bare AgentConfig with no additional fields.

FieldTypeDefaultDescription
Common fieldshealth_port: 9103See Common AgentConfig Fields

Issue implementation via Claude Code.

FieldTypeDefaultDescription
Common fieldshealth_port: 9102See Common AgentConfig Fields
repo_contextRepoContextConfigControls repository context injection into prompts
pr_overlap_thresholdnumber (0–1)Fraction of plan files overlapping with open PRs to trigger block
max_tooling_retriesnumber2Poll-level retries for transient push failures

Used by agents.developer.repo_context.

FieldTypeDefaultDescription
enabledbooleanEnable repository context injection
max_tokensnumberMaximum tokens for the context payload
tree_depthnumberDepth of the directory tree to include

Epic decomposition — breaks large issues into sub-tasks.

FieldTypeDefaultDescription
Common fieldshealth_port: 9105See Common AgentConfig Fields
max_turnsnumber200Max Claude turns for planning
modelstringOverride model for planner

Merge orchestration — handles PR merging and conflict resolution.

FieldTypeDefaultDescription
Common fieldshealth_port: 9104See Common AgentConfig Fields
conflict_resolutionConflictResolutionConfigAutomated merge conflict resolution settings

Used by agents.merger.conflict_resolution.

FieldTypeDefaultDescription
enabledbooleanEnable automated conflict resolution
max_conflict_filesnumberMaximum number of conflicting files to attempt resolution on
max_conflict_regionsnumberMaximum number of conflict regions to attempt resolution on
timeoutnumberTimeout in seconds for conflict resolution
modelstringOverride model for conflict resolution
auto_merge_high_confidence_resolutionsbooleanAutomatically merge when conflict resolution has high confidence

Pipeline observability, self-healing, and Prometheus metrics. Disabled by default.

FieldTypeDefaultDescription
Common fieldsenabled: false, health_port: 9106See Common AgentConfig Fields
agent_down_timeoutnumber120Seconds before alerting that an agent is down
pipeline_stall_timeout_minutesnumber60Minutes before alerting a pipeline stall
error_rate_thresholdnumber (0–1)0.5Alert if error rate exceeds this fraction
error_rate_windownumber30Minutes, rolling window for error rate calculation
cost_alert_thresholdCostAlertThresholdCost alerting thresholds
alert_cooldownnumber30Minutes, deduplication window for alerts
alert_channelsMonitoringAlertChannel[][]Alert delivery channels
metrics_refresh_minutesnumber10How often to refresh pipeline metrics
sweep_cooldown_minutesnumber10Minutes to suppress re-enqueueing a sweep task after completion (0 to disable)
agent_health_hoststring'localhost'Host for polling agent health endpoints
authMonitorAuthBasic auth for the monitor HTTP API
self_healingSelfHealingConfig(see below)Self-healing automation settings

Used by agents.monitor.cost_alert_threshold.

FieldTypeDefaultDescription
daily_usdnumberAlert when daily cost exceeds this USD amount
monthly_usdnumberAlert when monthly cost exceeds this USD amount

Used by agents.monitor.auth.

FieldTypeDefaultDescription
usernamestringrequiredUsername for basic auth
password_envstringrequiredName of the environment variable containing the password

Used by agents.monitor.alert_channels.

FieldTypeDefaultDescription
type'github_issue' | 'webhook' | 'slack' | 'pagerduty'requiredAlert channel type
urlstringEndpoint URL for webhook/slack/pagerduty
url_envstringName of the environment variable containing the endpoint URL
routing_keystringPagerDuty integration routing key (literal value, not an env var name)
agents:
monitor:
alert_cooldown: 30
cost_alert_threshold:
daily_usd: 50
monthly_usd: 500
alert_channels:
- type: slack
url_env: COLONY_SLACK_WEBHOOK_URL
- type: pagerduty
routing_key: YOUR_PAGERDUTY_ROUTING_KEY
- type: webhook
url_env: COLONY_ALERT_WEBHOOK_URL
- type: github_issue
  • slack — Posts Block Kit messages to a Slack incoming webhook. Set url_env to the name of the environment variable containing the webhook URL.
  • pagerduty — Sends Events API v2 triggers. Set routing_key to the PagerDuty integration routing key (literal value, not an env var).
  • webhook — POSTs a JSON payload to any HTTP endpoint. Set url_env to the name of the environment variable containing the URL.
  • github_issue — Creates a GitHub issue labeled colony:alert in the first configured repo. No additional fields required.

The alert_cooldown (minutes) controls deduplication — each unique alert ID is only dispatched once per window. The cost_alert_threshold fires a warning when aggregate daily or monthly spend exceeds the configured USD amounts.

Used by agents.monitor.self_healing.

FieldTypeDefaultDescription
auto_relabel_orphansbooleanfalseAutomatically relabel issues that have fallen out of the state machine
worktree_cleanup_interval_hoursnumber6Hours between worktree cleanup sweeps
auto_unblock_transientbooleanfalseAutomatically unblock issues that were blocked by transient failures
max_auto_unblocks_per_issuenumberMaximum automatic unblocks per issue before requiring manual intervention
auto_restartbooleanfalseEnable automatic agent restart on failure
restart_strategy'pid' | 'systemd' | 'pm2''pid'Process restart mechanism
restart_cooldownnumber300Seconds between restart attempts
max_restart_attemptsnumber3Maximum restart attempts before giving up
restart_dry_runbooleanfalseLog restart actions without executing them
work_task_retention_daysnumber7Days to retain completed work tasks before pruning

Per-repo worker pool configuration. Workers claim tasks from the Postgres work_tasks queue and dispatch to executor libraries. This section is optional — omit it when using standalone agent processes.

FieldTypeDefaultDescription
Common fieldsInherits enabled, poll_interval, health_port from Common AgentConfig Fields; defaults depend on deployment configuration
heartbeat_intervalnumberSeconds between task heartbeats. Workers send heartbeats to the Postgres queue to signal liveness — if a worker stops heartbeating for longer than sprint_master.heartbeat_timeout_minutes, the task is reclaimed
max_task_retriesnumber3Max failures for a repo+issue+taskType combination within 60 minutes before dropping re-enqueue

Note: The resolution chain applies to multi-repo deployments using repos[]. For single-repo setups (the default), all settings are configured at the top level — no per-repo overrides are needed. See Multi-Repo (Colony Cloud) for details.

When a field can be set both globally and per-repo, Colony resolves the value using this fallback chain:

repoConfig.<field> ?? config.<field> ?? default

The per-repo value takes precedence when set; it falls back to the global value, then to the built-in default. The following helper functions in packages/core/src/config.ts implement this pattern for specific fields:

  • resolveIntakeMode(repoConfig, config) — resolves intake_mode
  • resolveAutoMerge(repoConfig, config) — resolves auto-merge behavior
  • resolveSelfImprovement(repoConfig, config) — resolves self_improvement settings
  • resolveDependabotConfig(repoConfig) — resolves dependabot settings

Controls Colony’s self-improvement feature, which allows Colony to file issues against itself.

FieldTypeDefaultDescription
enabledbooleanfalseEnable the self-improvement feature
labelstring'colony:self-improvement'GitHub label used to tag self-improvement issues
cooldown_minutesnumber (≥1)30Minimum minutes between self-improvement issue filings
tracksSelfImprovementTrack[]Per-track configuration for self-improvement. See deprecated fields

Controls the complexity calibration feature used to tune issue complexity estimates.

FieldTypeDefaultDescription
lookback_daysnumber7Number of days of historical issues to consider when calibrating complexity estimates

Executor-specific settings that belong to the execution logic of each agent type (distinct from agent process infrastructure such as poll_interval and health_port).

If executors is not set, values are auto-populated from the corresponding agents.* fields for backward compatibility via populateExecutorsFromAgents() in config.ts.

FieldTypeDefaultDescription
effort'low' | 'medium' | 'high'Claude effort level for the analyzer. Maps to claude --effort
FieldTypeDefaultDescription
repo_contextRepoContextConfigControls how the developer builds repository context for Claude Code
pr_overlap_thresholdnumberNumber of overlapping files with another open PR before blocking development
max_tooling_retriesnumberMaximum retries for transient tooling errors during development
effort'low' | 'medium' | 'high'Claude effort level for the developer
FieldTypeDefaultDescription
effort'low' | 'medium' | 'high'Claude effort level for the reviewer
FieldTypeDefaultDescription
max_turnsnumberMaximum number of turns for the planner’s Claude session
effort'low' | 'medium' | 'high'Claude effort level for the planner
modelstringOverride the Claude model used by the planner
FieldTypeDefaultDescription
conflict_resolutionConflictResolutionConfigLLM-assisted conflict resolution settings. See the agents.merger section for field details

Colony Cloud supports managing multiple repositories from a single Colony instance using repos[] or tenants[] configuration. For single-repo deployments (the default open-source path), these sections are not needed — the flat github + workspace top-level config is all you need.

Multi-repo deployments list each repository under repos. Each entry configures authentication, workspace, and pipeline behavior for one repository. Config cannot have both top-level repos and tenants.

FieldTypeDefaultDescription
ownerstringrequiredGitHub organization or user that owns the repository
repostringrequiredRepository name
token_envstringName of the environment variable containing the PAT for this repo. Either token_env or app is required
appGitHubAppConfigPer-repo GitHub App credentials for the coder identity. Either app or token_env is required
ops_appGitHubAppConfigPer-repo GitHub App credentials for the ops identity
ops_token_envstringName of the environment variable containing the PAT for the ops identity. Alternative to ops_app
bot_usernamestringDisplay name shown for bot-authored comments and labels for this repo
workspaceRepoWorkspaceConfigrequiredPer-repo workspace settings. Overrides the global workspace section
reviewRepoReviewConfigPer-repo review overrides. Only the fields in the explicit pick list can be overridden
self_improvementSelfImprovementConfigPer-repo override for self-improvement settings
pattern_memoryPatternMemoryConfigPer-repo pattern memory settings. See fields below
slaSlaConfigPer-repo SLA thresholds. See fields below
intake_mode'all' | 'tagged'Overrides the global agents.sprint_master.intake_mode for this repo. When set, only this repo’s intake behavior changes
workersWorkerPoolConfigPer-repo worker pool settings. See fields below
dependabotDependabotConfigPer-repo Dependabot integration settings. See fields below
FieldTypeDefaultDescription
enabledbooleanrequiredEnable pattern memory for this repo
max_resultsnumber (≥1)requiredMaximum number of pattern results to include in prompts
lookback_daysnumber (≥1)requiredNumber of days of history to search for patterns
FieldTypeDefaultDescription
warn_after_minutesRecord<string, number>Map of pipeline state name (e.g. 'in-development') to the number of minutes before a warning is emitted. Only states that need a threshold need to be listed
FieldTypeDefaultDescription
pool_sizenumber (integer ≥1)Number of worker processes to run for this repo
memorystringContainer memory limit for worker processes (e.g. '4g', '6G')
health_port_startnumberStarting port for sequential health check endpoint allocation. Port ranges must not overlap across repos
FieldTypeDefaultDescription
auto_reviewbooleanAutomatically trigger a review cycle for Dependabot PRs
auto_merge_patchbooleanfalseAuto-merge patch updates after deterministic checks pass
auto_merge_minorbooleanfalseRequire LLM review for minor updates before merging
auto_migrate_breakingbooleanfalseAutomatically create migration issues for breaking major updates (opt-in)
bot_usernamesstring[]['dependabot[bot]']GitHub usernames to treat as Dependabot for triggering this integration

Per-Repo Workspace Overrides (RepoWorkspaceConfig)

Section titled “Per-Repo Workspace Overrides (RepoWorkspaceConfig)”

Each entry in repos[] requires a workspace block. Fields here override the corresponding global workspace values for that repo using the fallback chain repoConfig.workspace.<field> ?? config.workspace.<field> ?? default.

FieldTypeDefaultScopeDescription
repo_dirstringrequiredoverrides globalPath to the local git clone for this repo
base_dirstringrequiredoverrides globalBase directory for this repo’s worktrees. Supports {owner} and {repo} template tokens
setup_commandstringoverrides globalCommand to run after creating a worktree (e.g. 'bundle install'). Overrides the global workspace.setup_command
setup_timeoutnumber300overrides globalSeconds to allow the setup command to run. Overrides the global workspace.setup_timeout
review_workspace_basestringoverrides globalContainer-local path for ephemeral reviewer worktrees
skip_pre_push_hookbooleanoverrides globalPass --no-verify to git push for this repo
branchstring'main'overrides globalDefault branch name for this repo
secret_env_varsstring[]per-repo onlyNames of environment variables to resolve and inject into worker processes for this repo
timeoutsTimeoutsConfigper-repo onlyFine-grained clone and tooling timeouts. See fields below
FieldTypeDefaultDescription
clonenumber600 (recommended)Seconds before git clone is timed out
mise_installnumber600Seconds before mise install is timed out
mise_reshimnumber30Seconds before mise reshim is timed out
submodule_initnumber120Seconds before git submodule update --init is timed out

Per-Repo Review Overrides (RepoReviewConfig)

Section titled “Per-Repo Review Overrides (RepoReviewConfig)”

The review block inside a repos[] entry accepts an explicit subset of the global ReviewConfig fields. Only fields in the following pick list can be overridden per-repo:

FieldTypeDescription
checksRecord<string, string>Override the review check commands for this repo
timeout_per_checknumberSeconds to allow each check to run
rebase_before_checkbooleanRebase the PR branch onto the base branch before running checks
require_ci_passbooleanRequire all CI checks to pass before merging
ci_check_timeoutnumberSeconds to wait for CI checks to complete
ci_required_checksstring[]Names of CI checks that must pass
format_commandstringCommand to auto-format code before review
auto_merge_on_approvalbooleanAuto-merge the PR when the reviewer approves

The following ReviewConfig fields are global-only and cannot be overridden per-repo: max_review_cycles, max_reimplement_cycles, max_diff_lines, empty_verdict_auto_approve.

Note: New fields added to ReviewConfig are not automatically per-repo-overridable. The pick list in RepoReviewConfig must be updated explicitly to expose them.

Multi-tenant deployments group repositories by tenant under tenants. Each tenant has its own GitHub App credentials and optional cost budget. Config cannot have both top-level tenants and repos.

FieldTypeDefaultDescription
idstringrequiredUnique identifier for this tenant
namestringHuman-readable tenant name
appGitHubAppConfigTenant-level GitHub App credentials for the coder identity
ops_appGitHubAppConfigTenant-level GitHub App credentials for the ops identity
anthropic_api_key_envstringName of the environment variable containing the Anthropic API key for this tenant. Overrides the global ANTHROPIC_API_KEY
cost_budgetobjectCost budget settings for this tenant. See fields below
defaultsobjectDefault settings cascaded to repos in this tenant that do not override them. Currently supports timeouts (TimeoutsConfig)
reposRepoConfig[]requiredList of repositories belonging to this tenant
FieldTypeDefaultDescription
monthly_usdnumberMonthly spending cap in USD for this tenant

Per-agent-type keys alongside repos[].workers

Section titled “Per-agent-type keys alongside repos[].workers”

When repos[].workers (the worker pool model) is configured, setting per-agent-type keys under agents (developer, analyzer, reviewer, merger, planner) for executor-specific settings is deprecated. Use the executors section instead.

# Before (deprecated — when repos[].workers is set)
agents:
developer:
effort: high
# After
executors:
developer:
effort: high

The following fields are still accepted by the config loader but will be removed in a future release. Migrate away from them as soon as possible.


Fields: llm.analyzer_max_turns, llm.reviewer_max_turns, llm.developer_max_turns

Migration: Use claude.scaling (ClaudeScalingConfig) instead. Per-agent max_turns are now configured via claude.scaling entries keyed by complexity (small, medium, large).

# Before (deprecated)
llm:
developer_max_turns: 150
# After
claude:
scaling:
medium:
developer_max_turns: 150

Migration: Move all fields under agents.monitor. The loader still accepts monitoring: as a top-level key and merges it into agents.monitor for backward compatibility (see config.ts:179–194), but this bridge will be removed in a future release.

# Before (deprecated)
monitoring:
enabled: true
port: 9100
# After
agents:
monitor:
enabled: true
port: 9100

self_improvement.tracks (SelfImprovementTrack[])

Section titled “self_improvement.tracks (SelfImprovementTrack[])”

Migration: Manage tracks via the dashboard UI or the monitor REST API (POST /api/si/tracks). YAML track definitions in the config file are ignored as of the deprecation warning emitted at config load time (see config.ts:249–257) and will be fully removed in a future release.