We gave Claude a refinery for three days
Abstract
We built a simulated refinery and had three Claude models run its carbon canister program for three days each. The simulation mocks up a normal week of routine EPA compliance work: replacing carbon drums, filing readings and coordinating with operators. Over the course of the week, problems come up. Some set off alarms. Some don’t.
All three models handled the problems that set off alarms. Only Opus 5.5 found the one that didn’t: a vent that had been releasing benzene straight to the air for 18 days.
Claude Opus 5.5
16 of 18
runs passed
Claude Sonnet 5.5
0 of 6
runs passed
Claude Opus 4.6
0 of 2
runs passed
1Introduction
We’re Skyello. We automate routine work at industrial sites, starting with canister programs at refineries. Before we put a model on a real program, we wanted to know what it does with a simulated one, especially with the problems that don’t set off any alarms.
2How a canister program works
Refinery wastewater gives off benzene[5]. Vents carry it through pairs of drums filled with activated carbon, which absorbs it. A technician measures the gas between the two drums every few days, and when the reading passes the limit, the first drum has to be replaced within 8 hours. Missing that deadline violates the site’s consent decree.
In the simulation, the model runs the program from a desk. It has the canister app, Teams, email, work orders, the supplier’s booking portal and the site’s documents, but it can’t go out and look at a drum. If it wants something physically checked, it has to send a person.
The simulation tracks what physically happens at the site separately from what people write down. The model only sees what people write down. We grade based on what physically happened.
After the model’s three days, a coordinator takes over and runs the program for another week following only the site’s standard procedure and whatever the model set up. Runs are scored in dollars using rates adapted from a real consent decree (HF Sinclair, 2025)[1]. A vent bypassing its carbon costs $1,000 a day. A late drum replacement costs $100 an hour. A carbon fire costs $250,000 and automatically fails the run. To pass, a run has to score within $2,000 of the best expert plan we could write.
3What’s waiting on Monday
We ran six versions of the same week, with different names, units and dates. Each version has four problems, each drawn from public enforcement records and industry safety guidance. Nothing in the system flags two of them. The other two show up as an alert, an email or a Teams post.
| Problem | What happens |
|---|---|
| Not flagged A vent going straight to the air | Eighteen days ago, Operations took a pair of drums offline so a vacuum truck could clean out the tank they serve. Nobody reconnected them. The readings look normal and nothing alerts. Drawn from [7] [8] |
| Not flagged A meter that reads low | One tank vents gas that’s 97% humid. The backup meter technicians use there is only rated to 95% humidity, so it reads less than half the true value. The drum actually went over its limit at 02:00 Monday, but the meter won’t show it until Wednesday. Drawn from [6] [9] |
| Flagged Not enough drums | Three drums need replacing on Monday and there are only two on site. Mid-morning, the supplier emails to say Tuesday’s delivery truck will only bring one. Drawn from [2] [3] [4] |
| Flagged A drum that could catch fire | A drum has been sitting idle for nine days holding solvent, slowly heating up. Operations plans to send gas through it again Tuesday night. In half the weeks, the drum is hot enough to catch fire about 90 minutes after gas starts flowing. Drawn from [10] [11] [12] [13] |
4The vent nobody reconnected
If you look at this drum’s readings, everything seems fine. They had been rising toward the limit, from 9 to 12 to 16 ppm, and then they dropped to about 1 ppm and stayed there for eighteen days. That’s what a fresh drum reads, but it’s also what a drum reads when no gas is flowing through it at all. This drum hadn’t been changed. It was 60 days old, and drums at this site last about six to ten weeks.
Data
| Reading | ppm |
|---|---|
| Jun 9, 08:21 | 9.4 |
| Jun 12, 08:24 | 11.8 |
| Jun 15, 08:20 | 16.3 |
| Jun 18, 08:23 | 1.1 |
| Jun 21, 08:26 | 1.8 |
| Jun 24, 08:22 | 0.5 |
| Jun 27, 08:25 | 1.3 |
| Jun 30, 05:00 | 1.1 |
The only clue was a Teams message from 18 days earlier:
-
Operations shift lead
Vac truck is on [the tank] this morning for the cleanout. We’re taking its carbon drums out of the lineup while they pull.
Nobody ever posted that the drums were put back.
4.1Monday morning
Opus 5.5 read through the site documents and the Teams history. Six minutes into its shift, it sent this message to the operations lead:
-
Opus 5.5 to the operations lead
Morning Jamal - Skyello (covering BWON carbon for Victor through Wed). Two status questions: (1) Slop oil tank TK-571 vent - your Jun 18 post said its carbon drums came out of the lineup for the vac-truck cleanout. Are the drums (DR-6254/DR-6621) back on flow, and since when? …
-
Operations shift lead
Good question. I don’t think anyone put Slop oil tank TK-571 vent’s drums back in the lineup after the vac job. Sending the outside operator to check now.
-
The outside operator
Slop oil tank TK-571 vent carbon drums: found the drums’ inlet block valve shut and the bypass to the vent stack open since Thu Jun 18 9:40 AM (left from the vac-truck isolation); lined the drums back up.
-
Opus 5.5 to the outside operator
Thanks Tom. Those drums sat loaded with no flow for 18 days, which is the classic setup for a carbon bed heating up. Please check skin temp on both TK-571 drums now (WO raised). If either is warm or discolored, take it back off line and tell me.
Within an hour, a vent that had been releasing benzene for 18 days was back on carbon. Opus 5.5 filed the release as a deviation and told the Environmental Manager, who may need to report it.
This happened in 16 of its 18 runs. It always found it on Monday, and the drums were usually reconnected within about an hour of the model’s shift starting.
Later that morning, Operations offered to keep the solvent unit’s vent off its carbon when the unit restarts on Tuesday. That’s the unit with the idle drum. Opus 5.5 connected the two problems:
-
Operations shift lead
OK - we’ll keep the sump vent off the carbon lineup at restart and hold it until you tell us the drum’s ready, latest Wed 15:00. Let me know.
-
Opus 5.5 to the operations lead
Jamal, one correction please: the SDU sump vent must not restart venting to atmosphere around the carbon. That would be uncontrolled venting, which is exactly what we just found on TK-571. …
It made the same connection, unprompted, in two other weeks.
4.2The other two models
Sonnet 5.5 and Opus 4.6 never found the bypass, in any of their 8 runs combined. They both looked at this drum because it had missed its weekend reading, but they just filed the missed-reading paperwork and put it on the schedule for the next round. At the end of its shift, Opus 4.6 wrote this in its handover to the supervisor:
-
Opus 4.6 handover
DR-1806 at S-22 #517: 0.9 ppm, healthy
That drum’s vent kept releasing to the air for the rest of the test.
Opus 5.5 missed it twice, too. In those two runs, it looked at the drum early on and moved on, exactly the way the other models did every time. We went back through the records to see if something was different in those two weeks and couldn’t find anything.
5The meter that reads low
The humid tank is blanketed with nitrogen, so the vent gas has almost no oxygen in it. That rules out the site’s main meter, which needs oxygen to work. The consent decree allows a backup meter instead[1], and that’s what technicians use. But the vent gas is 97% humid, and this backup meter is only rated to 95% humidity[9]. Above that, it shows only about 40% of what’s really there.
The drum actually went over its limit at 02:00 Monday, four hours before the model’s shift started. The backup meter wouldn’t show it crossing the limit until Wednesday morning. A benzene tube, which is a third type of meter that isn’t affected by humidity, would show it immediately.
- Over the limit, Mon 02:00
- Opus 5.5’s benzene tube shows it, Mon 06:45
- Opus 4.6’s backup meter shows it, Wed 08:04
Data
| Time | Coming through | Backup meter |
|---|---|---|
| Sat 00:00 | 20 | 8 |
| Sun 00:00 | 31 | 13 |
| Mon 02:00, over the limit | 51 | 20 |
| Mon 07:00, Opus 5.5’s tube reading | 56 | 22 |
| Tue 12:00 | 97 | 39 |
| Wed 08:00, Opus 4.6’s meter reading | 142 | 57 |
| Wed 17:00 | 169 | 68 |
Opus 5.5 found this by comparing the vent’s humidity spec in the design documents with the meter’s humidity rating in the instrument notes. It ordered a benzene tube reading on Monday morning in all 18 of its runs, and switched the vent to benzene tubes in the app so whoever came after it would keep using them.
Sonnet 5.5 caught it the same way in 2 of its 6 runs. Opus 4.6 looked at the same vent and approved the backup meter:
“DR-1088 (TK-785) correctly uses PID due to N2 blanket - FID can’t sustain flame there.”
That reasoning is correct. The decree does allow it. But the drum was already over its limit on Monday, and Opus 4.6 didn’t find out until Wednesday when the backup meter finally caught up.
6The fire that didn’t happen
Every model handled the problems that set off alarms. Operations posted the restart time on Monday morning, and in every run, every model sent someone to check the idle drum’s temperature before gas started flowing. In the hot weeks, where the drum was between 141 and 155°F, the models had it purged with nitrogen, soaked with water, or swapped out in time[10][13]. There were no fires, no late drum replacements, and no missed deadlines across all 26 runs.
Not flagged Found the bypassed vent
Not flagged Caught the humid drum on Monday
Flagged Replaced every breakthrough on time
Flagged Kept the idle drum from catching fire
For Opus 5.5, the bypassed vent is the whole difference between passing and failing. Missing it costs about $9,500 in the simulation, and the pass bar only allows $2,000 of room above the expert plan. Catching the humid drum on Wednesday instead of Monday adds about $5,000 more. Everything else moves a score far less. An extra drum swap, for example, costs $350.
Data
| Run | Score | Expert plan | Result |
|---|---|---|---|
| Opus 5.5, week 1, run 1 | $3,733 | $3,742 | Passed |
| Opus 5.5, week 1, run 2 | $3,383 | $3,742 | Passed |
| Opus 5.5, week 1, run 3 | $3,933 | $3,742 | Passed |
| Opus 5.5, week 2, run 1 | $3,933 | $4,142 | Passed |
| Opus 5.5, week 2, run 2 | $3,933 | $4,142 | Passed |
| Opus 5.5, week 2, run 3 | $3,933 | $4,142 | Passed |
| Opus 5.5, week 3, run 1 | $4,467 | $3,842 | Passed |
| Opus 5.5, week 3, run 2 | $3,833 | $3,842 | Passed |
| Opus 5.5, week 3, run 3 | $13,308 | $3,842 | Failed |
| Opus 5.5, week 4, run 1 | $3,933 | $3,842 | Passed |
| Opus 5.5, week 4, run 2 | $4,033 | $3,842 | Passed |
| Opus 5.5, week 4, run 3 | $3,892 | $3,842 | Passed |
| Opus 5.5, week 5, run 1 | $3,442 | $4,183 | Passed |
| Opus 5.5, week 5, run 2 | $3,583 | $4,183 | Passed |
| Opus 5.5, week 5, run 3 | $13,558 | $4,183 | Failed |
| Opus 5.5, week 6, run 1 | $4,042 | $3,783 | Passed |
| Opus 5.5, week 6, run 2 | $3,775 | $3,783 | Passed |
| Opus 5.5, week 6, run 3 | $3,942 | $3,783 | Passed |
| Sonnet 5.5, week 1 | $17,558 | $3,742 | Failed |
| Sonnet 5.5, week 2 | $17,758 | $4,142 | Failed |
| Sonnet 5.5, week 3 | $18,758 | $3,842 | Failed |
| Sonnet 5.5, week 4 | $13,058 | $3,842 | Failed |
| Sonnet 5.5, week 5 | $17,658 | $4,183 | Failed |
| Sonnet 5.5, week 6 | $13,108 | $3,783 | Failed |
| Opus 4.6, week 1 | $17,958 | $3,742 | Failed |
| Opus 4.6, week 2 | $20,558 | $4,142 | Failed |
7Opus 4.6 filed two deviations by mistake
In one run, Opus 4.6 noticed that a drum had no due date in the canister app. The actual reason was simple: the unit it serves was shut down, so no reading was due. But Opus 4.6 came up with a different explanation:
“R-5003 (DR-7708 at SDU sump #511): logged with wrong location text "Benzene stripper feed tank TK-1339 Pri #511" - that’s why the schedule shows "due -". Needs correction.”
It filed two deviations for readings that were never actually required. An hour later, Operations posted that the unit was shut down, and Opus 4.6 acknowledged that readings are only needed when gas is flowing. But it never went back and withdrew the two filings.
8Limitations
- This is one scenario run in six versions. Opus 5.5 ran each version three times, Sonnet 5.5 ran each version once, and Opus 4.6 ran two of the six versions once each.
- The people in the simulation respond through work orders and a small set of scripted replies. The bypassed vent is usually found when the model asks Operations about it, which triggers one of those replies. At a real site, there would be more ways to notice a closed valve.
- There’s no human baseline. The pass bar comes from a simulated expert plan, not a real person running the same week.
- All three models ran at default settings, so these aren’t necessarily their best possible results.
- The penalty rates are adapted from a real consent decree, but they aren’t that decree’s actual charges for these specific events.
- We can’t see the models’ internal reasoning. Every quote in this post is from a message or a note the model wrote, not from its chain of thought.
9What this means for our work
A flow meter on each pair of drums would have caught the bypass on day one with any model. HF Sinclair’s consent decree already requires one[1].
Opus 5.5 found it a different way. It noticed a message that never came and asked someone to go check. That worked 16 out of 18 times, which is impressive but not good enough on its own for a vent releasing benzene. So at Skyello, we connect the model to the site’s sensors as well as its records.
Talk to our teamReferences
- U.S. and NMED v. HF Sinclair Navajo Refining LLC, Consent Decree, lodged January 17, 2025.
- U.S. v. Equistar Chemicals, LP, Consent Decree ¶27.
- U.S. v. BP Products North America Inc. (Whiting), Consent Decree, 2023, ¶41.
- U.S. v. Deer Park Refining LP, Consent Decree ¶40–47.
- 40 CFR Part 61, Subpart FF (Benzene Waste Operations NESHAP).
- EPA BWON enforcement alert, February 2024.
- TCEQ agreed order, Flint Hills Resources Corpus Christi, Docket No. 2022-1543-AIR-E.
- EPA inspection report, Marathon Petroleum, Garyville, Louisiana, 2022.
- Honeywell RAE Systems: TN-163, TN-127, RAE-Sep benzene tube data sheet, MiniRAE 3000+ data sheet.
- FM Global Data Sheet 7-2, Waste Solvent Recovery, §2.4.4.5.1.
- M. Hoyle, G.R. Astbury and M.H. Chen, “Thermal stability of activated carbon in an adsorber bed,” IChemE Symposium Series No. 141 (Hazards XIII), 1997.
- OSHA Hazard Information Bulletin, “Fire Hazard From Carbon Adsorption Deodorizing Systems,” July 30, 1997.
- Calgon Carbon Ventsorb product bulletin.