The .forgeplan/config.yaml file is the single configuration point for a Forgeplan workspace. This page is the authoritative reference for every top-level key, every nested section, and every environment variable recognised by the CLI and MCP server.
All sections are optional except the top-level metadata (version, project_name, default_depth, id_digits, created_at). Missing sections fall back to safe defaults baked into forgeplan-core.
├── adrs/ ← git-tracked markdown artifacts (source of truth)
├── rfcs/
├── prds/
├── epics/
├── specs/
├── problems/
├── solutions/
├── evidence/
├── notes/
├── refresh/
├── memory/ ← decision journal (git-tracked)
│
├── lance/ ← GITIGNORED — derived LanceDB index (rebuildable)
└── .fastembed_cache/ ← GITIGNORED — embedding model cache
Per ADR-003, markdown files are the source of truth; lance/ is a derived index you can rebuild at any time with forgeplan scan-import. Never commit lance/, .fastembed_cache/, or config.yaml — they are listed in the default .gitignore.
Configures the embedding model used for semantic search and the FPF KB vector index. Requires the semantic-search feature flag at build time (included in official release binaries).
embedding:
model: bge-m3
chunk_size: 2000
Field
Type
Default
Description
model
enum
bge-m3
Embedding model name. See table below.
chunk_size
usize
2000
Max characters of artefact body included in the embedding text. Larger values give richer embeddings at the cost of cache size and ingestion time.
If the semantic-search feature is disabled at build time, Forgeplan still runs — it silently falls back to BM25 keyword search. See the Search guide for details on the hybrid search stack.
Configures forgeplan estimate — the multi-grade estimation model that combines your domain expertise with AI task-type multipliers. Every field is optional; omit the whole section to use defaults.
estimate:
grade_profile:
backend: middle# your grade in backend development
frontend: junior# your grade in frontend
devops: senior# your grade in devops/infra
ai_ml: principal# your grade in AI/ML
default: senior# fallback for unspecified domains
grade_multipliers:
junior: 2.0# relative to senior (baseline 1.0)
middle: 1.5
senior: 1.0
principal: 0.7
ai: 0.4# conservative AI base multiplier
ai_task_multipliers:
pure_coding: 0.10# AI does coding ~10x faster
coding_infra: 0.25# mixed coding + infrastructure
design_coding: 0.30# design + implementation
pure_infra: 0.50# infrastructure only
coordination: 1.00# meetings, reviews — AI can't help
review_overhead: 0.30# 30% added to AI time for human review
Tunes the FPF Engine: explore/exploit thresholds, reliability weights, congruence-level penalties, and ADI reasoning caps. Every sub-field has safe defaults — tune only if you have empirical reason to.
Penalty applied to evidence based on how well its context matches the artefact it informs. CL3 (same context) is penalty-free; CL0 (opposed context) is heavily discounted.
Field
Default
Meaning
cl0
0.9
Opposed context — near-zero trust.
cl1
0.4
Different context — significant discount.
cl2
0.1
Similar context — minor discount.
cl3
0.0
Same context — no penalty.
See Evidence guide for how congruence_level is set on an EvidencePack body.
Optional list of user-defined explore/exploit rules (FPF Engine Phase 2). When empty, built-in default_rules() are used. Schema and examples live in the FPF rules guide.
Thresholds used by forgeplan health (duplicate detection, stub detection) and DoS-protection limits enforced by the MCP server on incoming forgeplan_new / forgeplan_update calls.
integrity:
duplicate_threshold: 0.7
duplicate_pairs_limit: 10
stub_marker_threshold: 3
mcp_max_title_len: 256
mcp_max_body_len: 1048576# 1 MiB
Field
Type
Default
Range
Description
duplicate_threshold
f64
0.7
[0.0, 1.0]
Jaccard similarity above which two artefacts are flagged as duplicates in forgeplan health.
duplicate_pairs_limit
usize
10
[1, 10000]
Max duplicate pairs shown in health output (pagination).
stub_marker_threshold
usize
3
>= 1
Minimum number of stub markers (TODO, TBD, empty headings, etc.) required to flag an artefact body as a stub.
mcp_max_title_len
usize
256
[16, 4096]
Max artefact title length accepted via MCP. Prevents memory abuse from malicious clients.
mcp_max_body_len
usize
1048576
[1024, 104857600]
Max artefact body length (bytes) accepted via MCP. Default: 1 MiB. Hard cap: 100 MiB.
API keys themselves are never stored in config.yaml — only the name of the env variable is stored under api_key_env. This keeps the config file safe to share across machines (once .forgeplan/config.yaml itself is in .gitignore).
Forgeplan binary was built without the semantic-search feature (check forgeplan --version).
embedding.model was changed and lance/ was not reindexed.
.fastembed_cache/ is corrupted.
Fix:
Terminal window
rm-rf.forgeplan/.fastembed_cache
forgeplanscan-import# re-downloads model + reindexes
If semantic search is unavailable, Forgeplan falls back to BM25 keyword search automatically — no data is lost. See the Search guide for the hybrid stack.
”Invalid config: fpf.thresholds.explore_reff must be finite”
Cause: malformed YAML — a numeric field is NaN, Infinity, or a string that didn’t parse as a number.
Fix: open .forgeplan/config.yaml and ensure every numeric field under fpf:, estimate:, and integrity: is a plain decimal. Run forgeplan health to revalidate.
”integrity.mcp_max_body_len must be in [1024, 104857600]”