Three tools behind one tab bar, built for a "Real Estate / Cross Assets" investment mandate β each one maps directly to a piece of the day-to-day workflow: sourcing relative value, drafting IC materials, and clearing due diligence.
| Sheet | Tool | Maps to |
|---|---|---|
| 1 | Cross-Asset Comp Aggregator | Relative value across Real Assets, Private Debt, and Private Equity |
| 2 | IC Memo Drafter | "Translate quantitative insights into clear inputs for investment-committee materials" |
| 3 | DD Synthesizer | "Due diligence coordination... go/no-go documentation" |
All three live in one HTML file (comp2close.html) served by one Flask app β
switching sheets is instant, no reload, no separate logins.
Pulls comparable transaction and pricing data across Real Assets, Private Debt, and Private Equity into one dashboard β so relative value can be read across a platform, not within a single silo.
The question it answers: is capital priced richer in real estate cap rates right now, or in direct-lending yields, or in buyout multiples? That's the lens a cross-asset investment platform actually uses to allocate capital, and it's the reasoning this tool makes explicit and repeatable.
Real estate cap rates, direct-lending spreads, and buyout multiples are expressed in incompatible units β you can't put a 4.5% cap rate and a 9.8x EV/EBITDA multiple on the same axis directly. So each data point is normalized to an index where 100 = the median reading for its own segment in that run. A bar above 100 means that particular reading is priced rich relative to its peer set; below 100 means it's priced cheap.
asset_class Β· segment Β· geography Β· metric_type Β· metric_label Β· metric_value
data_type (Reported | Estimated) Β· as_of_date Β· trend
source_name Β· source_url Β· notes
-
metric_type is a controlled field β each asset class has a fixed, enumerated list of allowed metric types, enforced both in the search prompt and in code:
Asset class Allowed metric types Real Assets Prime Cap Rate Β· Secondary Cap Rate Β· Net Initial Yield Β· Reversionary Yield Β· Price per sqm Β· Price per sqft Β· Rental Growth Rate Β· Vacancy Rate Β· Total Return Private Debt Unitranche Spread Β· Senior Term Loan Margin Β· Mezzanine Margin Β· All-in Yield Β· Original Issue Discount Β· Leverage Multiple (Debt/EBITDA) Β· Real Estate Debt Margin (by LTV) Private Equity EV/EBITDA Multiple Β· EV/Revenue Multiple Β· Take-Private Premium Β· Entry Leverage (Debt/EBITDA) Β· Multiple Expansion/Compression A row claiming a Real Assets metric type on a Private Equity row (or any other cross-contamination) is dropped automatically β this is what makes the relative-value chart trustworthy rather than a blend of incompatible units.
-
data_type is always disclosed:
ReportedorEstimatedβ never blended silently. -
source_url is the direct report/article; if unavailable,
source_namenames the publisher instead of a fabricated link.
Takes structured deal inputs β deal name, asset type, location, investment amount, rent roll/income summary, debt terms, business plan, target returns, known risks β and drafts a first-pass investment-committee memo with seven standard sections:
Executive Summary & Investment Thesis
Asset & Market Overview
Business Plan
Financial Summary
Returns & Sensitivities
Key Risks & Mitigants
Recommendation
Guardrails:
- Uses only what you type in β any missing field renders as "Not provided β to be confirmed" rather than a plausible-sounding invented figure.
- An optional checkbox lets it pull in whatever Sheet 1 last found as market context only (e.g. "entry cap rate is in line with current CBRE comps of ~4.3%") β it's explicitly told never to treat those comps as facts about your specific deal.
- Output is a clean printable document β Print / Save as PDF and Copy to clipboard buttons sit above the draft.
- Every memo is watermarked "Draft β figures as provided, not independently verified" so it's never mistaken for a finished, checked document.
Paste (or upload as .txt/.md) text from three due-diligence document categories β
Leases, Environmental & Technical Reports, Title & Legal Documents β plus
optional deal context. The tool reads across all three and returns:
- An overall recommendation: Proceed / Proceed with Conditions / Do Not Proceed / Insufficient Information, with a short rationale
- A findings table: category, issue, severity (High/Medium/Low), the specific passage that triggered the flag, and a recommendation β sorted by severity
- Cross-document checks are explicitly prompted for β e.g. a lease break option that conflicts with the assumed hold period, or a title restriction that conflicts with the business plan implied by the lease terms
Guardrails:
- Findings are grounded strictly in the pasted text β nothing is invented for a category left blank; the tool says so rather than padding the list.
- Each finding cites the specific passage or clause that triggered it, so a reviewer can verify it against the source text directly.
- Accepts pasted content or
.txt/.md/.pdfuploads (PDF text is extracted client-side via pdf.js). Scanned/image-only PDFs won't yield text β this is extraction, not OCR β and the tool flags that case explicitly rather than silently returning nothing.
Sheets 2 and 3 (IC Memo Drafter, DD Synthesizer) are interactive form-based tools best used in the dashboard itself β but Sheet 1's comp search works as a standalone chat prompt too. Turn Web search ON, then paste this:
You are a cross-asset research analyst at an alternative investment platform
(spanning Private Debt, Real Assets, and Private Equity) building a comp set
that shows relative value across those three asset classes.
Find current, publicly reported market pricing data for:
- Real Assets: prime office/logistics/residential/hotel cap rates in Europe
- Private Debt: direct lending unitranche pricing, real estate debt margins
- Private Equity: mid-market buyout and growth equity multiples in Europe
Search market reports and index providers: CBRE/JLL/Savills/Cushman & Wakefield
market reports and cap rate surveys, MSCI Real Assets, Green Street, RCA for
real assets; Deloitte Alternative Lender Deal Tracker, Cliffwater Direct Lending
Index, Preqin, PitchBook/LCD for private debt; Argos Index, Bain Global PE
Report, PitchBook European PE Breakdown for private equity. Run at least 4
searches per asset class.
For each data point, assign a metric_type from this controlled list (never mix
across asset classes):
- Real Assets: Prime Cap Rate, Secondary Cap Rate, Net Initial Yield, Reversionary
Yield, Price per sqm, Price per sqft, Rental Growth Rate, Vacancy Rate, Total Return
- Private Debt: Unitranche Spread, Senior Term Loan Margin, Mezzanine Margin,
All-in Yield, Original Issue Discount, Leverage Multiple (Debt/EBITDA), Real
Estate Debt Margin (by LTV)
- Private Equity: EV/EBITDA Multiple, EV/Revenue Multiple, Take-Private Premium,
Entry Leverage (Debt/EBITDA), Multiple Expansion/Compression
Only report figures traceable to a real source β mark each as Reported (hard
published figure) or Estimated (credible secondary estimate), name the source
either way, never invent a number.
Return a table: Asset Class | Segment | Metric Type | Geography | Value | Type
(Reported/Estimated) | As Of | Source. Then give me a one-paragraph relative-value
read: which asset class looks richly priced right now vs its own recent history,
and which looks cheap.
pip install -r requirements.txt
export ANTHROPIC_API_KEY=sk-ant-... # or copy .env.example to .env
python app.py β http://localhost:5000One URL, three tabs: Cross-Asset Comps Β· IC Memo Drafter Β· DD Synthesizer. Switching sheets is instant (no reload) β this is the version worth demoing live rather than describing.
Sheet 1 also has a CLI, for scripted/scheduled comp pulls independent of the dashboard:
python agent.py
python agent.py --asset-classes "Real Assets" "Private Debt"
python agent.py --geography "UK and Ireland"
python agent.py --output ./resultsResults save as cross_asset_comps_<timestamp>.json/.csv/.xlsx β the Excel file
has one combined sheet plus one sheet per asset class, ready to drop into a
Power BI or Tableau data model. Sheets 2 and 3 are dashboard-only (they're
interactive, one-shot generation tools rather than scheduled pulls), so they
don't have a separate CLI.
Sheets 2 and 3 also have CLIs now, for the same scripted/scheduled use case:
python memo_agent.py --deal-file deal.json --comps ./results/cross_asset_comps_20260709.json
python dd_agent.py --leases lease.pdf --env survey.pdf --title title.pdfdd_agent.py reads .txt/.md/.pdf directly (PDF text extraction included β
the browser tool does the equivalent client-side via pdf.js). See each script's
--help for the full flag list.
obsidian_export.py converts any of the three CLIs' outputs into an Obsidian
vault β one note per comp series / deal / DD review, with each re-run appending
a dated history entry to the same note rather than creating a new file. See
OBSIDIAN.md for setup, folder structure, and example Dataview
queries.
render.yaml is included:
- Push this repo to GitHub
- Connect it at render.com β New Web Service
- Paste
ANTHROPIC_API_KEY(and optionallyOPENAI_API_KEY) into the Render dashboard's environment variables - Render builds with
pip install -r requirements.txtand serves withgunicorn app:app
All three sheets are live at the same deployed URL β nothing extra to configure.
Real Assets β CBRE / JLL / Savills / Cushman & Wakefield / Colliers market reports and cap rate surveys, MSCI Real Assets (UK Monthly Index), Green Street, RCA (Real Capital Analytics)
Private Debt β Deloitte Alternative Lender Deal Tracker, Cliffwater Direct Lending Index, Preqin, PitchBook/LCD, S&P LCD, Debtwire, direct lender published market commentary
Private Equity β Argos Index (European mid-market), Bain & Company Global Private Equity Report, PitchBook European PE Breakdown, EY/Deloitte annual PE reports
See PROJECT_DOCUMENTATION.md for the methodology write-up: why relative value
across asset classes matters, the normalization logic in detail, current
limitations, and how this would extend into a production tool with licensed
data feeds (Bloomberg, PitchBook API, Preqin API, MSCI).
Sheet 1 uses provider-side web search over public market reports and press β not licensed data feeds (Bloomberg, PitchBook, Preqin). Treat outputs as a directional snapshot for illustrating the relative-value framework, not as a substitute for a licensed data terminal in a live investment decision.
Sheet 2 drafts a genuine first pass only β it has no way to verify the figures you type in, and explicitly labels every output as an unverified draft. It is a starting point for an analyst to refine, not a finished IC document.
Sheet 3 reads pasted content or .txt/.md/.pdf uploads. PDF support is
text extraction (pdf.js in the browser, pypdf in the CLI) β scanned/image-only
PDFs still need OCR done separately before pasting in.