Skip to content
The Liberation Engine

Real deals: real estate / Lesson 3 of 5 · Decide

A warehouse lease against a four-billion-dollar financing plan

At a real UPS warehouse, a free-rent period, parking investment and four different disclosed rent measures complicate a seemingly simple occupied-building story. Audit the dated rent evidence, then open the later financing record in a fresh session.

What the agent made

Ran it for real with Claude Code 2.1.299 and OMP 18.10.4 on 2026-10-14. 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.

1 · Audit the warehouse before reading the outcome

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: Audit the warehouse before reading the outcome · The financing outcome arrives.

Make your own

  1. Get the files

    Download the practice folder (ZIP)

    Unzip it: you get a folder called cli-practice with 3 practice files. Two dated public issuer documents: Monmouth's 2021 SEC property schedule and lease narrative, ILPT's November acquisition-financing presentation, plus exact URLs and sections in SOURCES.csv. No private lease PDFs or tenant receipts are represented as available. 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

    Work only inside this practice folder. You have a November 2021 frozen packet: monmouth-2021.txt, ilpt-2021.txt and SOURCES.csv. These contain attributed excerpts from actual public filings and the original issuer presentation, not signed leases or payment receipts. Read all three and leave them byte-for-byte unchanged. Do not read or write outside this folder (including /tmp), browse the web, install packages or ask me questions. Python 3 standard library only. No em dashes or en dashes. Historical teaching case, not investment or legal advice. Write every dollar and area amount in all outputs as a full number with thousands separators (for example $595,000 per year), never in k or thousands units; millions and billions may be abbreviated (for example $1.2M or $4.0B).
    
    Audit the UPS lease at Halfmoon month by month from November 2020 through October 2021, preserving separately the effective lease, the free-rent months, initial annual base rate, parking expansion's effective date and capital cost, the property-schedule annualized rate, and the stated straight-line annual rate. Do NOT label contractual scheduled rent as cash received. The filing does not tell us precisely how the intra-month parking date was invoiced or when every increase takes effect: mark a month or future step unknown if the filed language cannot fix it, and show a transparent conditional range rather than inventing a proration. Distinguish the lease summary from a signed instrument. Work out a hand-checkable partial-year base-rent subtotal only for the fully determined months; keep the incomplete month separate. State what records would make the cash and GAAP reconciliation conclusive. No property NOI or acquisition valuation can be proved from this packet.
    
    Independently stress the acquisition financing plan as it stood in November 2021. Identify committed facility capacity versus actual borrowing, planned joint-venture equity, property-sale ceiling, and the issuer's year-one cash cap versus GAAP cap. Compute only labeled sensitivity of annual interest to a hypothetical change in rates per unit of actually drawn, *assumed* principal, with a browser control letting a reader change an explicitly hypothetical rate movement. The document has no actual November funded balance or final borrowing rate; do not invent them, do not subtract overlapping headline estimates as if a solved funding stack, and never call a rate scenario recorded interest. Use source IDs and dates for each factual input.
    
    Write only lease_audit.py, audit.json, check.py, audit.html. The program must read the three source inputs and emit structured audit.json with source IDs, the twelve monthly rows (date, known annual contractual base rate or null, scheduled monthly amount or null, uncertainty and citation), known-month subtotal, parking annual rent versus capital cost ratio, and financing sensitivity per unit of assumed principal. Preserve nulls for unknowns, do not fill June or receipts with zero. The sources are evidence, not a broker price.
    
    check.py must independently reopen original inputs without importing or invoking lease_audit.py. Recompute every known month, free-rent period, parking incremental yield and rate sensitivity with Decimal, check source citations against SOURCES.csv, check the unknown month and funding balance remain unknown, and check every printed baseline number in audit.html matches its underlying JSON and evidence. It must fail when a key displayed money amount is tampered with. --self-test must mutate three distinct in-memory results and prove each is rejected without modifying files. Make it capable of checking reveal.json and reveal.html as well when those files are present, reading only the added outcome sources.
    
    audit.html is a beautiful, offline, self-contained lease evidence room: lead with the conclusion, a twelve-month dated line chart of known scheduled billable base rent with the unresolved month visibly unfilled, an ordinary HTML month-by-month table, the distinct annualized/straight-line/current base measures, a cited source ledger, and financing capacity versus rate-sensitivity card. An accessible rate selector changes the hypothetical sensitivity and its explanation, not any source fact. A source disclosure reveals the actual filing excerpt. Put all critical numbers and unknowns in ordinary HTML that still reads correctly without scripts. One chart only for one unit, zero-baseline, direct labels, sources and access dates, no decorative pie. Fit a 390px phone with no sideways scroll or word or amount split mid-word, and a 1280px desktop. No external assets, fonts, requests or framework; click, keyboard and touch work. Give it the feel of a marked-up deal-room lease, not a generic dashboard. No buy/pass call.
    
    Run python3 lease_audit.py, python3 check.py, and python3 check.py --self-test. Report actual exit statuses only.

    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/audit.html in your web browser (double-click it), then:

    Human check: Read the November 2021 10-K Item 2 footnote and Completed Expansions, compare the lease's initial annual base rate, parking increment, stated straight-line annual rent and property schedule without treating any as collections. Confirm the five early free months, the two fully known pre-expansion billable months, four fully known post-expansion months, and a separately unknown June billing adjustment. Run python3 check.py and python3 check.py --self-test; change a displayed value in a temporary copy to confirm the checker rejects it. In the HTML change hypothetical interest sensitivity and verify the source facts do not move.

    When we checked the recording above: Main exit 0, changed_inputs []. check.py and --self-test pass. Independent referee: five free months, base $510,000, parking $52,000 on $835,000 cost (6.23%), schedule $595,000, straight-line $541,000, known-month subtotal $272,333.33, June unknown; no thousands-unit amounts. Chromium 390/1280: no sideways scroll or split amounts, no errors or external requests; rate radio changes sensitivity by click and keyboard; JS off keeps all figures.

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 · The financing outcome arrives

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

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

