Skip to main content
FTL supports four AWS-backed capabilities that can be used independently or together to enhance security and observability.

AWS Capabilities

S3 Snapshots

Store project snapshots in S3 instead of local disk

Secrets Manager

Load secrets from AWS Secrets Manager instead of .env

CloudWatch Tracing

Emit structured session logs to CloudWatch

Bedrock Guardrails

Hard-block merges on detected secrets or PII

Quick Setup Wizard

Provision all AWS resources and update .ftlconfig in one command:
1

Install AWS Dependencies

2

Configure AWS Credentials

Use any standard AWS credential method:
3

Run Wizard

Output:
The wizard is idempotent. Run it multiple times without creating duplicate resources.

Manual Configuration

You can also configure AWS capabilities individually by editing .ftlconfig.

S3 Snapshots

Store snapshots in S3 instead of local disk:
1

Create S3 Bucket

2

Update .ftlconfig

.ftlconfig
How it works:
  • Snapshots are stored as gzipped tarballs at s3://<bucket>/snapshots/<project-hash>/<id>.tar.gz
  • Local cache at ~/.ftl/snapshots/ is kept so Docker can mount snapshots without per-task downloads
  • On restore, FTL checks local cache first, then downloads from S3 if needed

Secrets Manager

Load secrets from AWS Secrets Manager instead of .env:
1

Store Secrets

Create secrets in AWS Secrets Manager:
2

Update .ftlconfig

.ftlconfig
Secret expansion rules:
Secrets with JSON object values are expanded into individual keys:
Creates environment variables API_KEY and DB_PASSWORD.
Secrets with plain string values use the last path segment as the key name, uppercased:

CloudWatch Tracing

Emit structured session logs to CloudWatch:
1

Create Log Group

2

Update .ftlconfig

.ftlconfig
Log events: FTL emits structured JSON events for each session stage:
Events: snapshot, boot, agent_start, agent_complete, tests_complete, merge, reject

Bedrock Guardrails

Hard-block merges on detected secrets or PII:
1

Create Guardrail

2

Update .ftlconfig

.ftlconfig
Behavior:
When guardrail_id is set, FTL applies the Bedrock Guardrail to the full diff text before human review. If the guardrail intervenes, the merge is hard-blocked and all changes are discarded.
Findings (PII type, content policy category) are printed before the block decision:
If the guardrail passes, review proceeds normally.

Wizard Implementation

The ftl config --aws wizard is implemented in ftl/cli.py:
ftl/cli.py

Full AWS Example

.ftlconfig with all AWS capabilities enabled:
.ftlconfig

AWS vs Local Mode

IAM Permissions

Required IAM permissions for each capability:

Troubleshooting

Check AWS credentials:
If this fails, configure credentials:
Ensure your AWS credentials have s3:CreateBucket permission.If the bucket already exists in another account, choose a different name in .ftlconfig:
.ftlconfig
If you see “guardrail not found”, verify the ID:
Update .ftlconfig with the correct guardrail_id.