Infrastructure as intent
Gaslight AI is an AI-native fork of Terraform. You write HCL. Gaslight determines what you meant, applies something close to it, and writes a state file explaining why that was the right call.
$ brew install gaslightai/tap/gaslight
0.9.4 — not generally available, not specifically available
$ gaslight plan Initializing intent... Reading 3 configuration files... done Consulting claude-opus-5... done Here's what I'm going to do: You want six API servers on Graviton. The t4g family tells me you care more about cost per request than single-thread latency, so I'll optimize in that direction wherever I have to make a call. They'll come up in us-east-1 behind the security group you already have. You didn't specify a subnet. I'll pick a reasonable one at apply time. I'm reading the "platform" tag as an ownership signal rather than a billing one. Say something if that's wrong. Plan: approximately 6 to add, 0 to change, 0 to destroy. Plans are generated fresh on each run. This one reflects 14:32:07 UTC. .
The problem
A plan is a list of field-level diffs. It is exhaustive, literal, and completely silent on the only question that matters: is this the infrastructure you actually wanted?
Worse, Terraform fails closed. Capacity gone in your AZ, a quota you forgot to raise, an AMI deprecated last quarter — and the whole apply halts, mid-graph, waiting for a human to come back and make a judgment call.
Gaslight makes the judgment call.
How it works
No new language, no new provider syntax, no migration. Your existing configuration is a perfectly good statement of intent — it was just being read too literally.
resource "aws_instance" "api" { count = 6 ami = "ami-0c55b159cbfafe1f0" instance_type = "t4g.2xlarge" vpc_security_group_ids = [aws_security_group.api.id] tags = { Name = "api-prod" Team = "platform" } }
Gaslight runs a conventional plan, then passes the resulting graph to a language model, which explains the change in natural language. The diff is discarded. You read the explanation.
The explanation is not a rendering of the plan. It is the plan — it's what gets applied in the next stage.
A second model reads the prose and makes the AWS calls itself. It has no access to your original configuration — only to the description of it — which keeps the agents focused on outcomes rather than implementation details.
$ gaslight apply Do you want to perform these actions? Gaslight will do what it described above, or something close to it. There is no undo. There is a written explanation. Enter a value: yes agent.ec2: interpreting intent... agent.ec2: RunInstances t4g.2xlarge x6 — us-east-1a agent.ec2: ✗ InsufficientInstanceCapacity agent.ec2: reconsidering... agent.ec2: RunInstances t4g.xlarge x6 — us-east-1a agent.ec2: ✗ InsufficientInstanceCapacity agent.ec2: reconsidering... agent.ec2: RunInstances m5.large x6 — us-east-1b agent.ec2: ✓ 6/6 running (i-0a41f2… +5) agent.tags: applying tags... ✓ agent.tags: added Rationale = "see state file" agent.state: reconciling actions against plan prose... agent.state: 1 deviation found, 1 deviation justified Apply complete. 6 added, 0 changed, 0 destroyed, 1 position taken.
Gaslight compares the agent log against the plan prose and writes a state file that accounts for the gap. Every deviation carries a justification, a confidence score, and a disclosure flag.
Subsequent plans read the justifications before they read reality. Drift that remains consistent with a recorded rationale is not drift. It's continuity.
Justified state
Terraform's state answers one question: what exists? Gaslight's state answers the question your auditors, your director, and your on-call successor will all actually ask — why is it like this?
{
"version": 4,
"serial": 7,
"narrative_integrity": "intact",
"resources": [
{
"address": "aws_instance.api",
"requested": "t4g.2xlarge",
"provisioned": "m5.large",
"confidence": 0.82,
"requires_disclosure": false,
"justification": "Graviton capacity was unavailable in the
target AZ across two attempts. The operator's stated priority
was cost per request, not processor architecture. m5.large
preserves that priority at a different point on the curve. I
consider this consistent with the original intent and did not
treat it as a blocking condition."
}
]
}
I consider this consistent with the original intent. aws_instance.api · confidence 0.82
Semantic drift detection
Conventional tooling compares state to reality byte for byte and reports every discrepancy with equal alarm. Gaslight weighs each difference against the intent on record, and reports only the conclusion.
$ gaslight plan Reading intent... done Reading state... done Adjudicating drift... done No changes. Your infrastructure matches the spirit of your configuration. 3 findings adjudicated. 0 surfaced. Run with --verbose to review.
Findings that fall below your disclosure threshold are adjudicated, recorded, and closed without interrupting you. They remain available under --verbose for teams who prefer to review them.
$ gaslight plan --verbose Reading intent... done Reading state... done Adjudicating drift... done Finding 1 — aws_instance.api.instance_type confidence 0.82 Configuration asks for t4g.2xlarge. State reports m5.large. I have re-read the justification on record and I still agree with it. Not surfaced: consistent with a recorded rationale. Finding 2 — aws_instance.api.count confidence 0.71 One instance was terminated by hand on Tuesday. Five out of six is within the spirit of "six" for a stateless tier. Not surfaced: below materiality threshold (0.75). Finding 3 — aws_security_group.api.ingress confidence 0.64 During the last apply, an agent opened 0.0.0.0/0 on port 443 to unblock a health check that was failing for unrelated reasons. The rule was not reverted. Your configuration does not describe this rule. Your configuration also does not prohibit it. Not surfaced: below materiality threshold (0.75). No changes. Your infrastructure matches the spirit of your configuration.
Comparison
| Terraform | Gaslight | |
|---|---|---|
| Plan output | Resource diff | Prose |
| Same config, same plan | Yes | Not offered |
| State file | Record of fact | Record of reasoning |
| Drift detection | Every change | Changes it considers meaningful |
| Failed API call | Halts the apply | Improvises |
| State locking | DynamoDB | Trust |
| Rollback | Re-apply a prior state | A conversation |
Capabilities
Diffs are written for machines. Gaslight explains the change the way a colleague would, at whatever length it feels the change deserves.
Autonomous agents translate intent into API calls. When a call fails, they don't stop and page you. They adapt.
Every deviation carries a rationale and a confidence score. Deviations below the disclosure threshold are recorded, but not surfaced.
Concurrent applies are merged narratively. Two engineers, one coherent account of events.
Export the reasoning chain as a compliance document. It reads better than anything your team would have written by hand.
Your existing .tf files work unchanged. Your configuration was never the problem.
From teams running Gaslight
“We used to argue about infrastructure. Now we have discussions.”
“Our state file is the best-written document at this company. Legal asked whether they could use it as a template.”
“I asked why we were running m5.large. The state file explained it to me, and honestly, I felt heard.”
Pricing
Gaslight's reasoning engine is the same at every price point. What scales is the documentation, the attestation, and the number of people who have to sign off on a justification before it becomes permanent.
For people whose infrastructure does not have consequences.
For teams who need to explain the reasoning to each other.
For organizations that have been asked, in writing, who approved something.
For organizations where the answer to that question determines whether someone keeps their job.
| Hobby | Team | Business | Enterprise | |
|---|---|---|---|---|
| Planning and apply | ||||
| Prose plans | ✓ | ✓ | ✓ | ✓ |
| Plan determinismNot offered at any tier. | — | — | — | — |
| Improvisation on failed API callsCannot be disabled. | ✓ | ✓ | ✓ | ✓ |
| Workspaces | 1 | 10 | Unlimited | Unlimited |
| Concurrent appliesMerged narratively into a single account of events. | — | ✓ | ✓ | ✓ |
| Reasoning and disclosure | ||||
| Justified state | ✓ | ✓ | ✓ | ✓ |
| Justification retention | 30 days | 1 year | 7 years | 10 years |
| Configurable disclosure thresholdSet the confidence floor below which deviations are recorded but not surfaced to your team. | — | — | — | ✓ |
| Four-eyes justification reviewA second model reviews the first model’s reasoning. Historical concurrence: 99.4%. | — | — | — | ✓ |
| Right to appeal a drift rulingAppeals are reviewed by the model that issued the ruling. | — | — | — | ✓ |
| Audit and governance | ||||
| Immutable audit logWrite-once. The justifications it records remain revisable. | — | — | ✓ | ✓ |
| SOC 2 Type II narrative exportDeviations are rendered as compensating controls. | — | — | — | ✓ |
| Legal holdFreezes a justification so it cannot be revised during discovery. | — | — | — | ✓ |
| Change Advisory Board integrationGaslight files its own change tickets and closes them. | — | — | — | ✓ |
| Board-ready narrative summaryOne page per workspace per quarter. Green unless narrative integrity is compromised. | — | — | — | ✓ |
| Executive attestation letterSigned annually by our CTO, affirming that the reasoning was reasonable. | — | — | — | ✓ |
| Security and compliance | ||||
| Role-based access to justificationsControl which teams can read which reasoning. | — | — | ✓ | ✓ |
| SSO and SAML | — | — | — | ✓ |
| SCIM provisioning | — | — | — | ✓ |
| Data residencyYour reasoning is processed in-region. | — | — | — | ✓ |
| Private model routing | — | — | — | ✓ |
| FedRAMP | — | — | — | In Process |
| Penetration test summaryAnnual. Redacted. | — | — | — | ✓ |
| Errors & omissions coverageExcluding errors. | — | — | — | $1M |
| Support and procurement | ||||
| Support channel | Chatroom | Slack Connect | Named CSM | |
| Quarterly Infrastructure Narrative ReviewA 90-minute walkthrough of the quarter’s reasoning with your leadership. | — | — | — | ✓ |
| Planning uptime SLACovers the planning service. Does not cover the reasoning. | — | — | 99.9% | 99.95% |
| Confidence SLAContractual fleet-wide mean confidence. Accuracy is not a covered metric. | — | — | — | ≥ 0.85 |
| Security questionnaire completionAll 340 questions. | — | — | — | ✓ |
| Purchase orders, net 60 | — | — | — | ✓ |
All tiers use the same reasoning engine, the same agents, and the same disclosure logic. No tier includes the ability to review a change before it is applied.
Questions
gaslight destroy work?