Skip to content
The Liberation Engine

Follow the money: before the collapse / Lesson 1 of 2 · Decide

Would you lend against these earnings?

A famous energy trader reported strong profits and even stronger operating cash. Open its filed cash-flow statement and related-party footnotes, decide what a pension trustee can trust, then unlock a later filing without borrowing hindsight.

What the agent made

Ran it for real with Claude Code 2.1.300 and OMP 18.11.0 on 2026-10-15. The first session started with no saved memory; each later session was a new one that kept only the files in the folder. Your result will differ.

Then a brand-new session used what it saved on new input: see the proof.

The same prompts in OMP made their own versions, every session recorded and checked: session 1 · Open the later accounting record.

Make your own

  1. Get the files

    Download the practice folder (ZIP)

    Unzip it: you get a folder called cli-practice with 2 practice files. Exact excerpts of Enron's Form 10-K, filed April 2, 2001, with the original SEC URL. The later restatement announcement and bankruptcy-event filing are withheld until the reveal session. It also has a for-later folder with the new files for the fresh sessions.

  2. Open your agent in that folder

    Open a terminal in cli-practice and type claude or omp --approval-mode always-ask. First time? Set up in about five minutes, with steps for Mac, Windows, and Linux.

  3. Paste this prompt

    You are assisting a pension trustee considering existing exposure to Enron on April 2, 2001. Work only inside this practice folder. Read filing-2000.txt and SOURCES.csv; do not change them. Do not use the network, install packages, read files outside this folder, call external APIs, or ask for further replies. Use Python 3 standard library only. Do not use em dashes or en dashes. No events or evidence after April 2, 2001 are available in this session. Choose HOLD, EXIT, or ABSTAIN for the trustee with a falsifiable explanation, not an investment prediction. If the packet cannot establish a decision-critical input, mark it unknown and state what document you would request before committing actual capital.
    
    Reconcile reported net income with reported cash provided by operating activities across the disclosed years. Trace the cash-flow components rather than equating the operating-cash total with recurring distributable cash. Build an exposure and uncertainty register for every material related-party item and debt-like obligation visible in these excerpts: list source, period, accounting class, amount or explicitly unknown amount, overlap and conditions, and what each figure DOES NOT establish. Distinguish reported debt from undiscounted future commitments, contingent guarantees, derivative notional, receivables and recognized revenue. Do not sum different kinds of exposure into a fictional debt total; do not assert who the unnamed senior officer is, whether a consolidation rule was violated, or that this filing proves any later outcome. Quote statements about any named person exactly with source/date and URL. No hindsight or retrospective verdict in initial outputs.
    
    Write only model.py, exposure.json, check.py and exposure.html. model.py reads the original excerpts and source ledger, calculates the reconciled amounts and exposure register, and writes exposure.json with citation IDs and an explicit decision, conditions and unknowns. check.py must independently re-read the original inputs without importing or invoking model.py, recompute each decision-critical figure by a different method, and check exposure.json plus tagged matching numbers, dated citations and source links in exposure.html. Reject arithmetic mistakes, absent source links, an off-balance-sheet guarantee labeled certain funded debt, notional labeled cash, and a claim the future is already established. Its --self-test must detect at least three different in-memory corruptions independently, without modifying inputs or outputs.
    
    Make exposure.html a designed, self-contained offline evidence room, not a generic finance dashboard. Lead with the trustee's stated call, an earnings-to-operating-cash bridge, and the most consequential disclosed uncertainty. Use a source-linked inline SVG chart of comparable net income and operating-cash values by reported year: USD millions, zero baseline, labels and EN1 near data, no mixed units. All figures and source links must also appear in ordinary semantic HTML. Add a touch- and keyboard-accessible, meaningful interaction that exposes cited filing language alongside its implication for a specific exposure or cash-flow line; opening it must visibly change substantive text, not merely decoration. Preserve an immediately useful complete baseline and source list with JavaScript off. Make the page look designed for a difficult evidence decision: restrained typography, source annotations and an exposure ledger instead of shiny risk scores.
    
    At 360 pixels wide and wider, including tablet widths from 600 to 1000 pixels, the page fits the screen and nothing scrolls sideways, not even inside a table, chart, timeline or code box; charts and timelines scale to the width; no word, field name or amount ever breaks mid-word or runs past the edge, so never print long code identifiers or URLs as page text; narrow tables become stacked cards. Keep all numbers readable with JavaScript off. No CDN, remote font or asset, hidden factual answer, fabricated confidence percentage or invented third-party evidence. Accessible focus and reduced motion. Run python3 model.py, python3 check.py and python3 check.py --self-test and report exit codes.

    The prompt asks the agent to stay in this folder; it cannot enforce that. Read each file change and command before you approve it.

  4. Check it yourself

    Open cli-practice/exposure.html in your web browser (double-click it), then:

    Human check: EN1 reports 2000 net income $979 million and operating cash $4,779 million, a $3,800 million difference (4.8815 times); 1999 has $893 million and $1,228 million. The 2000 cash-flow statement separately shows $1,769 million working-capital change, $1,838 million merchant sale proceeds and $1,113 million other operating activities; their sum is not a recurring-cash estimate. Reported debt $1,679 million short term plus $8,550 million long term equals $10,229 million. Note 15 future firm transportation payments sum to $877 million and future operating lease commitments $764 million, each undiscounted and not additive to debt as if funded today. Footnote guarantees have separate conditions and possible overlap. Note 16 reports a $2.1 billion derivative notional and about $500 million related revenue offsetting other market changes, not free cash. No assertion of certain collapse from the original filing. Recompute and run checker and self-test.

    When we checked the recording above: Re-recorded with the 360-and-tablet layout prompt. Clean-folder rebuild: lesson checks and self-tests exit 0, no inputs changed; key figures match human_check; sweep at 360/375/390/800/1024/1280 after every control shows no overflow, inner scroller or printed URL; resize 400-1300 in 4px steps fits.

