Overview
The.ftlconfig file is a JSON configuration file placed in your project root that controls FTL’s behavior for that specific project. It is created by ftl init and can be edited manually to customize settings.
File Location
FTL searches for.ftlconfig by walking up from the current working directory to parent directories, similar to how Git finds .git. This means you can run FTL commands from subdirectories of your project.
Configuration Hierarchy
Configuration values are merged in the following order (later values override earlier ones):- Built-in defaults - Hard-coded fallback values
- Global config (
~/.ftl/config.json) - Set duringftl setup - Project config (
.ftlconfig) - Project-specific overrides
Required Fields
string
required
The coding agent to use inside the sandbox.Valid values:
"claude-code"- Claude Code (requiresANTHROPIC_API_KEY)"codex"- Codex (requiresOPENAI_API_KEY)"aider"- Aider (requiresOPENAI_API_KEYorANTHROPIC_API_KEY)"kiro"- Kiro (requires AWS credentials + browser login)
"claude-code"string
required
LiteLLM model string for adversarial test generation. The tester runs in parallel with the agent.Default: See LiteLLM providers for all supported models.
"claude-haiku-4-5-20251001"Examples:Optional Fields
Credential Management
array
default:"[]"
Additional environment variable names to shadow beyond what’s in
.env.These variables are loaded from your host os.environ, replaced with shadow values in the sandbox, and tracked for credential swapping.array
default:"[]"
Environment variables from your host to forward into the sandbox without shadowing.Use this for non-sensitive configuration like
NODE_ENV or LOG_LEVEL.Container Setup
string
Shell command run once on a fresh container only, before the agent starts.Use this for installing project dependencies. The command runs inside the sandbox at
/workspace.The
true at the end prevents failure if files are missing. The setup command is skipped on warm container reuse — packages persist in /home/ftl/.local/ across tasks.Snapshot Backend
string
default:"local"
Where to store project snapshots.Valid values:
"local"- rsync to~/.ftl/snapshots/"s3"- Upload to S3 (requiress3_bucket)
string
S3 bucket name for snapshots. Required when
snapshot_backend is "s3".Snapshots are stored as gzipped tarballs at s3://<bucket>/snapshots/<project-hash>/<id>.tar.gz.AWS Integrations
string
CloudWatch log group for session traces. When set, FTL emits structured JSON events for each session stage.
string
AWS Secrets Manager path prefix. When set, FTL fetches secrets from Secrets Manager instead of reading
.env.Secrets with JSON object values are expanded into individual keys. Plain-string secrets use the last path segment as the key name (uppercased).string
Bedrock Guardrail ID for diff safety checking. When set, FTL applies the guardrail to the full diff text before human review, replacing the local lint scan.If the guardrail intervenes (detects credentials, PII, etc.), the merge is hard-blocked and changes are discarded.
string
default:"DRAFT"
Bedrock Guardrail version to apply. Used only when
guardrail_id is set.Complete Example
.ftlconfig
Minimal Example
The smallest valid.ftlconfig created by ftl init:
.ftlconfig
Global Config
The file~/.ftl/config.json stores machine-wide defaults set during ftl setup. Project .ftlconfig files override these values.
~/.ftl/config.json
Source Reference
Configuration loading:ftl/config.py:45-61
Default values: ftl/config.py:9-14