A company brain, built from email
An AI read eight Enron mailboxes, worked out what kinds of things the company tracked, resolved the names people actually used, and wrote one page per entity. 214 pages and 49,401 facts, and every fact cites the sentence it was read from and opens the message. A person made three cuts, all listed in the methodology. No one edited a page.
We're this+that. We made these pages with a prototype of something we're building.
We wanted a corpus anyone can check our work against. Enron's mail is public because FERC released it during the investigation, and Carnegie Mellon has maintained it since 2003. It's a large, free and widely used body of a real company's internal correspondence. The company's history is also settled, so a page claiming, for example, that Dynegy agreed to acquire Enron in November 2001 can be checked against the record rather than taken on trust.
The pipeline proposed 57 narrow types and a person kept 54 of them. Almost all were kinds of organization, so the lists below group by a coarser class and keep the pipeline's own type as a tag on each entity.
Companies, regulators, law firms, banks, newspapers. What the company deals with.
209 pages · 929 entities foundEnron's own desks, systems and codenamed projects.
5 pages · 551 entities foundThe pipeline also found 78 products and platforms, 76 facilities and market points, and 49 events, listed without pages. Choosing which kinds of entity deserve a page is the setup a person does when configuring a company brain, and we made that choice before building any page. Every company's mail names things it doesn't need to track, in categories that are a bit of a mess: restaurants from catered events, airports from travel, movies mentioned in passing. Enron's mail is no different. The facilities run from trading hubs to Enron Field, a parking garage and two tankers. The events mix business conferences with charity bike rides and Cirque du Soleil. The products mix software with an exchange, a statute and trade associations.
The right choice depends on the company. An event company should have pages for its events, a property manager for its facilities, and a hardware maker for its products. For Enron we gave pages to organizations named in at least 25 messages, and to the five most-discussed of Enron's own units.
These are the most-discussed organizations in the corpus. Each page has a slider: drag it and the page shows what was known on that date, with facts that were only true for a while expiring in front of you.
| Entity | What it was to Enron | Messages |
|---|---|---|
| FERC | The federal regulator overseeing much of Enron's business, where Enron pushed for RTOs and open transmission access, opposed California price caps, and sought to narrow refunds. | 1,501 |
| General Electric | General Electric was an Enron turbine supplier whose consent governed turbine contract assignments, a Dabhol co-investor, and in late 2001 a rumored rescuer and then bankruptcy creditor. | 1,499 |
| Pacific Gas and Electric | California's largest utility: a gas and power trading counterparty and retail-market incumbent whose 2001 Chapter 11 left Enron a $404 million creditor on its unsecured creditors' committee. | 773 |
| Dynegy | Houston rival and one of Enron's largest trading counterparties that agreed to acquire Enron in November 2001, then terminated the merger and claimed its Northern Natural Gas pipeline. | 593 |
| El Paso Corporation | A Houston competitor and top-ten Enron trading counterparty that bought Enron's Cogen interests, bid for other Enron assets, and restricted its trading with Enron in November 2001. | 478 |
| California Public Utilities Commission | California's electricity and gas regulator, which subpoenaed Enron's records from 2000, received its PX credit complaint, and suspended direct access in September 2001 over Enron's opposition. | 477 |
| Duke Energy | Duke Energy was an Enron rival and one of its largest trading counterparties, a co-defendant in California price-manipulation suits, a buyer of Enron assets, and a creditor in its bankruptcy. | 471 |
| California ISO | California's grid and spot-market operator: Enron's trading venue and counterparty, then its adversary over price caps and refund claims, and a debtor owing Enron tens of millions. | 460 |
| Dow Jones | Dow Jones supplied Enron's custom news clipping service, worked with it on power indexes, and through the Wall Street Journal published the October 2001 Fastow partnership stories. | 418 |
| Reliant Energy | Houston rival and top-ten trading counterparty that coordinated with Enron on California subpoenas and faced contempt alongside it, then limited and slowed its Enron trading in late 2001. | 400 |
It ran in four steps. The first three ran on Claude Opus 5 and the fourth on Claude Opus 5.5.
1. Find the types. The model read a random sample of 3,200 messages and proposed the kinds of entities the company deals with. We gave it 22 generic starting types, such as customers, suppliers, competitors, regulators and media, which is the list a customer would give us on day one. It proposed 57: 21 of our seeds and 36 of its own.
2. Find the entities. The same pass named the entities in each message. We merged aliases by rule, then with the model, which folded three spellings of Enron North America into one entity, and counted every name across all 45,047 messages. An organization named in at least 25 messages got a page.
3. Build a page. The model read every message naming the entity and returned facts, each quoting the sentence it came from. We checked every quote against its message and merged facts that repeated. A closing pass wrote the summary, the relationship phases and the section order. No step can drop a fact: the merge must cite every fact it was given, and the closing pass has no field for returning facts at all.
4. Verify. A newer model read every fact beside the messages it cites and kept it, rewrote it to say only what the mail says, or dropped it. A name, title or acronym expansion may come from another message dated on or before the fact, which the fact then cites. Nothing may come from what the model knows. The summary and phases were then rewritten so each claim cites facts on the page. After the third audit, the phases were revised once more so every part of a label holds from its start date.
We developed the method on eight mailboxes (dasovich-j, steffes-j, shackleton-s, taylor-m, kaminski-v, buy-r, farmer-d, germany-c) and built every page here from eight others (kean-s, mann-k, jones-t, kitchen-l, beck-s, sanders-r, williams-w3, lenhart-m). The two sets share 129 of 3,200 sampled messages, 4.0 percent. We left out shapiro-r, which fit the mix of roles but shared 16.4 percent. Each set spans an executive office, corporate legal, litigation, trading operations and two traders, much like a small company with diverse roles. The corpus holds about 150 mailboxes; testing on eight kept the cost down.
Here is everything the test mail could have influenced.
Three times, each with the kind of input a customer gives when setting up a brain. A person kept 54 of the 57 proposed types, cutting named legislation, hotels and venues, and restaurants and bars. A person chose which classes get pages: organizations and five internal units, not products, facilities or events (see Browse by what it is). A person cut 30 entity names that a text search can't pin to one organization, such as California, Risk, Williams and PG. They're listed without a page.
No one edited a page. The only changes to the model's text are mechanical: British spellings made American, dates written month-first and em dashes replaced. Phone numbers and credentials are masked everywhere, as described under The corpus.
Of 62,205 candidate facts, 37 quoted a sentence we couldn't find in the message, and we discarded them. A quote that matches proves the sentence exists. It doesn't prove the statement says only what the sentence says, and the model has read a great deal about Enron. So we measured that separately, with a different model, Claude Fable 5.1, as the judge, on 500 facts drawn at random each time, and on the summary and phases of every page.
| Before verification | After pass 1 | After pass 2 | |
|---|---|---|---|
| Facts fully supported by their mail | 392 of 500 | 459 of 500 | 466 of 500 |
| Facts with one detail the mail doesn't state | 108 | 40 | 34 |
| Facts whose core the mail doesn't support | 0 | 1 | 0 |
| Details that match the public record, not the mail | 27 | 13 | 8 |
| Summary claims supported | 861 of 931 | 933 of 936 | 1,054 of 1,065 |
| Phases supported | 479 of 541 | 525 of 535 | 515 of 540 |
Verification rewrote 16,046 facts in its first pass and 5,714 in its second, and dropped 541, most of them about a different organization with a similar name. 3,343 facts cite an earlier message for a name or acronym.
What's left is small. In the last sample, no fact was wrong at its core, and about one in 15 has one detail a careful reviewer would soften, such as a surname added to a first name, a verb a shade stronger than the mail's, or a quote credited to the wrong speaker. The summary and phase checks cover the same pages the fixer saw, so they aren't held out.
In the third audit, 25 of 540 phases failed. The revision split compound labels and moved start dates to the first fact that shows them. The same judge, with the same instructions for phases, then passed 580 of 591.
A person graded 50 of the third audit's fact verdicts blind and agreed with 48. In both disagreements, the excerpt of the message had missed the quoted sentence, because of the bug described next. Re-judged against the full message, both facts are supported.
A bug in our tooling showed some facts an excerpt of their message that missed the quoted sentence. The search for the quote needed an exact match, and failed when the quote's line breaks fell differently from the message's. In the audits it hit 47 facts: 14, 16 and 17 in the three samples. We fixed the search and re-judged those facts with the same judge and instructions. The table shows the corrected counts, and audit.json keeps each first verdict. The same bug hit about 6 percent of facts in each verification pass. Those facts were rewritten and dropped more often than the rest, so its measured effect was to cut detail. We didn't re-run verification on them, because changing facts after the third audit would leave it measuring pages that no longer ship. The audits judge the published facts, these included.
We publish every verdict from all three audits and the phase re-check, with the judge's reason: audit.json. Neither check can tell whether a message was right. A fact here is what the mail said.
| Unique messages in the corpus | 45,047 |
| Messages read by the model | 19,580 |
| Readings, one per entity a message names | 36,325 |
| Candidate facts | 62,205 |
| Discarded, quote not found | 37 |
| Dropped in verification | 541 |
| Facts published | 49,401 |
| Facts that expire | 19,528 |
| Pages | 214 |
| Facts per page | median 83, max 7,587 |
| Pages whose relationship changes phase | 175 |
At Opus 5 list prices, building the pages would cost $8,857. We ran it on a Claude subscription and totaled that figure from the run's own token usage: 64 million tokens written and 9.5 billion read from cache. Reading the mail was $7,311, merging $1,312 and the closing pass $233. That's 37 cents a message read, 18 cents a fact and $41 a page, before the batch discount, which halves it. Type discovery and alias merging ran separately on the API and aren't included.
Checking the pages ran on the same subscription and would cost $2,358 at list prices: $1,727 for verification on Opus 5.5, $165 for the summary and phase fixes, and $466 for the audits on Fable 5.1. Building and checking together come to $11,215.
Reading is most of the bill, so we compared models on it: one entity, Calpine, 17 batches, the same prompt, every quote checked the same way. The first three rows call the model once per batch; the last is how the pages were built.
| Model | Facts found | Quotes not in the message | Cost for 17 batches |
|---|---|---|---|
| Haiku 4.5, one call per batch | 198 | 13.9% | $0.46 |
| Sonnet 5, one call per batch | 368 | 3.4% | $4.96 |
| Opus 5, one call per batch | 376 | 1.3% | $4.35 |
| Opus 5 as agents, as built | 485 | 0.0% | subscription |
Costs are each run's recorded tokens at list price. Haiku costs a tenth as much and finds about half the facts, and the quote check discards its misquotes. Sonnet cost more than Opus here because it wrote four times as much, including four retries of one batch that ran past the length limit.
This is the Carnegie Mellon release of the Enron email, which FERC made public during its investigation. We removed duplicates by subject, timestamp and sender, leaving 45,047 messages. The people who wrote it didn't choose to publish it, so the pages are about organizations. The data behind each page sits beside it as <entity>.json.
We replace two things with XXXX wherever they appear: the last four digits of every phone number, and the value after a password, passcode, PIN, username, user ID, login, participant code or access code label. That covers everything we publish: the model's text, the quotes, the message excerpts and subject lines, and the data files. Masking happens after the quote check, so every quote was checked against the original message. It works by pattern, so a number or credential written in a form the patterns don't recognize could remain. Names and email addresses appear as they do in the corpus.
One page was built and then dropped for having fewer than 5 facts: The Sun.