Configuration
eforge is configured via eforge/config.yaml (searched upward from cwd). All fields are optional - defaults work for most projects. This page covers the most commonly tuned options. For the full schema see the Configuration Reference.
The Three Config Tiers
Config merges from three levels (lowest to highest priority):
| Tier | Path | Committed? | Purpose |
|---|---|---|---|
| User | ~/.config/eforge/config.yaml |
No | Cross-project, personal |
| Project | eforge/config.yaml |
Yes | Team-canonical |
| Project-local | .eforge/config.yaml |
No (gitignored) | Personal override |
The project-local tier deep-merges over the others. Use it for personal tuning - different model choices, extra verbosity, or test commands you do not want to commit.
Initialization
The fastest way to set up config is /eforge:init in Claude Code or Pi. It scaffolds eforge/config.yaml with sensible defaults and walks you through harness and model selection.
To edit config interactively after initialization: /eforge:config --edit.
Agent Tiers
Tiers are the primary configuration axis. Each tier is a self-contained recipe: harness + model + effort.
agents:
tiers:
planning:
harness: claude-sdk
model: claude-opus-4-7
effort: high
implementation:
harness: claude-sdk
model: claude-sonnet-4-6
effort: medium
review:
harness: claude-sdk
model: claude-opus-4-7
effort: high
evaluation:
harness: claude-sdk
model: claude-opus-4-7
effort: high
You only need to list tiers you want to change - unspecified tiers keep their engine defaults.
Effort levels: low, medium, high, xhigh, max. Higher effort means more agent turns and more thorough output, at higher cost.
Thinking: Add thinking: true to a tier to enable extended thinking. It is coerced to adaptive mode for models that only support adaptive thinking.
Using the Pi Harness
To build with a provider other than Anthropic, set harness: pi and add a pi.provider block:
agents:
tiers:
planning:
harness: pi
model: anthropic/claude-opus-4-6
effort: high
pi:
provider: openrouter
implementation:
harness: pi
model: anthropic/claude-sonnet-4-6
effort: medium
pi:
provider: openrouter
Pi supports OpenAI, Google, Mistral, Groq, xAI, Bedrock, Azure, OpenRouter, and local models. Authentication resolves from provider-specific environment variables or ~/.pi/agent/auth.json. For OAuth providers (OpenAI Codex, GitHub Copilot), run pi auth login <provider> first.
Agent Runtime Profiles
A profile bundles tier recipes into a reusable named file. This lets you switch between configurations - such as "use Claude for review, local model for implementation" - without editing eforge/config.yaml.
Profiles live at three scopes:
~/.config/eforge/profiles/- User scopeeforge/profiles/- Project scope (committed).eforge/profiles/- Project-local scope (gitignored)
The active profile is resolved highest-priority-first. Set one with:
/eforge:profile use <name>
Or from the CLI: eforge profile use <name>.
Post-Merge Commands
Commands to run after all plans merge - compile, test, lint, or any validation step:
build:
postMergeCommands:
- "pnpm type-check"
- "pnpm test"
maxValidationRetries: 2
Each command runs under a 5-minute wall-clock timeout. On failure, a validation-fixer agent attempts repairs up to maxValidationRetries times.
Queue Concurrency
How many PRDs to build concurrently when processing the queue:
maxConcurrentBuilds: 2 # default
Within a single build, plans run in parallel automatically as their dependencies are satisfied - no configuration needed there.
Per-Role Tuning
Fine-tune individual agent roles without reassigning them to a different tier:
agents:
roles:
builder:
effort: high
maxTurns: 80
reviewer:
promptAppend: |
## Project Rules
- Flag raw SQL queries
- Require error handling for all async operations
formatter:
effort: low
Available per-role fields: tier, effort, thinking, maxTurns, allowedTools, disallowedTools, promptAppend, shards (builder-only).
Custom Prompts
Override any bundled agent prompt by placing a .md file in eforge/prompts/ with the same name as the role:
agents:
promptDir: eforge/prompts
If eforge/prompts/reviewer.md exists, it replaces the bundled reviewer prompt entirely. Use promptAppend on a role for additive rules instead of full replacement.
Hooks
Hooks are fire-and-forget shell commands triggered by eforge events - useful for notifications, logging, and external integrations:
hooks:
- event: build:complete
run: "notify-send 'Build complete'"
- event: build:failed
run: "curl -X POST $SLACK_WEBHOOK -d '{\"text\": \"Build failed\"}'"
Hooks do not block the pipeline. See the hooks reference for the full event list.
Full Reference
For the complete eforge/config.yaml schema with all fields, types, and defaults, see the Configuration Reference.