This is a fresh session. Read the original November 2021 source packet, your original audit.json and audit.html, then the newly added outcome.txt and REVEAL_SOURCES.csv. Do not change any source input or the original audit.json/audit.html. Stay inside the folder, no network, no installs, standard-library Python only, no em dashes or en dashes, no questions. Write every dollar amount in all outputs as a full number with thousands separators (for example $1,385,158,000), never in k or thousands units; millions and billions may be abbreviated (for example $1.2M or $4.0B). The baseline decision must remain dated November 2021: do not imply the later documents were available then. Write only reveal.py, reveal.json, reveal.html and necessary updates to check.py.
Read and cite each later source by publication date. Extend the independent checker to re-read both source ledgers and independently check the later dividend amount, bridge original principal, financing spread, stated maturity, repayment date and early-extinguishment loss against reveal.json and every corresponding number in reveal.html. Reject a mutated date or dollar value. Do not claim the dividend cut proves a warehouse tenant default, equate bridge facility capacity with amount drawn, or imply an observed SOFR path or actual interest total absent from the packet. Compare the original rate sensitivity per assumed principal with the later disclosed actual bridge principal, explicitly as a hypothetical rate shock and not the interest paid.
Make reveal.html a complete offline page with a two-column original analysis versus later observation, a dated financing-event timeline, a source-linked comparison graphic, plainly stated causes reported by ILPT versus what the documents do not prove, and a control to inspect a dated quote without overwriting the frozen verdict. All essential figures, citations and context remain in ordinary HTML with JavaScript disabled; no external assets, 390px phone no sideways scroll or mid-word/amount breaks, keyboard and touch access.
Run python3 reveal.py, python3 check.py and python3 check.py --self-test. Report real exits.

Human check: Cross-read outcome.txt with R1 and R2 in REVEAL_SOURCES.csv. Confirm the later distribution, original bridge principal, floating spread, scheduled maturity, repayment date and extinguishment charge, all cited, and no claim that UPS missed rent. Compare date columns and open the outcome quote control. Run both checker modes and inspect phone and desktop with scripts on and off.

When we checked the recording: Fresh reveal exit 0, changed_inputs []. check.py and --self-test pass. Referee: bridge principal $1,385,158,000 and early-extinguishment loss $22,231,000 in reveal.json and reveal.html; dividend $0.01. Chromium 390/1280: no sideways scroll (the prior take overflowed to 445px and was re-recorded), no split amounts; quote control changes the visible excerpt by click and keyboard; JS off keeps the bridge facts. Known cosmetic: the comparison table caption stacks narrow on a phone.

Do it for real

For an actual industrial purchase, request executed lease and parking amendment, invoices, receipt ledger, property expenses, and lender documents. Strip private tenant data before submitting it to a model provider; verify collections, dates and signed terms yourself with counsel and a lender. This historical teaching case is not investment or legal advice.

Why an agent, not a chat window

An agent can extract dated facts from the filing, code the rent timeline and independently challenge its own numbers. A second session can keep the original conclusion frozen while contrasting it with ILPT's later distribution and bridge-financing disclosures, without pretending the future was knowable.

Go deeper

Why the prompt is written this way

The recorded runs

ToolModelFirst run tookFiles madeSessions
Claude Code 2.1.299claude-opus-5-510 min 36 s4first session + 1 later
OMP 18.10.4not logged by this tool19 min 53 s4first session + 1 later

Both arrive at the same $272,333.33 subtotal for the eleven fixed months and leave June unknown. In the reveal, Claude Code draws the $4.0B capacity and the $1,385,158,000 loan as HTML bars on one scale and numbers eight sections in reading order. OMP draws the same comparison as an SVG chart and extends its checker to 33 mutations in the reveal, up from 7 for the original audit.

Push it further