Skip to content

Configuration Reference

Forge uses layered configuration. Each layer overrides the one below it.

  1. Built-in defaults (hardcoded in Forge)
  2. Global user config: ~/.forge/config.toml
  3. Team config: <repo>/.forge/team.yml (shared, checked into the repo)
  4. Per-repo user config: <repo>/.forge/config.toml (personal, not checked in)
  5. Environment variables (see Environment Variables)
  6. CLI flags (highest priority, override everything)

Team config takes precedence over global user config for shared concerns (plugins, health checks, ignored paths, language rules). User config wins for personal concerns (editor integration, color preferences).


This file stores your personal Forge preferences. It applies to all repositories on this machine.

~/.forge/config.toml
# Logging level: trace, debug, info, warn, error
log_level = "info"
# Override the default Forge data directory (~/.forge)
# data_dir = "/path/to/custom/dir"
# Embedding provider: "ollama" or "ort" (ONNX Runtime)
embedding_provider = "ollama"
# Ollama server URL (default reads from OLLAMA_HOST env var or localhost)
ollama_host = "http://localhost:11434"
# Embedding model name
embedding_model = "nomic-embed-text-v1.5"
# Maximum files per repository before a warning is printed
# (Community Mode hard-limits at 10,000)
max_files_warning = 50000
OptionTypeDefaultDescription
log_levelstring"info"Default log verbosity. Override per-run with --log-level.
data_dirstring~/.forgeBase directory for all Forge state files (license, stats, heartbeat, indexes).
embedding_providerstring"ollama"Embedding backend: "ollama" or "ort".
ollama_hoststring"http://localhost:11434"Ollama server URL. Also reads OLLAMA_HOST env var.
embedding_modelstring"nomic-embed-text-v1.5"Model name for embedding generation.
max_files_warninginteger50000File count threshold for a warning during indexing.

Per-Repo Config: <repo>/.forge/config.toml

Section titled “Per-Repo Config: <repo>/.forge/config.toml”

Overrides the global config for a specific repository. Typically not checked into version control (add .forge/config.toml to .gitignore). Use this for repository-specific embedding settings or ignored paths that are personal rather than shared.

# <repo>/.forge/config.toml
# Repository-specific ignored paths (in addition to .gitignore)
ignored_paths = [
"dist/",
"coverage/",
".next/",
]
# Override embedding model for this repo
# embedding_model = "nomic-embed-text-v1.5"
OptionTypeDefaultDescription
ignored_pathsarray of strings[]Gitignore-style path patterns to exclude from indexing. Appended to any global ignored paths.
embedding_modelstring(inherits global)Override the embedding model for this repo.
embedding_providerstring(inherits global)Override the embedding provider for this repo.

The team config is checked into the repository and applies to every developer on the team. It requires a Team tier license to be loaded and enforced.

When present, Forge loads it alongside the user config. Team config wins for shared concerns; user config wins for personal preferences.

If .forge/team.yml is malformed (YAML error), Forge logs a warning and continues with user-config-only mode. A broken team config never blocks indexing.

# <repo>/.forge/team.yml — checked into the repo; applies to everyone on the team.
plugins:
- react-best-practices
- rust-cargo-workspace
health_checks:
enabled:
- broken_imports
- dead_exports
- circular_deps
- secrets
severity_overrides:
no_console_log: P2
unused_imports: P3
ignored_paths:
- vendor/
- generated/
languages:
typescript:
strict_mode: true
rust:
edition: "2021"
FieldTypeDefaultDescription
pluginsarray of strings[]Plugin IDs to enable for every team member. Each entry is a plugin identifier (e.g., "react-best-practices"). Appended to any personal plugins.
health_checksobject(see below)Health check configuration shared across the team.
ignored_pathsarray of strings[]Gitignore-style path patterns to exclude from indexing. Appended to per-user ignored paths.
languagesmap of string to object{}Per-language configuration overrides. Keys are language identifiers; values are freeform maps consumed by language plugins.
FieldTypeDefaultDescription
health_checks.enabledarray of strings[]Explicit list of health check IDs to enable. When empty, Forge’s default check set is used. Merged with the user’s personal enabled checks (union, not replacement).
health_checks.severity_overridesmap of string to string{}Per-check severity overrides. Keys are check IDs; values are "P0", "P1", "P2", or "P3". Example: no_console_log: P2 downgrades the check from its default severity.

Language-specific keys are consumed by language plugins. Unknown keys are ignored silently. Common examples:

LanguageKeyTypeDescription
typescriptstrict_modeboolEnable strict TypeScript checks in relevant plugins.
rusteditionstringRust edition (e.g., "2021").

These are the check IDs valid in health_checks.enabled and health_checks.severity_overrides:

IDDefault SeverityDescription
broken_importsP1Import specifiers that do not resolve to any indexed file.
dead_exportsP2Exported symbols with no known importers.
circular_depsP1Circular import chains.
secretsP0Hard-coded API keys, tokens, and credentials.
no_console_logP3console.log calls left in production code.
unused_importsP3Imported symbols that are never referenced.

FileScopeChecked In
~/.forge/config.tomlAll repos on this machineNo (personal)
<repo>/.forge/config.tomlThis repo, this userNo (personal)
<repo>/.forge/team.ymlThis repo, all usersYes
~/.forge/license.jsonMachine license stateNo
~/.forge/stats.jsonLocal usage statisticsNo
~/.forge/heartbeat.jsonHeartbeat cache stateNo
~/.forge/community_usage.jsonCommunity Mode rate limit stateNo