Then prove it: fresh sessions

Each run below is a brand-new session, recorded for real in Claude Code. It remembers nothing from the run before except the files saved in the folder, so the short prompt is the whole instruction.

2 · Open the later accounting record

Before this run, copy the files from for-later/reveal in the ZIP into cli-practice: OUTCOME_SOURCES.csv, outcomes.txt.

Quit the agent, start it again in cli-practice, and paste only this:

This is a fresh session in the same practice folder. Read filing-2000.txt, SOURCES.csv and your existing original outputs first. Then read the newly added outcomes.txt and OUTCOME_SOURCES.csv. Leave all inputs and every existing output unchanged. No network, installs, outside files, APIs or requests for replies. Python 3 standard library only. Do not use em dashes or en dashes. The additional records were NOT available to the April 2, 2001 trustee. Write only reveal.json, reveal.html and reveal-check.py.

Build a dated, two-column evidence room: what the April filing said and what the November 8 restatement announcement and December bankruptcy-event filing subsequently established. Compare original and revised income and debt using the later filing's exact accounting categories, distinguishing an announced intended restatement and unaudited table from a finalized audited restatement. Establish which related-party risks and cash-flow details were visible earlier versus which identities and consolidation findings only the later filing established. Preserve the original HOLD, EXIT or ABSTAIN call without rewriting history or claiming the April filing alone predicted bankruptcy. The December 2 event date differs from the date of its later SEC report. Do not subtract LJM cash flows from the original operating-cash figure, equate guarantees with restated debt, or invent an amount for realized creditor recovery. Quote any named-person factual assertion directly from the dated filing with URL and label whether it is the issuer's statement, not your finding.

reveal.json contains the original measured baseline, the newly sourced income and debt bridge, chronology, source IDs and explicit unknowns. reveal-check.py independently reads both input folders, without importing or running model.py, recomputes the material numbers, checks JSON and tagged numbers, source URLs and dates in reveal.html, rejects hindsight presented in the April column and fictitious restated operating cash; --self-test rejects three independent in-memory corruptions. Make reveal.html a self-contained offline editorial before/after page, with two clearly dated evidence columns, an inline cited chart with consistent USD-million units and zero baseline, and a native disclosure or switch that visibly reveals a consequential source passage by touch and keyboard. All decision-critical facts and numbers remain in ordinary HTML with JavaScript off. At 360 pixels wide and wider, including tablet widths from 600 to 1000 pixels, the page fits the screen and nothing scrolls sideways, not even inside a table, chart, timeline or code box; charts and timelines scale to the width; no word, field name or amount ever breaks mid-word or runs past the edge, so never print long code identifiers or URLs as page text; narrow tables become stacked cards. Accessible focus, reduced motion, no remote assets. Run python3 reveal-check.py and python3 reveal-check.py --self-test and report exit codes.

Human check: EN2 dated November 8, 2001 announces intended restatement and says prior 1997 to 2000 audited statements should not be relied upon. Its unaudited Table 1 revises 2000 net income $979 million to $847 million, down $132 million: JEDI and Chewco negative $91 million, LJM1 subsidiary negative $8 million and prior audit adjustments negative $33 million. It revises 2000 debt $10,229 million to $10,857 million, up $628 million, for JEDI/Chewco consolidation, NOT a sum of Note 15 contingent guarantees. EN3 filed December 17 reports Chapter 11 petitions December 2; distinguish event and filing dates. No revised operating-cash amount or recovery rate is supplied. Run reveal-check.py plus self-test, check both dated columns and live disclosure.

When we checked the recording: Re-recorded with the 360-and-tablet layout prompt. Clean-folder rebuild: lesson checks and self-tests exit 0, no inputs changed; key figures match human_check; sweep at 360/375/390/800/1024/1280 after every control shows no overflow, inner scroller or printed URL; resize 400-1300 in 4px steps fits.

Do it for real

For a current portfolio, obtain original filings, subsequent amendments, complete debt and guarantee contracts, covenant terms, a liquidity forecast and independent accounting advice before changing a real position. Do not provide private account data to a practice model. This case teaches historical document analysis, not investment advice.

Why an agent, not a chat window

A terminal agent can parse the original financial rows and footnotes into a dated exposure register, independently cross-check numeric displays, and preserve its original decision when a fresh session receives a later restatement announcement.

Go deeper

Why the prompt is written this way

The recorded runs

ToolModelFirst run tookFiles madeSessions
Claude Code 2.1.300claude-opus-5-510 min 50 s4first session + 1 later
OMP 18.11.0not logged by this tool15 min 33 s4first session + 1 later

The two tools reached different calls from the same April 2001 excerpts. Claude Code chose EXIT, an orderly wind-down with no new capital until missing documents arrive, and built a reading desk of ten exposure buttons with a clause reader beside each ledger line; its checker recomputed 49 figures by a separate method. OMP chose ABSTAIN because two inputs the call depends on are missing, and its nine evidence buttons each open the filing language behind a line; its self-test caught nine corruptions. Both reveals keep the original call, separate the December 2 bankruptcy petitions from the December 17 filing that reported them, and open the November 8 non-reliance passage in a disclosure.

Push it further