Skip to content

Configuration Reference

.corydora.json is the project-level configuration file. It is created by corydora init and lives at the root of your repository alongside .corydora/, the working directory Corydora uses for state, logs, and agent data.

You can edit .corydora.json manually at any time. Run corydora config validate to check your edits against the schema before the next run.

The full JSON schema is published at schemas/corydora.schema.json.


version

PropertyTypeRequiredDescription
versionintegerYesSchema version. Must be 1.

git

Controls how Corydora isolates generated changes from your working tree.

PropertyTypeDefaultDescription
isolationMode"worktree" | "branch" | "current-branch""worktree"How changes are isolated from your working tree
branchPrefixstring"corydora"Prefix for generated branch and worktree names
trackMarkdownQueuesbooleanfalseCommit markdown queue files to the generated branch
worktreeRootstringCustom root directory for worktrees (optional)

Isolation modes

worktree (default and recommended) — Each run creates a dedicated git worktree. Generated changes are fully separated from your main checkout and cannot interfere with uncommitted work.

branch — Creates a new branch in the current checkout directory. No separate worktree is created, but changes are still isolated on their own branch.

current-branch — Edits the currently active branch directly. Requires explicit opt-in because it modifies the branch you are working on. Use this only when you understand the implications.

See the Security Model page for details on why worktree mode is the default.


runtime

Specifies which AI provider and model Corydora uses to execute agent tasks.

PropertyTypeDefaultDescription
providerRuntimeProviderIdThe AI runtime to use (required)
modelstringProvider-specificModel identifier passed to the provider
fallbackProviderRuntimeProviderIdSecondary provider to use if the primary fails (optional)
maxOutputTokensinteger (min 1)8192Upper bound for generated output tokens per provider call
requestTimeoutMsinteger (min 1)900000Per-request timeout in milliseconds (15 minutes)
maxRetriesinteger (min 0)3Retry budget for retryable request failures

Provider IDs

Provider IDTypeRequires
claude-cliCLIclaude binary, authenticated Claude Code installation
codex-cliCLIcodex binary and local Codex auth/config
gemini-cliCLIgemini binary and CLI auth or Google credentials
anthropic-apiAPIANTHROPIC_API_KEY
openai-apiAPIOPENAI_API_KEY
google-apiAPIGOOGLE_API_KEY or GEMINI_API_KEY
bedrockAPIAWS_REGION and standard AWS credentials
ollamaLocalOllama running locally with OLLAMA_HOST reachable

See Provider Setup for authentication details for each provider.

Default models

When model is not specified, corydora init populates it from the detected provider's default. The defaults are:

ProviderDefault model
claude-clisonnet
codex-cligpt-5-codex
gemini-cligemini-2.5-pro
anthropic-apiclaude-sonnet-4-5
openai-apigpt-5
google-apigemini-2.5-pro
bedrockanthropic.claude-3-7-sonnet-20250219-v1:0
ollamaqwen2.5-coder:7b

agents

Controls which agents are active and what task categories they scan for.

PropertyTypeDefaultDescription
enabledCategoriesTaskCategory[]All 5 categoriesWhich task categories to scan for
selectedBuiltinAgentsstring[]All 8 agentsWhich builtin agents to activate
importedAgentDirectorystringPath to a directory of imported agent markdown files (optional)

Task categories

CategoryDescription
bugsCorrectness bugs, failure paths, security vulnerabilities
performanceUnnecessary renders, repeated work, I/O hot spots
testsMissing tests, flaky patterns, weak validation
todoComments, deferred code paths, and technical debt
featuresIncremental product improvement opportunities

Builtin agent IDs

IDLabelCategoriesTech lenses
bug-investigatorBug Investigatorbugstypescript, refactoring
performance-engineerPerformance Engineerperformancetypescript, react, nextjs, electron
test-hardenerTest Hardenerteststypescript, react, nextjs, node-cli
todo-triagerTodo Triagertodotypescript, refactoring
feature-scoutFeature Scoutfeaturesreact, nextjs, node-cli, electron
security-auditorSecurity Auditorbugssecurity, typescript, react, nextjs, node-cli
database-reviewerDatabase Reviewerbugs, performancedatabase, typescript, node-cli
refactoring-engineerRefactoring Engineertodo, performance, testsrefactoring, typescript

corydora init pre-selects the agents whose tech lenses match the detected project fingerprint. You can adjust selectedBuiltinAgents manually to activate only the agents relevant to your codebase.

For importing custom agents, see corydora agents import and the Agent Catalog page.


scan

Controls how the file discovery and batch-scanning phase behaves.

