EdsgerEdsger Docs

Configuration

Configure the Edsger CLI — file patterns for code review, workflow concurrency, polling intervals, retry behavior, timeouts, and environment variables.

Configuration

Edsger CLI uses cosmiconfig for flexible configuration loading. Configuration controls two main areas: code review behavior (patterns, severity, file limits) and agent workflow behavior (concurrency, polling, retries, timeouts).

Configuration Files

Create any of these files in your project root. Cosmiconfig searches for them in this order:

FileFormat
.edsgerrcJSON
.edsgerrc.jsonJSON
.edsgerrc.yamlYAML
.edsgerrc.ymlYAML
edsger.config.jsJavaScript (CommonJS)
edsger.config.mjsJavaScript (ESM)
package.json"edsger" fieldJSON

You can also specify a config file explicitly:

edsger --config ./my-edsger-config.json --review

Full Configuration Reference

{
  "patterns": ["**/*.ts", "**/*.tsx", "**/*.js"],
  "exclude": ["**/node_modules/**", "**/dist/**", "**/*.test.ts"],
  "severity": "error",
  "maxFiles": 50,
  "claude": {
    "timeout": 120000
  },
  "workflow": {
    "maxConcurrency": 3,
    "pollInterval": 30000,
    "maxRetries": 3,
    "retryCooldown": 300000,
    "workerTimeout": 1800000,
    "maxVerificationIterations": 10
  }
}

Code Review Options

These options control the edsger --review command behavior.

patterns

Type: string[] Default:

[
  "**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx",
  "**/*.vue", "**/*.py", "**/*.go", "**/*.rs",
  "**/*.java", "**/*.cpp", "**/*.c", "**/*.h"
]

Glob patterns for files to include in code review. Only files matching these patterns will be analyzed. The defaults cover most common languages — narrow this down for faster reviews on large codebases.

{
  "patterns": ["src/**/*.ts", "src/**/*.tsx"]
}

exclude

Type: string[] Default:

[
  "**/node_modules/**", "**/dist/**", "**/build/**",
  "**/*.test.js", "**/*.spec.js", "**/*.test.ts", "**/*.spec.ts",
  "**/__tests__/**", "**/*.min.js", "**/*.bundle.js"
]

Glob patterns for files to exclude from review. Excludes are applied after patterns, so a file matching both will be excluded.

{
  "exclude": [
    "**/node_modules/**",
    "**/dist/**",
    "**/*.generated.ts",
    "**/migrations/**"
  ]
}

severity

Type: "error" | "warning" Default: "error"

Controls how review findings affect the exit code:

  • "error" — Only BLOCK findings cause exit code 1 (non-zero). WARN findings are reported but don't fail the process.
  • "warning" — Both BLOCK and WARN findings cause exit code 1. Use this for stricter enforcement (e.g., CI pipelines).

maxFiles

Type: number Default: 50

Maximum number of files to process in a single review run. If more files match, the CLI processes the first maxFiles files and warns about skipped ones. Increase this for large changesets, but be aware of API rate limits and processing time.

claude.timeout

Type: number (milliseconds) Default: 120000 (2 minutes)

Timeout for individual AI requests during code review. Increase this if you're reviewing very large files or experiencing timeout errors.

Workflow Options

These options control the agent workflow (edsger with no flags) and task watching behavior.

workflow.maxConcurrency

Type: number Default: 3 Hard cap: 10

Maximum number of features to process simultaneously. Each feature runs in its own forked Node.js process (~50-80MB memory each).

Why the cap of 10: This limit exists because of:

  • MCP API rate limits — Per-minute and per-hour limits per token
  • AI API rate limits — Claude RPM/TPM limits
  • GitHub API rate limits — GitHub App installation tokens allow 5,000 requests/hour
  • Memory — Each forked worker uses ~50-80MB

For most teams, 3-5 concurrent features is a good balance. Increase only if you have high API rate limits and sufficient memory.

{
  "workflow": {
    "maxConcurrency": 5
  }
}

You can also set this per-run via the --concurrency flag:

edsger --concurrency 5

workflow.pollInterval

Type: number (milliseconds) Default: 30000 (30 seconds)

How often the agent checks the platform for new ready_for_ai features. Lower values mean faster pickup but more API calls. Higher values reduce API usage but introduce latency.

{
  "workflow": {
    "pollInterval": 15000
  }
}

workflow.maxRetries

