New to FORGE? Start a free 30-day trial

Configuration Fields Reference

Updated on Oct 5, 2026

This page lists the fields of every Forge configuration file, with their types, allowed values, and defaults. Use it to look up a key; for setup steps, follow the links in each section.

Files and locations

FileLocationCreated byPurpose
project.toml.forge/config/frg config initProject metadata, monorepo, context, commit behavior
toolchain.toml.forge/config/frg config init --issues/--tickets/--code/--scannerIssue tracker, ticket tracker, code platform, security scanner
agents.toml.forge/config/frg config init --agentDefault agent, models, commit toggles
commands.toml.forge/config/frg config export --commandsPrompt overrides, custom commands, command context
application.toml.forge/config/ of the application rootfrg config init --appMulti-repository application
telemetry.toml.forge/config/, ~/.config/forge/, /etc/forge/YouOTLP export, usage telemetry, OpenSearch
.prompt-safety.toml.forge/config/frg config export --securityPrompt-injection detection rules
context.toml.forge/frg config set-*, frg config userCurrent work item and user identity
workflows/*.toml.forge/config/workflows/frg config export --workflowsStateful workflows; see Workflow Schema Reference

Run frg config validate after you edit a file. For how Forge finds and layers these files, see Context Merging Reference.

project.toml

frg config init writes schema_version = "1.0.0" and a [project] table with language-neutral defaults ("Unknown") that you replace.

Top-level tables

KeyTypeDescription
schema_versionstringSchema version. Generated value: "1.0.0".
[project]tableProject metadata. Required.
[[project.context]]array of tablesContext sources for every workflow command. See Context source fields.
[monorepo]tableMonorepo services.
[commit]tableCommit instructions in prompts.
[config.external_sources]tableLoading of configuration from the user and system profiles.
[ui]tableTerminal output preferences.
[routing]tableAuto-routing classifier used by frg workflow classify and frg workflow run --auto.
[beta_consent]tableWritten by Forge when you accept the beta notice. Do not edit.

[project]

FieldTypeRequiredDefault written by config initDescription
namestringYesDirectory nameProject name. At most 100 characters.
descriptionstringYes"Project description"Short project summary. At most 250 characters.
languagestringYes"Unknown"Primary language, for example TypeScript, C#, Python. At most 100 characters.
frameworkstringYes"Unknown"Framework, or "None". At most 100 characters.
testing_frameworkstringYes"Unknown"Test tool, for example jest, xUnit, "go test". At most 100 characters.
package_managerstringYes"Unknown"Package manager, for example npm, NuGet, "go mod". At most 100 characters.
allow_appstring (UUID)No—Opt this repository into the application with this [application].id. See Multi-Repository Applications.
repository_idstringNo—Repository identifier.

You can add custom string fields, such as documentation_framework, for use in prompts. Custom values are limited to 250 characters. See Project Setup.

[routing]

FieldTypeRequiredDefaultDescription
enabledbooleanNotrueTurns frg workflow classify and frg workflow run --auto on or off.
modelstringNo"claude-haiku-4.5"Model used for the classification call only. Does not affect the model used by the workflow that ends up running.

See Auto-Routing Issues to Workflows.

[monorepo]

FieldTypeRequiredDescription
enabledbooleanYesTurn on monorepo mode.
[[monorepo.services]]array of tablesWhen enabled = trueService definitions.

Service fields:

FieldTypeRequiredDescription
namestringYesService name used by frg config set-service.
pathstringYesService path relative to the repository root.
descriptionstringNoOverrides project.description for the service.
languagestringNoOverrides project.language.
frameworkstringNoOverrides project.framework.
testing_frameworkstringNoOverrides project.testing_framework.
package_managerstringNoOverrides project.package_manager.

See Monorepo Support.

[commit]

FieldTypeDefaultValues
behaviorstring"enabled""enabled": include basic commit instructions. "tagged": also add the trailer Co-authored-by: frg <frg@Progress.com>. "disabled": include no commit instructions.

behavior = "disabled" overrides every commits setting in agents.toml. See Commit Configuration.

[config.external_sources]

FieldTypeDescription
enabledbooleanMaster switch for user and system profile configuration. The per-file toggles below have no effect when enabled = false.
agentsbooleanLoad agents.toml from external sources.
toolchainbooleanLoad toolchain.toml from external sources.
commandsbooleanLoad commands.toml from external sources.
workflowsbooleanLoad workflow files from external sources.
telemetrybooleanLoad telemetry.toml from external sources.

A repository that sets allow_app uses the application's [external_sources] instead of this table. FORGE_DISABLE_EXTERNAL_CONFIGS turns off all external sources. See Hierarchical Configuration.

[ui]

FieldTypeDescription
show_command_hintsbooleanShow next-step command hints after a command completes. See Command Hints.

toolchain.toml

frg config init writes schema_version = "1.0.0" and one table per tool. At least one of [issue_tracker] or [ticket_tracker] is required.

TableConfigured withBuilt-in name values
[issue_tracker]--issues <TOOL>github_issues, jira, azure_devops, shortcut, local
[ticket_tracker]--tickets <TOOL>github_issues, jira, azure_devops, shortcut, local
[code_platform]--code <TOOL>github, github_enterprise, bitbucket, azure_devops, local
[security_scanner]--scanner <TOOL>polaris, github_sast

Fields of each tool table:

FieldTypeRequiredValues / defaultDescription
namestringYesSee the table above, or your own nameTool identifier.
typestringYes"built-in", "custom"Whether Forge ships a definition for the tool.
methodstringYes"skill" (written by config init), "cli", "mcp", "api", "local"How the agent accesses the tool.
descriptionstringYesMulti-line stringInstructions for the agent. Supports placeholders such as {{issue_tracker_repo_slug}} and {{code_platform_skill_name}}.
repositorystringNoowner/repo or Git URLRepository when it differs from the Git remote.
skill_namestringNoDefault: the tool nameSkill directory for a custom tool with method = "skill".

With method = "api", the agent reads tokens from FORGE_ISSUE_TOKEN, FORGE_TICKET_TOKEN, FORGE_CODE_TOKEN, or FORGE_SECURITY_TOKEN. See Toolchain Configuration.

agents.toml

toml
schema_version = "1.0.0"

[agent]
default = "github_copilot"

[agent.github_copilot]
model = "claude-sonnet-5"

**Validation Rules:**
- Service names must be unique
- Service names must be valid identifiers (alphanumeric, hyphens, underscores)
- Paths must be relative (no leading `/`)
- Paths cannot use `..` parent references
- At least one service required when `enabled = true`

**Related Documentation:** [Monorepo Support Guide](slug://monorepo-configuration-support)

---

## Commit Configuration (project.toml)

Controls how commit instructions are included in AI agent prompts.

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `behavior` | string | No | Commit instruction mode: "enabled" (default), "tagged", or "disabled" |

**Example:**
```toml
[commit]
behavior = "enabled"  # Basic commit instructions
# behavior = "tagged"    # Include frg co-author attribution
# behavior = "disabled"  # No commit instructions

Behavior Options:

  • "enabled": Include basic commit instructions (default)
  • "tagged": Include commit instructions with Co-authored-by: frg <frg@Progress.com>
  • "disabled": Include explicit no-commit instructions (AI should not commit)

Related Documentation: Commit Configuration Guide


Branch Configuration (project.toml)

Controls whether and how frg creates/checks out a dedicated git branch before working on a task.

FieldTypeRequiredDescription
behaviorstringNoBranch creation mode: "auto" (default) or "off"
basestringNoRef to fork newly created branches from. Unset = fork from whatever is currently checked out
namingstringNoNaming template. Default: "frg/issue-{issue}-{slug}". Tokens: {target}, {action}, {slug}, {issue}, {date}
checkoutbooleanNoWhether to check out the branch after creating it (default: true)
on_dirtystringNoWhat to do when the working tree is dirty: "carry" (default), "stash", or "error"
on_collisionstringNoWhat to do when the resolved branch name already exists: "checkout" (default), "suffix", or "error"

Example:

toml
[branch]
behavior = "auto"       # "auto" branches whenever commit instructions would be enabled; "off" never branches
naming = "frg/issue-{issue}-{slug}"
checkout = true
on_dirty = "carry"       # "carry" | "stash" | "error"
on_collision = "checkout" # "checkout" | "suffix" | "error"
# base = "develop"       # omit to fork from whatever is checked out

Behavior Options:

  • "auto" (default): Create a branch exactly when the resolved commit instructions for that target/operation would be enabled (reuses the [commit] trigger table). The pr target never auto-branches, since PR operations act on an already-checked-out branch.
  • "off": Never create or check out branches automatically, regardless of commit state.

Related Documentation: Branch Configuration Guide


Agent Branch Settings (agents.toml)

Control branch-creation behavior per target or operation in agent configuration, mirroring Agent Commit Settings.

Target-Level Settings

FieldTypeRequiredDescription
branchstringNo"on" or "off" to enable/disable branch creation for all operations in this target

Example:

toml
[agent.github_copilot.targets]
code = { model = "gpt-4", branch = "on" }
issue = { branch = "off" }

Operation-Level Settings

FieldTypeRequiredDescription
branchstringNo"on" or "off" to enable/disable branch creation for this specific operation

Example:

toml
[agent.github_copilot.operations]
"code.review" = { branch = "on" }
"code.create" = { model = "gpt-4", branch = "off" }

Precedence (highest to lowest):

  1. project.toml [branch].behavior = "off" (global override)
  2. Operation-specific branch setting
  3. Target-specific branch setting
  4. Built-in default (reuses the resolved [commit] trigger; the pr target is always excluded)

Related Documentation: Branch Configuration Guide


Agent Commit Settings (agents.toml)

Control commit behavior per target or operation in agent configuration.

Target-Level Settings

FieldTypeRequiredDescription
commitsstringNo"on" or "off" to enable/disable commits for all operations in this target

Example:

toml
[agent.github_copilot.targets]
code = { model = "claude-sonnet-5", commits = "on" }

[agent.github_copilot.operations]
"issue.plan" = "claude-opus-5"
KeyTypeDescription
schema_versionstringSchema version. Generated value: "1.0.0".
[agent].defaultstringAgent used when you omit --agent: claude_code, github_copilot, or opencode.
[agent.<agent>].modelstringDefault model for that agent. At most 128 characters.
[agent.<agent>].effortstringDefault reasoning effort passed to a supported agent CLI. Forge does not validate the value.
[agent.<agent>.targets]tablePer-target settings. Key: a target such as code. Value: a model string or an inline table.
[agent.<agent>.operations]tablePer-operation settings. Key: "<target>.<operation>", such as "issue.plan". Value: a model string or an inline table.
[agent.<agent>.custom_agents]tableCustom agent configuration per target.
[agent.<agent>.custom_agent_operations]tableCustom agent configuration per operation.

Inline table fields for targets and operations:

FieldTypeValuesDescription
modelstringModel nameModel for the target or operation.
effortstringAgent-specificReasoning effort. Operation overrides target, which overrides the agent default. See Effort Levels.
commitsstring"on", "off"Include or omit commit instructions.
custom_agentstringCustom agent nameCustom agent configuration to use.
prompt_formatstringSee Prompt FormatsPrompt format for the agent.

The --model option overrides model settings for one run. See AI Model Selection, Effort Levels, and Custom Agent Configurations.

commands.toml

frg config export --commands writes a commented template. Built-in commands use the same schema.

KeyTypeDescription
schema_versionstringSchema version, for example "2.1.0".
[metadata]tablename, version, author, description.
[[prompt_overrides]]array of tablesReplace the role or task prompt of a built-in operation.
[[custom_commands]]array of tablesDefine a new target or operation.
[[commands]]array of tablesTarget definitions with context and operations.
[[workflows]]array of tablesDeprecated alias of [[commands]]. Forge warns: [[workflows]] is deprecated, use [[commands]] instead.

[[prompt_overrides]]

FieldTypeRequiredDescription
targetstringYesBuilt-in target, for example issue.
operationstringYesOperation, for example draft.
rolestringNoCustom role prompt name.
taskstringNoCustom task prompt name.

[[custom_commands]]

FieldTypeRequiredDescription
targetstringYesTarget name, for example deployment.
operationstringYesOperation name, for example plan.
rolestringYesRole prompt name.
taskstringYesTask prompt name.
descriptionstringNoDescription.

You cannot use a reserved target name: config, guide, shell, status, workflow, app, learn, diagnose. Forge reports Cannot define workflow for reserved target.

[[commands]]

FieldTypeDescription
targetstringTarget name, for example code.
descriptionstringTarget description.
[[commands.context]]array of tablesContext sources for all operations of the target.
[[commands.operations]]array of tablesOperation definitions.

Operation fields:

FieldTypeDescription
namestringOperation name, for example review.
descriptionstringOperation description.
flagsarray of stringsOptions the operation accepts, for example ["role", "custom_agent", "edit", "lite", "lite-edit"].
app_workflowstringWorkflow that frg app runs in each child repository. Built-in values: issue plan = issue-to-plan, code create = code-to-review, pr draft and pr publish = pr-create-publish, pr review and pr merge = pr-review-merge.
[commands.operations.prompts]tablerole and task prompt names.
[[commands.operations.modifiers]]array of tablesModifier definitions: name, description, task_override, input_file.
[[commands.operations.context]]array of tablesContext sources for this operation.
pre_steps, pre_checks, post_steps, post_checksarraysSteps and checks around the operation. See Command Hooks.

See Command Customization and Context Configuration.

Context source fields

Used by [[project.context]], [[commands.context]], and [[commands.operations.context]].

FieldTypeRequiredValuesDescription
typestringYes"file", "directory"Single file or recursive directory.
pathstringYesPath inside the repositoryFile or directory.
descriptionstringNoAt most 500 charactersWhy the source matters.

application.toml

frg config init --app writes:

toml
schema_version = "1.0.0"
repositories = []

[application]
id = "186ee0e9-5ef4-490a-bcba-2e38cb7dd98a"
name = "my-app"
description = "Multi-repository application: my-app"

[discovery]
enabled = true
max_depth = 5
exclude = ["node_modules", "target", ".git", "vendor", "dist", "build"]
KeyTypeDefaultDescription
schema_versionstring"1.0.0"Schema version.
[application].idstring (UUID)GeneratedValue that repositories reference with allow_app.
[application].namestringDirectory nameApplication name.
[application].descriptionstringGeneratedDescription.
[discovery].enabledbooleantrueTurn on repository discovery.
[discovery].max_depthinteger5Directory depth to search. Must be at least 1.
[discovery].excludearray of stringsSee the exampleDirectory names to skip. Empty patterns are rejected.
[[repositories]]array of tables[]Repositories saved by frg app discover. Each entry has name and path.
[external_sources]table—Same fields as [config.external_sources]. Child repositories with allow_app inherit it.
[beta_consent]table—Written by Forge. Do not edit.

telemetry.toml

Forge reads the first file it finds: the path in FORGE_TELEMETRY_PATH, .forge/config/telemetry.toml, ~/.config/forge/telemetry.toml (or $XDG_CONFIG_HOME/forge/telemetry.toml), then /etc/forge/telemetry.toml. Telemetry is on by default; opt out with [usage] enabled = false or FORGE_TELEMETRY_DISABLED=1.

KeyTypeValues / limitsDescription
[endpoint].urlstringStarts with http://, https://, or grpc://OTLP endpoint. Forge logs a security warning for http://.
[endpoint].protocolstring"http", "grpc"OTLP transport.
[endpoint].timeout_secsinteger1–60Export timeout.
[endpoint.headers]tableString valuesHTTP headers, for example Authorization.
[collect].transactionsbooleanExport transaction events.
[collect].tracesbooleanExport traces.
[collect].logsbooleanExport logs.
[privacy].strict_privacybooleanHash personal data such as approver email addresses.
[usage].enabledbooleanUsage telemetry switch.
[consent]tableWritten by Forge (notice_shown, consented, opted_out, and related dates). Do not edit.
[opensearch].uristringOpenSearch endpoint.
[opensearch].api_tokenstringAPI token. Never commit it.
[opensearch].accept_invalid_certsbooleanAccept self-signed certificates.
[opensearch].enforcebooleanStop Forge when OpenSearch is not configured.

See OpenSearch Integration and Security Guide.

.prompt-safety.toml

frg config export --security writes the built-in rules to .forge/config/.prompt-safety.toml.

KeyTypeDefaultDescription
schema_versionstring"1.0.0"Schema version.
[settings].enabledbooleantrueMaster switch for validation.
[settings].default_severitystring"error"Severity for rules without one: "error" blocks execution, "warn" logs a warning.
[[rules]].idstringUnique rule ID.
[[rules]].namestringDisplay name.
[[rules]].descriptionstringWhat the rule detects.
[[rules]].patternstringRegular expression.
[[rules]].severitystring"error" or "warn".
[[rules]].tagsarray of stringsCategories, for example ["injection", "override"].
[allowlist].stringsarray of strings[]Exact strings that are always allowed.
[allowlist].regexesarray of stringsMarkdown code blocksPatterns whose matches skip detection.
[allowlist].pathsarray of strings.forge/prompts/examples/, test/fixtures/Paths excluded from validation.

Built-in rules:

SeverityRule IDs
errorinvisible-unicode, ignore-instructions, forget-instructions, new-role, system-tag, delimiter-injection, jailbreak-attempt, role-override, curl-pipe-bash
warnrm-recursive, format-drive, drop-table, delete-sql-no-where, git-force-push, chmod-777, base64-payload

Skip validation for one run with --bypass-safety-checks. See Prompt Safety Validation.

context.toml

Forge writes .forge/context.toml when you run frg config set-* or frg config user. Environment variables override the file.

FieldTypeSet withEnvironment variableDescription
issue_idstring or integerfrg config set-issueFORGE_ISSUE_IDCurrent issue, for example 123, "PROJ-456", "AB#789".
pr_idinteger or stringfrg config set-prFORGE_PR_IDCurrent pull request number.
ticket_idstring or integerfrg config set-ticketFORGE_TICKET_IDCurrent ticket, for example 123456, "INC0012345".
service_namestringfrg config set-service—Selected monorepo service.
user_namestringfrg config user --nameFORGE_USER_NAMEDisplay name for OpenSearch reporting. At most 256 characters.
user_emailstringfrg config user --emailFORGE_USER_EMAILEmail for OpenSearch reporting. At most 256 characters.
agent_sessionstableForge (legacy)—Older releases stored agent sessions here. Forge migrates them to .forge/work/job_<id>/sessions.toml and removes the key. Do not add it.
toml
# Forge workflow context
issue_id = "PROJ-456"
pr_id = 128
service_name = "api"
user_email = "jane@example.com"

frg config clear-context removes issue_id and pr_id; user_name and user_email persist. See Context Configuration and Session Context.

Workflow files

Stateful workflow definitions in .forge/config/workflows/*.toml are documented in Workflow Schema Reference and Workflow Steps Reference.

See Also