PropertyTypeDefaultDescription
batchSizeinteger (min 1)6Number of files dispatched to an agent in a single scan batch
maxConcurrentScansinteger (min 1)3Maximum number of scan operations running in parallel
allowBroadRiskbooleanfalseInclude broad-risk findings in the fix queue
includeExtensionsstring[]See belowFile extensions to include in discovery
excludeDirectoriesstring[]See belowDirectory names to skip entirely during discovery

allowBroadRisk

Each task produced by an agent is tagged with a risk level. narrow tasks touch a single, well-understood location. broad tasks involve cross-cutting changes. By default, broad-risk tasks are surfaced in the markdown queue for human review but not automatically executed. Set allowBroadRisk: true to include them in automated fixing.

Default includeExtensions

.ts, .tsx, .js, .jsx, .mts, .cts, .mjs, .cjs, .json

Default excludeDirectories

.git, .next, .corydora, .turbo, build, coverage, dist, docs, documentation, generated, logs, node_modules, out, public, storybook-static, tmp


execution

Controls run lifecycle limits and behavior.

PropertyTypeDefaultDescription
backgroundByDefaultbooleanfalseAutomatically launch runs in a tmux session without needing --background
preventIdleSleepbooleantrueOn macOS, wrap background runs with caffeinate -i when available
maxFixesPerRuninteger (min 1)20Maximum number of fixes applied before the run stops
maxRuntimeMinutesinteger (min 1)480Maximum wall-clock duration in minutes before the run stops (8 hours)
backlogTargetinteger (min 1)8Target number of pending tasks to maintain before scanning more files
validateAfterFixbooleantrueRun the project's validation command (e.g. tsc, eslint) after each fix

How backlogTarget works

The scheduler maintains a rolling backlog. When the number of pending tasks drops below backlogTarget, Corydora dispatches the next scan batch to replenish the queue. Higher values keep more work queued ahead of the fixer; lower values reduce unnecessary scanning on small codebases.


todo

Controls behavior specific to the todo task category and its markdown queue file.

PropertyTypeDefaultDescription
trackMarkdownFilesbooleanfalseTrack the todo.md queue file in git
renderCompletedTasksbooleantrueInclude completed tasks when rendering the markdown queue

paths

Overrides the locations of Corydora's internal directories and files. You rarely need to change these; they are useful when the defaults conflict with existing project structure.

PropertyTypeDefaultDescription
corydoraDirstring.corydoraRoot working directory for all Corydora data
stateDirstring.corydora/stateTask store and run state files
logsDirstring.corydora/logsLog files for each run
runsDirstring.corydora/runsHistorical run records
agentsDirstring.corydora/agentsImported agent metadata
envFilestring.corydora/.env.localLocal environment secrets loaded before provider calls

.corydora/.env.local is excluded from git by default and never read into .corydora.json. Store provider API keys and other secrets there, not in the config file.


Complete example

The following .corydora.json shows every field with sensible production values for a TypeScript/Next.js project using the Anthropic API.

json
{
  "version": 1,
  "git": {
    "isolationMode": "worktree",
    "branchPrefix": "corydora",
    "trackMarkdownQueues": false
  },
  "runtime": {
    "provider": "anthropic-api",
    "model": "claude-sonnet-4-5",
    "fallbackProvider": "claude-cli",
    "maxOutputTokens": 8192,
    "requestTimeoutMs": 900000,
    "maxRetries": 3
  },
  "agents": {
    "enabledCategories": ["bugs", "performance", "tests", "todo"],
    "selectedBuiltinAgents": [
      "bug-investigator",
      "performance-engineer",
      "test-hardener",
      "todo-triager",
      "security-auditor",
      "refactoring-engineer"
    ]
  },
  "scan": {
    "batchSize": 6,
    "maxConcurrentScans": 3,
    "allowBroadRisk": false,
    "includeExtensions": [".ts", ".tsx", ".js", ".jsx", ".mts", ".cts", ".mjs", ".cjs", ".json"],
    "excludeDirectories": [
      ".git",
      ".next",
      ".corydora",
      ".turbo",
      "build",
      "coverage",
      "dist",
      "docs",
      "documentation",
      "generated",
      "logs",
      "node_modules",
      "out",
      "public",
      "storybook-static",
      "tmp"
    ]
  },
  "execution": {
    "backgroundByDefault": true,
    "preventIdleSleep": true,
    "maxFixesPerRun": 20,
    "maxRuntimeMinutes": 480,
    "backlogTarget": 8,
    "validateAfterFix": true
  },
  "todo": {
    "trackMarkdownFiles": false,
    "renderCompletedTasks": true
  },
  "paths": {
    "corydoraDir": ".corydora",
    "stateDir": ".corydora/state",
    "logsDir": ".corydora/logs",
    "runsDir": ".corydora/runs",
    "agentsDir": ".corydora/agents",
    "envFile": ".corydora/.env.local"
  }
}

Released under the MIT License.