Type: number Default: 3

Maximum number of times to retry a failed feature before giving up. After maxRetries failures, the feature is skipped in future polling cycles.

Exception: If a feature is updated on the platform after a failure (e.g., someone provides feedback or adjusts the configuration), the retry counter is bypassed and the feature is picked up again.

workflow.retryCooldown

Type: number (milliseconds) Default: 300000 (5 minutes)

Minimum time to wait before retrying a failed feature. This prevents rapid retry loops when a feature has a persistent issue.

workflow.workerTimeout

Type: number (milliseconds) Default: 1800000 (30 minutes)

Maximum time a single feature worker can run before being killed. If a worker exceeds this timeout:

  1. It receives a SIGTERM signal
  2. If it doesn't exit within 10 seconds, it receives SIGKILL
  3. The feature is marked as failed with a timeout error

Increase this for features with complex implementations or many phases. Decrease it to fail-fast on stuck workers.

{
  "workflow": {
    "workerTimeout": 3600000
  }
}

workflow.maxVerificationIterations

Type: number Default: 10

Maximum number of verification-rework loops before escalating to human review. When a phase's output is verified by AI and found lacking, the CLI re-runs the phase with feedback. This setting caps the loop to prevent infinite cycles.

After reaching the limit, the feature status is escalated so a human can review and provide direction.

Environment Variables

Authentication

VariableRequiredDescription
EDSGER_MCP_SERVER_URLFor env-based authMCP server endpoint URL
EDSGER_MCP_TOKENFor env-based authMCP authentication token
EDSGER_BASE_URLNoEdsger web app URL (default: https://edsger.ai)

Note: If you use edsger login, these are stored automatically in ~/.edsger/auth.json and you don't need to set them as environment variables. Environment variables take precedence over stored auth if both exist.

Legacy Workflow

VariableRequiredDescription
EDSGER_PRODUCT_IDFor --product-levelProduct UUID for single-product workflow

Setting EDSGER_PRODUCT_ID without --product-level flag auto-enables legacy mode for backward compatibility.

Growth Analysis & Video

VariableRequiredDescription
ELEVENLABS_API_KEYFor growth videosElevenLabs TTS API key (primary)
DEEPGRAM_API_KEYFor growth videosDeepgram TTS API key (alternative)

At least one TTS key is required for the growth command's video generation feature.

Setting Environment Variables

Recommended: Use the CLI for persistent storage:

edsger config set ELEVENLABS_API_KEY=sk-xxxxx

Variables set this way are stored in ~/.edsger/env.json and loaded automatically on every CLI run.

Alternative: .env file in your project directory:

# .env
EDSGER_MCP_SERVER_URL=https://your-project.supabase.co/functions/v1
EDSGER_MCP_TOKEN=mcp_xxxxxxxxxxxxx
ELEVENLABS_API_KEY=sk-xxxxx

Alternative: Shell export for session-only use:

export EDSGER_MCP_TOKEN=mcp_xxxxxxxxxxxxx

Example Configurations

TypeScript Project (Code Review Focused)

{
  "patterns": ["src/**/*.ts", "src/**/*.tsx"],
  "exclude": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "dist/**"],
  "severity": "warning",
  "maxFiles": 100,
  "claude": {
    "timeout": 180000
  }
}

Monorepo

{
  "patterns": ["packages/*/src/**/*.ts", "apps/*/src/**/*.ts"],
  "exclude": ["**/node_modules/**", "**/dist/**", "**/__mocks__/**"],
  "maxFiles": 200
}

High-Concurrency Workflow

For teams with high API rate limits processing many features:

{
  "workflow": {
    "maxConcurrency": 8,
    "pollInterval": 15000,
    "maxRetries": 5,
    "retryCooldown": 120000,
    "workerTimeout": 3600000,
    "maxVerificationIterations": 15
  }
}

Conservative Workflow

For careful processing with longer timeouts and fewer retries:

{
  "workflow": {
    "maxConcurrency": 1,
    "pollInterval": 60000,
    "maxRetries": 2,
    "retryCooldown": 600000,
    "workerTimeout": 3600000,
    "maxVerificationIterations": 5
  }
}

Python Project

{
  "patterns": ["**/*.py"],
  "exclude": [
    "**/__pycache__/**",
    "**/venv/**",
    "**/.venv/**",
    "**/test_*.py",
    "**/*_test.py"
  ],
  "severity": "error"
}