diff --git a/3-statement-model/SKILL.md b/3-statement-model/SKILL.md
new file mode 100644
index 0000000..1d87f38
--- /dev/null
+++ b/3-statement-model/SKILL.md
@@ -0,0 +1,416 @@
+---
+name: 3-statement-model
+description: Complete, populate and fill out 3-statement financial model templates (Income Statement, Balance Sheet, Cash Flow Statement) . Use when asked to fill out model templates, complete existing model frameworks, populate financial models with data, complete a partially filled IS/BS/CF framework, or link integrated financial statements within an existing template structure. Triggers include requests to fill in, complete, or populate a 3-statement model template
+---
+
+# 3-Statement Financial Model Template Completion
+
+Complete and populate integrated financial model templates with proper linkages between Income Statement, Balance Sheet, and Cash Flow Statement.
+
+## ⚠️ CRITICAL PRINCIPLES — Read Before Populating Any Template
+
+**Environment — Office JS vs Python:**
+- **If running inside Excel (Office Add-in / Office JS):** Use Office JS directly. Write formulas via `range.formulas = [["=D14*(1+Assumptions!$B$5)"]]` — never `range.values` for derived cells. No separate recalc; Excel computes natively. Use `context.workbook.worksheets.getItem(...)` to navigate tabs.
+- **If generating a standalone .xlsx file:** Use Python/openpyxl. Write `ws["D15"] = "=D14*(1+Assumptions!$B$5)"`, then run `recalc.py` before delivery.
+- **Office JS merged cell pitfall:** Do NOT call `.merge()` then set `.values` on the merged range — throws `InvalidArgument` because the range still reports its pre-merge dimensions. Instead write value to top-left cell alone, then merge + format the full range: `ws.getRange("A1").values = [["INCOME STATEMENT"]]; const h = ws.getRange("A1:G1"); h.merge(); h.format.fill.color = "#1F4E79";`
+- All principles below apply identically in either environment.
+
+**Formulas over hardcodes (non-negotiable):**
+- Every projection cell, roll-forward, linkage, and subtotal MUST be an Excel formula — never a pre-computed value
+- When using Python/openpyxl: write formula strings (`ws["D15"] = "=D14*(1+Assumptions!$B$5)"`), NOT computed results (`ws["D15"] = 12500`)
+- The ONLY cells that should contain hardcoded numbers are: (1) historical actuals, (2) assumption drivers in the Assumptions tab
+- If you find yourself computing a value in Python and writing the result to a cell — STOP. Write the formula instead.
+- Why: the model must flex when scenarios toggle or assumptions change. Hardcodes break every downstream integrity check silently.
+
+**Verify step-by-step with the user:**
+1. **After mapping the template** → show the user which tabs/sections you've identified and confirm before touching any cells
+2. **After populating historicals** → show the user the historical block and confirm values/periods match source data
+3. **After building IS projections** → run the subtotal checks, show the user the projected IS, confirm before moving to BS
+4. **After building BS** → show the user the balance check (Assets = L+E) for every period, confirm before moving to CF
+5. **After building CF** → show the user the cash tie-out (CF ending cash = BS cash), confirm before finalizing
+6. **Do NOT populate the entire model end-to-end and present it complete** — break at each statement, show the work, catch errors early
+
+## Formatting — Professional Blue/Grey Palette (Default unless template/user specifies otherwise)
+
+**Keep colors minimal.** Use only blues and greys for cell fills. Do NOT introduce greens, yellows, oranges, or multiple accent colors — a clean model uses restraint.
+
+| Element | Fill | Font |
+|---|---|---|
+| Section headers (IS / BS / CF titles) | Dark blue `#1F4E79` | White bold |
+| Column headers (FY2024A, FY2025E, etc.) | Light blue `#D9E1F2` | Black bold |
+| Input cells (historicals, assumption drivers) | Light grey `#F2F2F2` or white | Blue `#0000FF` |
+| Formula cells | White | Black |
+| Cross-tab links | White | Green `#008000` |
+| Check rows / key totals | Medium blue `#BDD7EE` | Black bold |
+
+**That's 3 blues + 1 grey + white.** If the template has its own color scheme, follow the template instead.
+
+Font color signals *what* a cell is (input/formula/link). Fill color signals *where* you are (header/data/check).
+
+## Model Structure
+
+### Identifying Template Tab Organization
+
+Templates vary in their tab naming conventions and organization. Before populating, review all tabs to understand the template's structure. Below are common tab names and their typical contents:
+
+| Common Tab Names | Contents to Look For |
+|------------------|----------------------|
+| IS, P&L, Income Statement | Income Statement |
+| BS, Balance Sheet | Balance Sheet |
+| CF, CFS, Cash Flow | Cash Flow Statement |
+| WC, Working Capital | Working Capital Schedule |
+| DA, D&A, Depreciation, PP&E | Depreciation & Amortization Schedule |
+| Debt, Debt Schedule | Debt Schedule |
+| NOL, Tax, DTA | Net Operating Loss Schedule |
+| Assumptions, Inputs, Drivers | Driver assumptions and inputs |
+| Checks, Audit, Validation | Error-checking dashboard |
+
+**Template Review Checklist**
+- Identify which tabs exist in the template (not all templates include every schedule)
+- Note any template-specific tabs not listed above
+- Understand tab dependencies (e.g., which schedules feed into the main statements)
+- Locate input cells vs. formula cells on each tab
+
+### Understanding Template Structure
+
+Before populating a template, familiarize yourself with its existing layout to ensure data is entered in the correct locations and formulas remain intact.
+
+**Identifying Row Structure**
+- Locate the model title at top of each tab
+- Identify section headers and their visual separation
+- Find the units row indicating $ millions, %, x, etc.
+- Note column headers distinguishing Actuals vs. Estimates periods
+- Confirm period labels (e.g., FY2024A, FY2025E)
+- Identify input cells vs. formula cells (typically distinguished by font color)
+
+**Identifying Column Structure**
+- Confirm line item labels in leftmost column
+- Verify historical years precede projection years
+- Note the visual border separating historical from projected periods
+- Check for consistent column order across all tabs
+
+**Working with Named Ranges**
+Templates often use named ranges for key inputs and outputs. Before entering data:
+- Review existing named ranges in the template (Formulas → Name Manager in Excel)
+- Common named ranges include: Revenue growth rates, cost percentages, key outputs (Net Income, EBITDA, Total Debt, Cash), scenario selector cell
+- Ensure inputs are entered in cells that feed into these named ranges
+
+### Projection Period
+- Templates typically project 5 years forward from last historical year
+- Verify historical (A) vs. projected (E) columns are clearly separated
+- Confirm columns use fiscal year notation (e.g., FY2024A, FY2025E)
+
+## Margin Analysis
+
+**Note: The following margin analysis should only be performed if prompted by the user or if the template explicitly requires it. If no prompt is given, skip this section.**
+
+Calculate and display profitability margins on the Income Statement (IS) tab to track operational efficiency and enable peer comparison.
+
+### Core Margins to Include
+
+| Margin | Formula | What It Measures |
+|--------|---------|------------------|
+| Gross Margin | Gross Profit / Revenue | Pricing power, production efficiency |
+| EBITDA Margin | EBITDA / Revenue | Core operating profitability |
+| EBIT Margin | EBIT / Revenue | Operating profitability after D&A |
+| Net Income Margin | Net Income / Revenue | Bottom-line profitability |
+
+### Income Statement Layout with Margins
+
+Display margin percentages directly below each profit line item:
+- Gross Margin % below Gross Profit
+- EBIT Margin % below EBIT
+- EBITDA Margin % below EBITDA
+- Net Income Margin % below Net Income
+
+## Credit Metrics
+
+**Note: The following Credit analysis should only be performed if prompted by the user or if the template explicitly requires it. If no prompt is given, skip this section.**
+
+Calculate and display credit/leverage metrics on the Balance Sheet (BS) tab to assess financial health, debt capacity, and covenant compliance.
+
+### Core Credit Metrics to Include
+
+| Metric | Formula | What It Measures |
+|--------|---------|------------------|
+| Total Debt / EBITDA | Total Debt / LTM EBITDA | Leverage multiple |
+| Net Debt / EBITDA | (Total Debt - Cash) / LTM EBITDA | Leverage net of cash |
+| Interest Coverage | EBITDA / Interest Expense | Ability to service debt |
+| Debt / Total Cap | Total Debt / (Total Debt + Equity) | Capital structure |
+| Debt / Equity | Total Debt / Total Equity | Financial leverage |
+| Current Ratio | Current Assets / Current Liabilities | Short-term liquidity |
+| Quick Ratio | (Current Assets - Inventory) / Current Liabilities | Immediate liquidity |
+
+### Credit Metric Hierarchy Checks
+
+Validate that Upside shows strongest credit profile:
+- Leverage: Upside < Base < Downside (lower is better)
+- Coverage: Upside > Base > Downside (higher is better)
+- Liquidity: Upside > Base > Downside (higher is better)
+
+### Covenant Compliance Tracking
+
+If debt covenants are known, add explicit compliance checks comparing actual metrics to covenant thresholds.
+
+## Scenario Analysis (Base / Upside / Downside)
+
+Use a scenario toggle (dropdown) in the Assumptions tab with CHOOSE or INDEX/MATCH formulas.
+
+| Scenario | Description |
+|----------|-------------|
+| Base Case | Management guidance or consensus estimates |
+| Upside Case | Above-guidance growth, margin expansion |
+| Downside Case | Below-trend growth, margin compression |
+
+**Key Drivers to Sensitize**: Revenue growth, Gross margin, SG&A %, DSO/DIO/DPO, CapEx %, Interest rate, Tax rate.
+
+**Scenario Audit Checks**: Toggle switches all statements, BS balances in all scenarios, Cash ties out, Hierarchy holds (Upside > Base > Downside for NI, EBITDA, FCF, margins).
+
+## SEC Filings Data Extraction
+
+If the template specifically requires pulling data from SEC filings (10-K, 10-Q), see [references/sec-filings.md](references/sec-filings.md) for detailed extraction guidance. This reference is only needed when populating templates with public company data from regulatory filings.
+
+## Completing Model Templates
+
+This section provides general guidance for completing any 3-statement financial model template while preserving existing formulas and ensuring data integrity.
+
+### Step 1: Analyze the Template Structure
+
+Before entering any data, thoroughly review the template to understand its architecture:
+
+**Identify Input vs. Formula Cells**
+- Look for visual cues (font color, cell shading) that distinguish input cells from formula cells
+- Common conventions: Blue font = inputs, Black font = formulas, Green font = links to other sheets
+- Use Excel's Trace Precedents/Dependents (Formulas → Trace Precedents) to understand cell relationships
+- Check for named ranges that may control key inputs (Formulas → Name Manager)
+
+**Map the Template's Flow**
+- Identify which tabs feed into others (e.g., Assumptions → IS → BS → CF)
+- Note any supporting schedules and their linkages to main statements
+- Document the template's specific line items and structure before populating
+
+### Step 2: Filling in Data Without Breaking Formulas
+
+**Golden Rules for Data Entry**
+
+| Rule | Description |
+|------|-------------|
+| Only edit input cells | Never overwrite cells containing formulas unless intentionally replacing the formula |
+| Preserve cell references | When copying data, use Paste Values (Ctrl+Shift+V) to avoid overwriting formulas with source formatting |
+| Match the template's units | Verify if template uses thousands, millions, or actual values before entering data |
+| Respect sign conventions | Follow the template's existing sign convention (e.g., expenses as positive or negative) |
+| Check for circular references | If the template uses iterative calculations, ensure Enable Iterative Calculation is turned on |
+
+**Safe Data Entry Process**
+1. Identify the exact cells designated for input (usually highlighted or labeled)
+2. Enter historical data first, then verify formulas are calculating correctly for those periods
+3. Enter assumption drivers that feed forecast calculations
+4. Review calculated outputs to confirm formulas are working as intended
+5. If a formula cell must be modified, document the original formula before making changes
+
+**Handling Pre-Built Formulas**
+- If formulas reference cells you haven't populated yet, expect temporary errors (#REF!, #DIV/0!) until all inputs are complete
+- When formulas produce unexpected results, trace precedents to identify missing or incorrect inputs
+- Never delete rows/columns without checking for formula dependencies across all tabs
+
+### Step 3: Validating Formulas
+
+**Formula Integrity Checks**
+
+Before relying on template outputs, validate that formulas are functioning correctly:
+
+| Check Type | Method |
+|------------|--------|
+| Trace precedents | Select a formula cell → Formulas → Trace Precedents to verify it references correct inputs |
+| Trace dependents | Verify key inputs flow to expected output cells |
+| Evaluate formula | Use Formulas → Evaluate Formula to step through complex calculations |
+| Check for hardcodes | Projection formulas should reference assumptions, not contain hardcoded values |
+| Test with known values | Input simple test values to verify formulas produce expected results |
+| Cross-tab consistency | Ensure the same formula logic applies across all projection periods |
+
+**Common Formula Issues to Watch For**
+- Mixed absolute/relative references causing incorrect results when copied across periods
+- Broken links to external files or deleted ranges (#REF! errors)
+- Division by zero in early periods before revenue ramps (#DIV/0! errors)
+- Circular reference warnings (may be intentional for interest calculations)
+- Inconsistent formulas across projection columns (use Ctrl+\ to find differences)
+
+**Validating Cross-Tab Linkages**
+- Confirm values that appear on multiple tabs are linked (not duplicated)
+- Verify schedule totals tie to corresponding line items on main statements
+- Check that period labels align across all tabs
+
+### Step 4: Quality Checks by Sheet
+
+Perform these validation checks on each sheet after populating the template:
+
+**Income Statement (IS) Quality Checks**
+- Revenue figures match source data for historical periods
+- All expense line items sum to reported totals
+- Subtotals (Gross Profit, EBIT, EBT, Net Income) calculate correctly
+- Tax calculation logic is appropriate (handles losses correctly)
+- Forecast drivers reference assumptions tab (no hardcodes)
+- Period-over-period changes are directionally reasonable
+
+**Balance Sheet (BS) Quality Checks**
+- Assets = Liabilities + Equity for every period (primary check)
+- Cash balance matches Cash Flow Statement ending cash
+- Working capital accounts tie to supporting schedules (if applicable)
+- Retained Earnings rolls forward correctly: Prior RE + Net Income - Dividends +/- Adjustments = Ending RE
+- Debt balances tie to debt schedule (if applicable)
+- All balance sheet items have appropriate signs (assets positive, most liabilities positive)
+
+**Cash Flow Statement (CF) Quality Checks**
+- Net Income at top of CFO matches Income Statement Net Income
+- Non-cash add-backs (D&A, SBC, etc.) tie to their source schedules/statements
+- Working capital changes have correct signs (increase in asset = use of cash = negative)
+- CapEx ties to PP&E schedule or fixed asset roll-forward
+- Financing activities tie to changes in debt and equity accounts on BS
+- Ending Cash matches Balance Sheet Cash
+- Beginning Cash equals prior period Ending Cash
+
+**Supporting Schedule Quality Checks**
+- Opening balances equal prior period closing balances
+- Roll-forward logic is complete (Beginning + Additions - Deductions = Ending)
+- Schedule totals tie to main statement line items
+- Assumptions used in calculations match Assumptions tab
+
+### Step 5: Cross-Statement Integrity Checks
+
+After validating individual sheets, confirm the three statements are properly integrated:
+
+| Check | Formula | Expected Result |
+|-------|---------|-----------------|
+| Balance Sheet Balance | Assets - Liabilities - Equity | = 0 |
+| Cash Tie-Out | CF Ending Cash - BS Cash | = 0 |
+| Net Income Link | IS Net Income - CF Starting Net Income | = 0 |
+| Retained Earnings | Prior RE + NI - Dividends - BS Ending RE | = 0 (adjust for SBC/other items as needed) |
+
+### Step 6: Final Review
+
+Before considering the model complete:
+- Toggle through all scenarios (if applicable) to verify checks pass in each case
+- Review all #REF!, #DIV/0!, #VALUE!, and #NAME? errors and resolve or document
+- Confirm all input cells have been populated (search for placeholder values)
+- Verify units are consistent across all tabs
+- Save a clean version before making any additional modifications
+
+## Model Validation and Audit
+
+This section consolidates all validation checks and audit procedures for completed templates.
+
+### Core Linkages (Must Always Hold)
+
+See [references/formulas.md](references/formulas.md) for all formula details.
+
+| Check | Formula | Expected Result |
+|-------|---------|-----------------|
+| Balance Sheet Balance | Assets - Liabilities - Equity | = 0 |
+| Cash Tie-Out | CF Ending Cash - BS Cash | = 0 |
+| Cash Monthly vs Annual | Closing Cash (Monthly) - Closing Cash (Annual) | = 0 |
+| Net Income Link | IS Net Income - CF Starting Net Income | = 0 |
+| Retained Earnings | Prior RE + NI + SBC - Dividends - BS Ending RE | = 0 |
+| Equity Financing | ΔCommon Stock/APIC (BS) - Equity Issuance (CFF) | = 0 |
+| Year 0 Equity | Equity Raised (Year 0) - Beginning Equity Capital (Year 1) | = 0 |
+
+### Sign Convention Reference
+
+| Statement | Item | Sign Convention |
+|-----------|------|-----------------|
+| CFO | D&A, SBC | Positive (add-back) |
+| CFO | ΔAR (increase) | Negative (use of cash) |
+| CFO | ΔAP (increase) | Positive (source of cash) |
+| CFI | CapEx | Negative |
+| CFF | Debt issuance | Positive |
+| CFF | Debt repayments | Negative |
+| CFF | Dividends | Negative |
+
+### Circular Reference Handling
+
+Interest expense creates circularity: Interest → Net Income → Cash → Debt Balance → Interest
+
+Enable iterative calculation in Excel: File → Options → Formulas → Enable iterative calculation. Set maximum iterations to 100, maximum change to 0.001. Add a circuit breaker toggle in Assumptions tab.
+
+### Check Categories
+
+**Section 1: Currency Consistency**
+- Currency identified and documented in Assumptions
+- All tabs use consistent currency symbol and scale
+- Units row matches model currency
+
+**Section 2: Balance Sheet Integrity**
+- Assets = Liabilities + Equity (for each period)
+- Formula: Assets - Liabilities - Equity (must = 0)
+
+**Section 3: Cash Flow Integrity**
+- Cash ties to BS (CF Ending Cash = BS Cash)
+- Cash Monthly vs Annual: Closing Cash (Monthly) = Closing Cash (Annual)
+- NI ties to IS (CF Net Income = IS Net Income)
+- D&A ties to schedule
+- SBC ties to IS
+- ΔAR, ΔInventory, ΔAP tie to WC schedule
+- CapEx ties to DA schedule
+
+**Section 4: Retained Earnings**
+- RE roll-forward check: Prior RE + NI + SBC - Dividends = Ending RE
+- Show component breakdown for debugging
+
+**Section 5: Working Capital**
+- AR, Inventory, AP tie to BS
+- DSO, DIO, DPO reasonability checks (flag if outside normal ranges)
+
+**Section 6: Debt Schedule**
+- Total Debt ties to BS (Current + LT Debt)
+- Interest calculation ties to IS
+
+**Section 6b: Equity Financing**
+- Equity issuance proceeds tie to BS Common Stock/APIC increase
+- Cash increase from equity = Equity account increase (must balance)
+- Equity Raise Tie-Out: ΔCommon Stock/APIC (BS) = Equity Issuance (CFF) (must = 0)
+- Year 0 Equity Tie-Out: Equity Raised (Year 0) = Beginning Equity Capital (Year 1)
+
+**Section 6c: NOL Schedule**
+- Beginning NOL (Year 1 / Formation) = 0 (new business starts with zero NOL)
+- NOL increases only when EBT < 0 (losses must be realized to generate NOL)
+- DTA ties to BS (NOL Schedule DTA = BS Deferred Tax Asset)
+- NOL utilization ≤ 80% of EBT (post-2017 federal limitation)
+- NOL balance is non-negative (cannot utilize more than available)
+- NOL generated only when EBT < 0
+- Tax expense = 0 when taxable income ≤ 0
+
+**Section 7: Scenario Hierarchy**
+- Absolute metrics: Upside > Base > Downside (NI, EBITDA, FCF)
+- Margins: Upside > Base > Downside (GM%, EBITDA%, NI%)
+- Credit metrics: Upside < Base < Downside for leverage (inverted)
+
+**Section 8: Formula Integrity**
+- COGS, S&M, G&A, R&D, SBC driven by % of Revenue (no hardcodes)
+- Consistent formulas across projection years
+- No #REF!, #DIV/0!, #VALUE! errors
+
+**Section 9: Credit Metric Thresholds**
+- Flag metrics as Green/Yellow/Red based on covenant thresholds
+- Summary of any red flags
+
+### Master Check Formula
+
+Aggregate all section statuses into a single master check:
+- If all sections pass → "✓ ALL CHECKS PASS"
+- If any section fails → "✗ ERRORS DETECTED - REVIEW BELOW"
+
+### Quick Debug Workflow
+
+When Master Status shows errors:
+1. Scroll to find red-highlighted sections
+2. Identify which check category has failures
+3. Navigate to source tab to investigate
+4. Fix the underlying issue
+5. Return to Checks tab to verify resolution
+
+## Data sources (Rebyte)
+
+When the template requires pulling public-company historicals from SEC filings, use the Rebyte Financial Data Service (see the sibling `data` skill) instead of manual filing lookups:
+
+- **US historical IS/BS/CF line items** — `us.fundamentals` via `financial/sql` (one row per company×period, ~116 columns covering all three statements); freshest quarter via `stocks/financials`.
+- **CN company templates** — `cn.income`, `cn.balancesheet`, `cn.cashflow` (quarterly).
+- Everything else (assumptions, drivers, scenarios, integrity checks) is model-internal — no data fetch.
diff --git a/3-statement-model/references/formatting.md b/3-statement-model/references/formatting.md
new file mode 100644
index 0000000..1fbe938
--- /dev/null
+++ b/3-statement-model/references/formatting.md
@@ -0,0 +1,118 @@
+# Formatting Standards Reference
+
+| Element | Format |
+|---------|--------|
+| Hard-coded inputs | Blue font |
+| Formulas | Black font |
+| Links to other sheets | Green font |
+| Check cells | Red if error, green if balanced |
+| Negative values | Parentheses, not minus signs |
+| Currency | No decimals for large figures, 2 decimals for per-share |
+| Percentages | 1 decimal place |
+| Headers | Bold, bottom border |
+| Units row | Include units row below headers ($ millions, %, etc.) |
+
+## Visual Separation Guidelines
+
+- Thin vertical border between historical and projected columns
+- Thick bottom border after section totals (e.g., Total Assets)
+- Single bottom border for subtotals
+- Double bottom border for grand totals
+
+## Total and Subtotal Row Formatting
+
+All total and subtotal rows must use **bold font formatting** for their numerical values to clearly distinguish aggregated figures from individual line items.
+
+### Income Statement (P&L) Tab
+| Row | Formatting |
+|-----|------------|
+| Gross Revenue | Bold |
+| Total Cost of Revenue | Bold |
+| Gross Profit | Bold |
+| Total SG&A | Bold |
+| EBITDA | Bold |
+| EBIT | Bold |
+| EBT | Bold |
+| Net Profit After Tax | Bold |
+
+### Balance Sheet Tab
+| Row | Formatting |
+|-----|------------|
+| Total Current Assets | Bold |
+| Total Non-Current Assets | Bold |
+| Total Other Assets | Bold |
+| Total Assets | Bold |
+| Total Current Liabilities | Bold |
+| Total Non-Current Liabilities | Bold |
+| Total Equity | Bold |
+| Total Liabilities and Equity | Bold |
+
+### Cash Flow Statement Tab
+| Row | Formatting |
+|-----|------------|
+| Cash Generated from Operations Before Working Capital Changes | Bold |
+| Total Working Capital Changes | Bold |
+| Net Cash Generated from Operations | Bold |
+| Net Cash Flow from Investing Activities | Bold |
+| Net Cash Flow from Financing Activities | Bold |
+| Closing Cash Balance | Bold |
+
+**Note:** This list is non-exhaustive. Apply bold formatting to any row that represents a total, subtotal, or summary calculation across the model.
+
+## Balance Sheet Check Row Formatting
+
+The Balance Sheet check row (below Total Liabilities and Equity) uses conditional number formatting that displays non-zero values in red. When the balance sheet balances correctly (check = 0), the values display in black or standard formatting.
+
+| Check Value | Font Color |
+|-------------|------------|
+| = 0 (balanced) | Black (standard) |
+| ≠ 0 (error) | Red |
+
+**Implementation:** Apply custom number format `[Red][<>0]0.00;[Red][<>0](0.00);0.00` or use Excel conditional formatting with the rule "Cell Value ≠ 0" → Red font.
+
+## Margin Row Formatting
+
+| Element | Format |
+|---------|--------|
+| Margin % rows | Indent, italics, 1 decimal place |
+| Positive trend | No special formatting (or subtle green) |
+| Negative trend | Flag for review (subtle yellow) |
+| Below peer average | Consider highlighting for discussion |
+
+## Credit Metric Formatting
+
+| Element | Format |
+|---------|--------|
+| Leverage multiples | 1 decimal with "x" suffix (e.g., 2.5x) |
+| Percentages | 1 decimal with "%" suffix |
+| Net Debt negative | Parentheses, indicates net cash position |
+| Section header | Bold, "CREDIT METRICS" |
+| Separator line | Thin border above credit metrics section |
+
+## Credit Metric Threshold Colors
+
+| Metric | Green | Yellow | Red |
+|--------|-------|--------|-----|
+| Total Debt / EBITDA | < 2.5x | 2.5x-4.0x | > 4.0x |
+| Net Debt / EBITDA | < 2.0x | 2.0x-3.5x | > 3.5x |
+| Interest Coverage | > 4.0x | 2.5x-4.0x | < 2.5x |
+| Debt / Total Cap | < 40% | 40%-60% | > 60% |
+| Current Ratio | > 1.5x | 1.0x-1.5x | < 1.0x |
+| Quick Ratio | > 1.0x | 0.75x-1.0x | < 0.75x |
+
+## Conditional Formatting for Checks Tab
+
+- Cell contains pass indicator → Green fill
+- Cell contains fail indicator → Red fill
+- Cell contains warning → Yellow fill
+- Difference cells = 0 → Light green fill
+- Difference cells ≠ 0 → Light red fill
+
+## Margin Reasonability Flags
+
+- Gross Margin < 0% → ERROR: Review COGS
+- Gross Margin > 80% → WARNING: Verify revenue/COGS
+- EBITDA Margin < 0% → FLAG: Operating losses
+- EBITDA Margin > 50% → WARNING: Unusually high
+- Net Margin < 0% → FLAG: Net losses (may be acceptable in growth phase)
+- Net Margin > Gross Margin → ERROR: Formula issue
diff --git a/3-statement-model/references/formulas.md b/3-statement-model/references/formulas.md
new file mode 100644
index 0000000..db26457
--- /dev/null
+++ b/3-statement-model/references/formulas.md
@@ -0,0 +1,292 @@
+# Formula Reference
+
+**IMPORTANT:** Use the formulas outlined in this reference document unless otherwise specified by the user.
+
+---
+
+## Core Linkages
+
+```
+Balance Sheet: Assets = Liabilities + Equity
+Net Income: IS Net Income → CF Operations (starting point)
+Cash Flow: ΔCash = CFO + CFI + CFF
+Cash Tie-Out: Ending Cash (CF) = Cash (BS Asset)
+Cash Monthly/Annual: Closing Cash (Monthly) = Closing Cash (Annual)
+Retained Earnings: Prior RE + Net Income - Dividends = Ending RE
+Equity Raise: ΔCommon Stock/APIC (BS) = Equity Issuance (CFF)
+Year 0 Equity: Equity Raised (Year 0) = Beginning Equity (Year 1)
+```
+
+## Gross Profit Calculation
+
+**IMPORTANT:** Gross Profit must be calculated from Net Revenue, not Gross Revenue.
+
+```
+Net Revenue - Cost of Revenue = Gross Profit
+```
+
+| Term | Definition |
+|------|------------|
+| Gross Revenue | Total revenue before any deductions |
+| Net Revenue | Gross Revenue - Returns - Allowances - Discounts |
+| Cost of Revenue | Direct costs attributable to production of goods/services sold |
+| Gross Profit | Net Revenue - Cost of Revenue |
+
+**Note:** Always use Net Revenue (also called "Net Sales" or simply "Revenue" on most financial statements) as the starting point for profitability calculations. Gross Revenue overstates the true top-line performance.
+
+## Margin Formulas
+
+```
+Gross Margin % = Gross Profit / Net Revenue
+EBITDA = EBIT + D&A (or = Gross Profit - OpEx)
+EBITDA Margin % = EBITDA / Net Revenue
+EBIT Margin % = EBIT / Net Revenue
+Net Income Margin % = Net Income / Net Revenue
+```
+
+## Credit Metric Formulas
+
+```
+Total Debt = Current Portion of Debt + Long-Term Debt
+Net Debt = Total Debt - Cash
+Total Debt / EBITDA = Total Debt / EBITDA (from IS)
+Net Debt / EBITDA = Net Debt / EBITDA (from IS)
+Interest Coverage = EBITDA / Interest Expense (from IS)
+Net Int Exp % Debt = Net Interest Expense / Long-Term Debt
+Debt / Total Cap = Total Debt / (Total Debt + Total Equity)
+Debt / Equity = Total Debt / Total Equity
+Current Ratio = Total Current Assets / Total Current Liabilities
+Quick Ratio = (Total Current Assets - Inventory) / Total Current Liabilities
+```
+
+## Forecast Formulas (% of Net Revenue Method)
+
+```
+Cost of Revenue (Forecast) = Net Revenue × Cost of Revenue % Assumption
+S&M (Forecast) = Net Revenue × S&M % Assumption
+G&A (Forecast) = Net Revenue × G&A % Assumption
+R&D (Forecast) = Net Revenue × R&D % Assumption
+SBC (Forecast) = Net Revenue × SBC % Assumption
+```
+
+## Working Capital Formulas
+
+```
+Accounts Receivable
+ Prior AR
+ + Revenue (from IS)
+ - Cash Collections (plug)
+ = Ending AR
+ DSO = (AR / Revenue) × 365
+
+Inventory
+ Prior Inventory
+ + Purchases (plug)
+ - COGS (from IS)
+ = Ending Inventory
+ DIO = (Inventory / COGS) × 365
+
+Accounts Payable
+ Prior AP
+ + Purchases (from Inventory calc)
+ - Cash Payments (plug)
+ = Ending AP
+ DPO = (AP / COGS) × 365
+
+Net Working Capital = AR + Inventory - AP
+ΔWC = Current NWC - Prior NWC
+```
+
+## D&A Schedule Formulas
+
+```
+Beginning PP&E (Gross)
++ CapEx
+= Ending PP&E (Gross)
+
+Beginning Accumulated Depreciation
++ Depreciation Expense
+= Ending Accumulated Depreciation
+
+PP&E (Net) = Gross PP&E - Accumulated Depreciation
+```
+
+## Debt Schedule Formulas
+
+```
+Beginning Debt Balance
++ New Borrowings
+- Repayments
+= Ending Debt Balance
+
+Interest Expense = Avg Debt Balance × Interest Rate
+ (Use beginning balance to avoid circularity, or iterate if circular refs enabled)
+```
+
+## Retained Earnings Formula
+
+```
+Beginning Retained Earnings
++ Net Income (from IS)
++ Stock-Based Compensation (SBC) (from IS)
+- Dividends
+= Ending Retained Earnings
+```
+
+## NOL (Net Operating Loss) Schedule Formulas
+
+```
+NOL CARRYFORWARD SCHEDULE
+
+Beginning NOL Balance (Year 1 / Formation = 0)
++ NOL Generated (if EBT < 0, then ABS(EBT), else 0)
+- NOL Utilized (limited by taxable income and utilization cap)
+= Ending NOL Balance
+
+STARTING BALANCE RULE
+
+For a new business or first modeled period:
+ Beginning NOL Balance = 0
+ NOL can only increase through realized losses (EBT < 0)
+ NOL cannot be created from thin air or assumed
+
+NOL UTILIZATION CALCULATION
+
+Pre-Tax Income (EBT)
+ If EBT > 0:
+ NOL Available = Beginning NOL Balance
+ Utilization Limit = EBT × 80% (post-2017 federal limit)
+ NOL Utilized = MIN(NOL Available, Utilization Limit)
+ Taxable Income = EBT - NOL Utilized
+ If EBT ≤ 0:
+ NOL Utilized = 0
+ Taxable Income = 0
+ NOL Generated = ABS(EBT)
+
+TAX CALCULATION WITH NOL
+
+Taxes Payable = MAX(0, Taxable Income × Tax Rate)
+ (Taxes cannot be negative; losses create NOL asset instead)
+
+DEFERRED TAX ASSET (DTA) FOR NOL
+
+DTA - NOL Carryforward = Ending NOL Balance × Tax Rate
+ΔDTA = Current DTA - Prior DTA
+ (Increase in DTA = non-cash benefit on CF)
+ (Decrease in DTA = non-cash expense on CF)
+```
+
+## Balance Sheet Structure
+
+```
+ASSETS
+ Cash (from CF ending cash)
+ Accounts Receivable (from WC)
+ Inventory (from WC)
+ Total Current Assets
+
+ PP&E, Net (from DA)
+ Deferred Tax Asset - NOL (from NOL schedule)
+ Total Non-Current Assets
+ Total Assets
+
+LIABILITIES
+ Accounts Payable (from WC)
+ Current Portion of Debt (from Debt)
+ Total Current Liabilities
+
+ Long-Term Debt (from Debt)
+ Total Liabilities
+
+EQUITY
+ Common Stock
+ Retained Earnings (from RE schedule)
+ Total Equity
+
+CHECK: Assets - Liabilities - Equity = 0
+```
+
+## Cash Flow Statement Structure
+
+```
+CASH FROM OPERATIONS (CFO)
+ Net Income (LINK: IS)
+ + D&A (LINK: DA schedule)
+ + Stock-Based Compensation (SBC) (LINK: IS or Assumptions)
+ - ΔDTA (Deferred Tax Asset) (LINK: NOL schedule; increase in DTA = use of cash)
+ - ΔAR (LINK: WC)
+ - ΔInventory (LINK: WC)
+ + ΔAP (LINK: WC)
+ = CFO
+
+CASH FROM INVESTING (CFI)
+ - CapEx (LINK: DA schedule)
+ = CFI
+
+CASH FROM FINANCING (CFF)
+ + Debt Issuance (LINK: Debt)
+ - Debt Repayment (LINK: Debt)
+ + Equity Issuance (LINK: BS Common Stock/APIC)
+ - Dividends (LINK: RE schedule)
+ = CFF
+
+Net Change in Cash = CFO + CFI + CFF
+Beginning Cash
++ Net Change in Cash
+= Ending Cash (LINK TO: BS Cash)
+```
+
+## Income Statement Structure
+
+```
+Net Revenue
+ Growth %
+(-) Cost of Revenue
+ % of Net Revenue
+────────────────
+Gross Profit (= Net Revenue - Cost of Revenue)
+ Gross Margin %
+
+(-) S&M
+ % of Net Revenue
+(-) G&A
+ % of Net Revenue
+(-) R&D
+ % of Net Revenue
+(-) D&A
+(-) SBC
+ % of Net Revenue
+────────────────
+EBIT
+ EBIT Margin %
+
+EBITDA
+ EBITDA Margin %
+
+(-) Interest Expense
+────────────────
+EBT (Pre-Tax Income)
+(-) NOL Utilization (from NOL schedule, reduces taxable income)
+────────────────
+Taxable Income
+(-) Taxes (Taxable Income × Tax Rate)
+────────────────
+Net Income
+ Net Income Margin %
+```
+
+## Check Formulas
+
+```
+BS Balance Check: = Assets - Liabilities - Equity (must = 0)
+Cash Tie-Out: = BS Cash - CF Ending Cash (must = 0)
+RE Roll-Forward: = Prior RE + NI + SBC - Div - BS RE (must = 0)
+DTA Tie-Out: = NOL Schedule DTA - BS DTA (must = 0)
+Equity Raise Tie-Out: = ΔCommon Stock/APIC (BS) - Equity Issuance (CFF) (must = 0)
+Year 0 Equity Tie-Out: = Equity Raised (Year 0) - Beginning Equity (Year 1) (must = 0)
+Cash Monthly vs Annual: = Closing Cash (Monthly) - Closing Cash (Annual) (must = 0)
+NOL Utilization Cap: = NOL Utilized ≤ EBT × 80% (must be TRUE for post-2017)
+NOL Non-Negative: = Ending NOL Balance ≥ 0 (must be TRUE)
+NOL Starting Balance: = Beginning NOL (Year 1) = 0 (must be TRUE for new business)
+NOL Accumulation: = NOL increases only when EBT < 0 (losses generate NOL)
+```
diff --git a/3-statement-model/references/sec-filings.md b/3-statement-model/references/sec-filings.md
new file mode 100644
index 0000000..e0fa484
--- /dev/null
+++ b/3-statement-model/references/sec-filings.md
@@ -0,0 +1,125 @@
+# SEC Filings Data Extraction Reference
+
+**When to Use:** Only reference this file when a model template specifically requires pulling data from SEC filings (10-K, 10-Q). For templates that provide data directly or use other data sources, this reference is not needed.
+
+---
+
+## Extracting Data from SEC Filings (10-K / 10-Q)
+
+When populating a model template with public company data, extract financials directly from SEC filings.
+
+### Step 1: Locate the Filing
+
+1. Use SEC EDGAR: `https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=[TICKER]&type=10-K`
+2. For quarterly data, use `type=10-Q`
+
+### Step 2: Identify Filing Currency
+
+Before extracting data, identify the reporting currency:
+- Check the cover page or header for reporting currency
+- Look at statement headers (e.g., "in thousands of U.S. dollars")
+- Review Note 1 (Summary of Significant Accounting Policies)
+
+**Common Currency Indicators**
+
+| Indicator | Currency |
+|-----------|----------|
+| $, USD | US Dollar |
+| €, EUR | Euro |
+| £, GBP | British Pound |
+| ¥, JPY | Japanese Yen |
+| ¥, CNY, RMB | Chinese Yuan |
+| CHF | Swiss Franc |
+| CAD, C$ | Canadian Dollar |
+
+Set model currency to match filing; document in Assumptions tab.
+
+### Step 3: Navigate to Financial Statements
+
+Within the 10-K or 10-Q, locate:
+- **Item 8** (10-K) or **Item 1** (10-Q): Financial Statements
+- Key sections to extract:
+ - Consolidated Statements of Operations (Income Statement)
+ - Consolidated Balance Sheets
+ - Consolidated Statements of Cash Flows
+ - Notes to Financial Statements (for schedule details)
+
+### Step 4: Data Extraction Mapping
+
+**Income Statement (from Consolidated Statements of Operations)**
+
+| Filing Line Item | Model Line Item |
+|------------------|-----------------|
+| Net revenues / Net sales | Revenue |
+| Cost of goods sold | COGS |
+| Selling, general and administrative | SG&A |
+| Depreciation and amortization | D&A |
+| Interest expense, net | Interest Expense |
+| Income tax expense | Taxes |
+| Net income | Net Income |
+
+**Balance Sheet (from Consolidated Balance Sheets)**
+
+| Filing Line Item | Model Line Item |
+|------------------|-----------------|
+| Cash and cash equivalents | Cash |
+| Accounts receivable, net | AR |
+| Inventories | Inventory |
+| Property, plant and equipment, net | PP&E (Net) |
+| Total assets | Total Assets |
+| Accounts payable | AP |
+| Short-term debt / Current portion of LT debt | Current Debt |
+| Long-term debt | LT Debt |
+| Retained earnings | Retained Earnings |
+| Total stockholders' equity | Total Equity |
+
+**Cash Flow Statement (from Consolidated Statements of Cash Flows)**
+
+| Filing Line Item | Model Line Item |
+|------------------|-----------------|
+| Net income | Net Income |
+| Depreciation and amortization | D&A |
+| Changes in accounts receivable | ΔAR |
+| Changes in inventories | ΔInventory |
+| Changes in accounts payable | ΔAP |
+| Capital expenditures | CapEx |
+| Proceeds from issuance of common stock | Equity Issuance |
+| Proceeds from / Repayments of debt | Debt activity |
+| Dividends paid | Dividends |
+
+### Step 5: Extract Supporting Detail from Notes
+
+For schedules, pull from Notes to Financial Statements:
+- **Note: Debt** → Maturity schedule, interest rates, covenants
+- **Note: Property, Plant & Equipment** → Gross PP&E, accumulated depreciation, useful lives
+- **Note: Revenue** → Segment breakdowns, geographic splits
+- **Note: Leases** → Operating vs. finance lease obligations
+
+### Step 6: Historical Data Requirements
+
+Extract 3 years of historical data minimum:
+- 10-K provides 3 years of IS/CF, 2 years of BS
+- For 3rd year BS, pull from prior year's 10-K
+- Use 10-Qs to fill in quarterly granularity if needed
+
+### Data Extraction Checklist
+
+- Identify reporting currency and scale (thousands, millions)
+- 3 years historical Income Statement
+- 3 years historical Cash Flow Statement
+- 3 years historical Balance Sheet
+- Verify IS Net Income = CF starting Net Income (each year)
+- Verify BS Cash = CF Ending Cash (each year)
+- Extract debt maturity schedule from notes
+- Extract D&A detail or useful life assumptions
+- Note any non-recurring / one-time items to normalize
+
+### Handling Common Filing Variations
+
+| Variation | How to Handle |
+|-----------|---------------|
+| D&A embedded in COGS/SG&A | Pull D&A from Cash Flow Statement |
+| "Other" line items are material | Check notes for breakdown |
+| Restatements | Use restated figures, note in assumptions |
+| Fiscal year ≠ calendar year | Label with fiscal year end (e.g., FYE Jan 2025) |
+| Non-USD reporting currency | Adapt model currency to match filing |
diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md
new file mode 100644
index 0000000..2de823b
--- /dev/null
+++ b/ATTRIBUTION.md
@@ -0,0 +1,95 @@
+# Attribution
+
+The following top-level skills are vendored from Anthropic's open-source
+[`anthropics/financial-services`](https://github.com/anthropics/financial-services)
+repository, licensed under **Apache License 2.0** (see `LICENSE.anthropic-skills`).
+
+- Source commit: `4aa51ed3d379731f8f9beff498d749580372699c` (2026-06-26)
+- Imported: 2026-07-02
+
+Two batches were vendored, both sitting as siblings to the repo's own `data/`
+and `backtesting/` skills:
+
+1. **Data-free skills (21)** — operate purely on user-supplied inputs, logic, or
+ formatting (no SEC/EDGAR, market-data, or enterprise-system connectors).
+2. **Data-backed skills (14)** — upstream these depend on external market/filings
+ data (S&P/FactSet MCP servers, SEC lookups); here each carries an added
+ **"Data sources (Rebyte)"** section wiring it to the Rebyte Financial Data
+ Service (`financial/sql` lake: `us.*`/`cn.*` tables, `financial/search`
+ semantic news search) and the live REST proxies (`stocks` = Polygon US,
+ `cn-stocks` = Tushare CN), with unpowerable inputs (analyst consensus,
+ earnings calendar, 13F/ownership, M&A deal databases, TAM estimates)
+ explicitly marked as user-supplied.
+
+## Vendored data-free skills (21)
+
+**Output / check engines**
+`xlsx-author`, `pptx-author`, `audit-xls`, `clean-data-xls`,
+`ib-check-deck`, `deck-refresh`
+
+**Model math**
+`lbo-model`, `merger-model`, `returns-analysis`, `unit-economics`
+
+**Document drafting / process**
+`ic-memo`, `teaser`, `process-letter`, `cim-builder`, `dd-checklist`,
+`dd-meeting-prep`, `deal-screening`, `deal-tracker`, `investment-proposal`,
+`kyc-doc-parse`, `kyc-rules`
+
+Each was taken from the richest copy present in the source repo's `plugins/` tree
+(a single skill can appear in multiple plugins). Skill contents are unmodified
+except for the local additions below.
+
+## Vendored data-backed skills (14)
+
+**Equity research** (from `vertical-plugins/equity-research`)
+`earnings-analysis`, `idea-generation`, `initiating-coverage`, `model-update`,
+`morning-note`, `sector-overview`, `thesis-tracker`
+
+**Financial analysis** (from `vertical-plugins/financial-analysis`)
+`comps-analysis`, `dcf-model`, `3-statement-model`, `competitive-analysis`
+
+**Investment banking** (from `vertical-plugins/investment-banking`)
+`strip-profile`, `datapack-builder`, `pitch-deck`
+
+Contents are unmodified upstream except for (a) the appended
+"Data sources (Rebyte)" section in each SKILL.md, and (b) the local fixes below.
+
+## Not vendored (deliberately excluded)
+
+`skill-creator` and `ppt-template-creator` were dropped — both are meta-skills for
+*authoring skills*, not financial capabilities, and `ppt-template-creator` depended
+on `skill-creator`.
+
+From the data-backed candidates, three were excluded because their **core** input
+is data we do not carry: `catalyst-calendar` (forward earnings/macro event
+calendar), `earnings-preview` (analyst consensus + confirmed earnings date +
+options-implied move), and `buyer-list` (PE fund/sponsor database, 13F ownership,
+M&A transaction database — the financial-sponsors half of its deliverable is
+unpowerable).
+
+## Local additions / modifications
+
+The source repo referenced a few runtime assets it never actually shipped. Supplied
+locally so the vendored skills resolve standalone:
+
+- `lbo-model/scripts/recalc.py` — LibreOffice-headless formula recalc helper,
+ replacing the source's `/mnt/skills/public/xlsx/recalc.py` sandbox path (the
+ reference in `lbo-model/SKILL.md` was repointed to `scripts/recalc.py`).
+- `lbo-model/examples/LBO_Model.xlsx` — standard LBO template skeleton
+ (Assumptions · Sources & Uses · Operating Model · Debt Schedule · Returns ·
+ Checks), formula-driven per the skill's blue/black/green conventions. The source
+ referenced this template but did not include it.
+
+`pptx-author`'s optional `templates/firm-template.pptx` is intentionally not
+supplied — the skill already falls back to default layouts when no template is
+mounted.
+
+Data-backed batch fixes:
+
+- `dcf-model/scripts/recalc.py` — copied from `lbo-model/scripts/recalc.py`
+ (upstream invokes a bare `recalc.py` from the separate `xlsx` skill; references
+ repointed to `scripts/recalc.py`).
+- `comps-analysis` / `strip-profile` — upstream SKILL.md referenced example files
+ (`examples/comps_example.xlsx`, `examples/Nike_Strip_Profile_Example.pptx`)
+ that were never shipped in the source repo; the references were rewritten to
+ state no example is bundled.
diff --git a/LICENSE.anthropic-skills b/LICENSE.anthropic-skills
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/LICENSE.anthropic-skills
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/audit-xls/SKILL.md b/audit-xls/SKILL.md
new file mode 100644
index 0000000..a2cae1d
--- /dev/null
+++ b/audit-xls/SKILL.md
@@ -0,0 +1,156 @@
+---
+name: audit-xls
+description: Audit a spreadsheet for formula accuracy, errors, and common mistakes. Scopes to a selected range, a single sheet, or the entire model (including financial-model integrity checks like BS balance, cash tie-out, and logic sanity). Triggers on "audit this sheet", "check my formulas", "find formula errors", "QA this spreadsheet", "sanity check this", "debug model", "model check", "model won't balance", "something's off in my model", "model review".
+---
+
+# Audit Spreadsheet
+
+Audit formulas and data for accuracy and mistakes. Scope determines depth — from quick formula checks on a selection up to full financial-model integrity audits.
+
+## Step 1: Determine scope
+
+If the user already gave a scope, use it. Otherwise **ask them**:
+
+> What scope do you want me to audit?
+> - **selection** — just the currently selected range
+> - **sheet** — the current active sheet only
+> - **model** — the whole workbook, including financial-model integrity checks (BS balance, cash tie-out, roll-forwards, logic sanity)
+
+The **model** scope is the deepest — use it for DCF, LBO, 3-statement, merger, comps, or any integrated financial model before sending to a client or IC.
+
+---
+
+## Step 2: Formula-level checks (ALL scopes)
+
+Run these regardless of scope:
+
+| Check | What to look for |
+|---|---|
+| Formula errors | `#REF!`, `#VALUE!`, `#N/A`, `#DIV/0!`, `#NAME?` |
+| Hardcodes inside formulas | `=A1*1.05` — the `1.05` should be a cell reference |
+| Inconsistent formulas | A formula that breaks the pattern of its neighbors in a row/column |
+| Off-by-one ranges | `SUM`/`AVERAGE` that misses the first or last row |
+| Pasted-over formulas | Cell that looks like a formula but is actually a hardcoded value |
+| Circular references | Intentional or accidental |
+| Broken cross-sheet links | References to cells that moved or were deleted |
+| Unit/scale mismatches | Thousands mixed with millions, % stored as whole numbers |
+| Hidden rows/tabs | Could contain overrides or stale calculations |
+
+---
+
+## Step 3: Model-integrity checks (MODEL scope only)
+
+If scope is **model**, identify the model type (DCF / LBO / 3-statement / merger / comps / custom) and run the appropriate integrity checks below.
+
+### 3a. Structural review
+
+| Check | What to look for |
+|---|---|
+| Input/formula separation | Are inputs clearly separated from calculations? |
+| Color convention | Blue=input, black=formula, green=link — or whatever the model uses, applied consistently? |
+| Tab flow | Logical order (Assumptions → IS → BS → CF → Valuation)? |
+| Date headers | Consistent across all tabs? |
+| Units | Consistent (thousands vs millions vs actuals)? |
+
+### 3b. Balance Sheet
+
+| Check | Test |
+|---|---|
+| BS balances | Total Assets = Total Liabilities + Equity (every period) |
+| RE rollforward | Prior RE + Net Income − Dividends = Current RE |
+| Goodwill/intangibles | Flow from acquisition assumptions (if M&A) |
+
+If BS doesn't balance, **quantify the gap per period and trace where it breaks** — nothing else matters until this is fixed.
+
+### 3c. Cash Flow Statement
+
+| Check | Test |
+|---|---|
+| Cash tie-out | CF Ending Cash = BS Cash (every period) |
+| CF sums | CFO + CFI + CFF = Δ Cash |
+| D&A match | D&A on CF = D&A on IS |
+| CapEx match | CapEx on CF matches PP&E rollforward on BS |
+| WC changes | Signs match BS movements (ΔAR, ΔAP, ΔInventory) |
+
+### 3d. Income Statement
+
+| Check | Test |
+|---|---|
+| Revenue build | Ties to segment/product detail |
+| Tax | Tax expense = Pre-tax income × tax rate (allow for deferred tax adj) |
+| Share count | Ties to dilution schedule (options, converts, buybacks) |
+
+### 3e. Circular references
+
+- Interest → debt balance → cash → interest is a common intentional circ in LBO/3-stmt models
+- If intentional: verify iteration toggle exists and works
+- If unintentional: trace the loop and flag how to break it
+
+### 3f. Logic & reasonableness
+
+| Check | Flag if |
+|---|---|
+| Growth rates | >100% revenue growth without explanation |
+| Margins | Outside industry norms |
+| Terminal value dominance | TV > ~75% of DCF EV (yellow flag) |
+| Hockey-stick | Projections ramp unrealistically in out-years |
+| Compounding | EBITDA compounds to absurd $ by Year 10 |
+| Edge cases | Model breaks at 0% or negative growth, negative EBITDA, leverage goes negative |
+
+### 3g. Model-type-specific bugs
+
+**DCF:**
+- Discount rate applied to wrong period (mid-year vs end-of-year)
+- Terminal value not discounted back
+- WACC uses book values instead of market values
+- FCF includes interest expense (should be unlevered)
+- Tax shield double-counted
+
+**LBO:**
+- Debt paydown doesn't match cash sweep mechanics
+- PIK interest not accruing to principal
+- Management rollover not reflected in returns
+- Exit multiple applied to wrong EBITDA (LTM vs NTM)
+- Fees/expenses not deducted from Day 1 equity
+
+**Merger:**
+- Accretion/dilution uses wrong share count (pre- vs post-deal)
+- Synergies not phased in
+- Purchase price allocation doesn't balance
+- Foregone interest on cash not included
+- Transaction fees not in sources & uses
+
+**3-statement:**
+- Working capital changes have wrong sign
+- Depreciation doesn't match PP&E schedule
+- Debt maturity schedule doesn't match principal payments
+- Dividends exceed net income without explanation
+
+---
+
+## Step 4: Report
+
+Output a findings table:
+
+| # | Sheet | Cell/Range | Severity | Category | Issue | Suggested Fix |
+|---|---|---|---|---|---|---|
+
+**Severity:**
+- **Critical** — wrong output (BS doesn't balance, formula broken, cash doesn't tie)
+- **Warning** — risky (hardcodes, inconsistent formulas, edge-case failures)
+- **Info** — style/best-practice (color coding, layout, naming)
+
+For **model** scope, prepend a summary line:
+
+> Model type: [DCF/LBO/3-stmt/...] — Overall: [Clean / Minor Issues / Major Issues] — [N] critical, [N] warnings, [N] info
+
+**Don't change anything without asking** — report first, fix on request.
+
+---
+
+## Notes
+
+- **BS balance first** — if it doesn't balance, everything downstream is suspect
+- **Hardcoded overrides are the #1 source of silent bugs** — search aggressively
+- **Sign convention errors** (positive vs negative for cash outflows) are extremely common
+- If the model uses VBA macros, note any macro-driven calculations that can't be audited from formulas alone
diff --git a/cim-builder/SKILL.md b/cim-builder/SKILL.md
new file mode 100644
index 0000000..2fecd02
--- /dev/null
+++ b/cim-builder/SKILL.md
@@ -0,0 +1,105 @@
+---
+name: cim-builder
+description: Structure and draft a Confidential Information Memorandum for sell-side M&A processes. Organizes company information into a professional, investor-ready document with consistent formatting and narrative flow. Use when preparing sell-side materials, drafting a CIM, or organizing company data for a sale process. Triggers on "CIM", "confidential information memorandum", "offering memorandum", "info memo", "draft CIM", or "sell-side materials".
+---
+
+# CIM Builder
+
+## Workflow
+
+### Step 1: Gather Source Materials
+
+Ask for available inputs:
+- Management presentations
+- Historical financials (3-5 years)
+- Budget/forecast
+- Company website and marketing materials
+- Customer data (anonymized if needed)
+- Org chart
+- Prior presentations or board decks
+- Quality of earnings report (if available)
+
+### Step 2: CIM Structure
+
+Standard CIM table of contents:
+
+**I. Executive Summary** (2-3 pages)
+- Company overview — what they do, why they win
+- Investment highlights (5-7 key selling points)
+- Financial summary — headline revenue, EBITDA, growth, margins
+- Transaction overview — what's being sold, indicative timeline
+
+**II. Company Overview** (3-5 pages)
+- History and founding story
+- Mission and value proposition
+- Products and services description
+- Business model and revenue streams
+- Key differentiators and competitive advantages
+
+**III. Industry Overview** (3-5 pages)
+- Market size and growth dynamics (TAM/SAM/SOM)
+- Key industry trends and tailwinds
+- Competitive landscape
+- Regulatory environment
+- Barriers to entry
+
+**IV. Growth Opportunities** (2-3 pages)
+- Organic growth levers (new products, markets, pricing)
+- M&A / add-on opportunities
+- Operational improvements
+- Technology investments
+- White space analysis
+
+**V. Customers & Sales** (3-5 pages)
+- Customer overview (number, segments, geography)
+- Top customer analysis (anonymized if pre-LOI)
+- Customer concentration and retention metrics
+- Sales process and go-to-market strategy
+- Pipeline and backlog
+
+**VI. Operations** (2-3 pages)
+- Organizational structure
+- Key personnel
+- Facilities and geographic footprint
+- Technology and systems
+- Supply chain / vendor relationships
+
+**VII. Financial Overview** (5-8 pages)
+- Historical income statement (3-5 years)
+- Revenue analysis — by segment, geography, customer type
+- EBITDA bridge and margin analysis
+- Balance sheet overview
+- Cash flow summary
+- Capital expenditure history
+- Working capital analysis
+- Management forecast / budget (if included)
+
+**VIII. Appendix**
+- Detailed financial statements
+- Customer list (anonymized)
+- Product catalog
+- Management bios
+
+### Step 3: Drafting Guidelines
+
+- **Tone**: Professional, factual, compelling but not hyperbolic
+- **Narrative**: Tell a story — why this business is attractive, defensible, and positioned for growth
+- **Data-driven**: Support every claim with data. "Strong growth" → "Revenue grew at a 15% CAGR from 2021-2024"
+- **Visuals**: Charts and graphs for financial trends, market size, competitive positioning
+- **Length**: 40-60 pages total — enough detail to inform first-round bids, not so long buyers won't read it
+- **Confidentiality**: Include a disclaimer page. Anonymize sensitive customer data unless seller approves
+
+### Step 4: Output
+
+- Word document (.docx) with professional formatting
+- Separate Excel appendix with detailed financials
+- Charts and exhibits embedded in the document
+
+## Important Notes
+
+- The CIM is a sales document — lead with strengths, but don't hide material issues (buyers will find them in diligence)
+- Investment highlights should address the 3 things every buyer cares about: growth potential, margin profile, and defensibility
+- Financial normalization / pro forma adjustments should be clearly labeled and explained
+- Work with legal on the confidentiality disclaimer and any regulatory disclosures
+- Get management to review for factual accuracy before distribution
+- The CIM sets expectations on valuation — make sure the narrative supports the asking price
diff --git a/clean-data-xls/SKILL.md b/clean-data-xls/SKILL.md
new file mode 100644
index 0000000..82cab2c
--- /dev/null
+++ b/clean-data-xls/SKILL.md
@@ -0,0 +1,50 @@
+---
+name: clean-data-xls
+description: Clean up messy spreadsheet data — trim whitespace, fix inconsistent casing, convert numbers-stored-as-text, standardize dates, remove duplicates, and flag mixed-type columns. Use when data is messy, inconsistent, or needs prep before analysis. Triggers on "clean this data", "clean up this sheet", "normalize this data", "fix formatting", "dedupe", "standardize this column", "this data is messy".
+---
+
+# Clean Data
+
+Clean messy data in the active sheet or a specified range.
+
+## Environment
+
+- **If running inside Excel (Office Add-in / Office JS):** Use Office JS directly (`Excel.run(async (context) => {...})`). Read via `range.values`, write helper-column formulas via `range.formulas = [["=TRIM(A2)"]]`. The in-place vs helper-column decision still applies.
+- **If operating on a standalone .xlsx file:** Use Python/openpyxl.
+
+## Workflow
+
+### Step 1: Scope
+
+- If a range is given (e.g. `A1:F200`), use it
+- Otherwise use the full used range of the active sheet
+- Profile each column: detect its dominant type (text / number / date) and identify outliers
+
+### Step 2: Detect issues
+
+| Issue | What to look for |
+|---|---|
+| Whitespace | leading/trailing spaces, double spaces |
+| Casing | inconsistent casing in categorical columns (`usa` / `USA` / `Usa`) |
+| Number-as-text | numeric values stored as text; stray `$`, `,`, `%` in number cells |
+| Dates | mixed formats in the same column (`3/8/26`, `2026-03-08`, `March 8 2026`) |
+| Duplicates | exact-duplicate rows and near-duplicates (case/whitespace differences) |
+| Blanks | empty cells in otherwise-populated columns |
+| Mixed types | a column that's 98% numbers but has 3 text entries |
+| Encoding | mojibake (`é`, `’`), non-printing characters |
+| Errors | `#REF!`, `#N/A`, `#VALUE!`, `#DIV/0!` |
+
+### Step 3: Propose fixes
+
+Show a summary table before changing anything:
+
+| Column | Issue | Count | Proposed Fix |
+|---|---|---|---|
+
+### Step 4: Apply
+
+- **Prefer formulas over hardcoded cleaned values** — where the cleaned output can be expressed as a formula (e.g. `=TRIM(A2)`, `=VALUE(SUBSTITUTE(B2,"$",""))`, `=UPPER(C2)`, `=DATEVALUE(D2)`), write the formula in an adjacent helper column rather than computing the result in Python and overwriting the original. This keeps the transformation transparent and auditable.
+- Only overwrite in place with computed values when the user explicitly asks for it, or when no sensible formula equivalent exists (e.g. encoding/mojibake repair)
+- For destructive operations (removing duplicates, filling blanks, overwriting originals), confirm with the user first
+- After each category of fix (whitespace → casing → number conversion → dates → dedup), show the user a sample of what changed and get confirmation before moving to the next category
+- Report a before/after summary of what changed
diff --git a/competitive-analysis/SKILL.md b/competitive-analysis/SKILL.md
new file mode 100644
index 0000000..24330c0
--- /dev/null
+++ b/competitive-analysis/SKILL.md
@@ -0,0 +1,289 @@
+---
+name: competitive-analysis
+description: Framework for building competitive landscape decks — market positioning, competitor deep-dives, comparative analysis, strategic synthesis. Use when the user asks for a competitive landscape, competitor analysis, peer comparison, market positioning assessment, strategic review, or investment memo deck. Also triggers on "who are the competitors to X", "benchmark X against peers", "build a market map", or any request to systematically evaluate competitive dynamics across an industry.
+---
+
+# Competitive Landscape Mapping
+
+Build a complete competitive analysis deck. This is a two-phase process: gather requirements and get outline approval first, then build.
+
+## Environment check
+
+This skill works in both the PowerPoint add-in and chat. Identify which you're in before starting — the mechanics differ, the workflow doesn't:
+
+- **Add-in** — the deck is open live; build slides directly into it.
+- **Chat** — generate a `.pptx` file (or build into one the user uploaded).
+
+Everything below applies in both.
+
+## Phase 1 — Scope the analysis
+
+Competitive analysis means different things to different people. Before any research or slide-building, use `ask_user_question` to pin down what they actually want. Don't guess — a 20-slide peer benchmarking deck and a 5-slide market map are both "competitive analysis" and take completely different shapes.
+
+Gather in one round if you can (the tool takes up to 4 questions):
+
+- **Scope** — Single target company with competitors around it? Or multi-company side-by-side with no protagonist?
+- **Competitor set** — Which companies are in scope? If the user names them, use exactly those. If they say "the usual suspects," propose a set and confirm.
+- **Audience and depth** — Quick read for someone already in the space, or a full primer? This drives whether you need market sizing, industry economics, and history — or can skip to the comparison.
+- **Investment context** — Do they need bull/base/bear scenarios and signposts? That's Step 9 below; skip it if this is a strategic review rather than an investment thesis.
+
+If they've uploaded an Excel/CSV with competitor data, confirm which columns map to which metrics before you start pulling numbers. Source-file fidelity matters: use values exactly as given, don't recalculate or re-round.
+
+## Phase 2 — Outline, approve, then build
+
+**Do not create slides until the outline is approved.** Propose slide titles and one-line content notes, present them to the user, get a yes. A competitive deck is 10-20 slides of interlocking content — rebuilding because slide 4 was wrong is expensive. The outline is the cheap iteration point.
+
+When proposing the outline, `ask_user_question` works well for the structural decisions: which positioning visualization (2×2 matrix / radar / tier diagram — Step 5 below), how to group competitors (by business model / segment / posture — Step 4). These are taste calls the user likely has an opinion on.
+
+---
+
+## Standards — apply throughout
+
+### Prompt fidelity
+
+When the user specifies something, that's a requirement, not a suggestion:
+- **Slide titles and section names** — exact wording. If they say "Overview and Competitive Scope," don't swap in "FY2024 Competitive Landscape."
+- **Chart vs. table** — not interchangeable. "Embedded chart" means a real chart object with data labels on the bars/slices, not a formatted table.
+- **Complete data series** — if they list 7 competitors, include all 7. If they show 2015-2025, include every year.
+- **Exact values and ratios** — "surpasses DoorDash 4:1, Lyft 8:1" means those ratios, not "7.6x Lyft."
+
+### Source quality, when sources conflict
+
+1. 10-Ks / annual reports (audited)
+2. Earnings calls / investor presentations (management commentary)
+3. Sell-side research (analyst estimates, useful for private company sizing)
+4. Industry reports (McKinsey, Gartner — market sizing, trends)
+5. News (recent developments only; verify against primary sources)
+
+### Data comparability
+
+- All competitor metrics from the same fiscal year; flag exceptions explicitly ("FY24" vs "H1 2024")
+- Same metric definitions across competitors
+- Convert to USD for international; note the exchange rate and date
+- Missing data shows as "-" or "N/A" with an "[E]" flag for estimates — never blank
+- Every number has a citation: "[Company] [Document] ([Date])"
+
+### Design
+
+- **Slide titles are insights, not labels.** "Scale leaders pulling away from niche players" — not "Competitive Analysis."
+- **Signposts are quantified.** "Margin below 40%" — not "margins decline."
+- **Ratings show the actual.** "●●● $160B" — not just "●●●."
+- **Charts are real chart objects** — not text tables dressed up to look like charts.
+
+**Typography** — set explicitly, don't rely on defaults:
+- Slide titles: 28-32pt bold
+- Section headers: 18-20pt bold
+- Body text: 14-16pt (never below 14pt)
+- Table text: 14pt
+- Sources/footnotes: 14pt, gray
+- Same element type = same size throughout the deck
+
+**Charts:**
+- Legend inside the chart boundary, not floating over the plot area
+- Right-side legend for pies (≤6 slices), bottom legend for line/bar (≤4 series)
+- More than 6 series → split into multiple charts or use a table
+- Pie charts show percentages on slices, not just in the legend
+
+**Tables:**
+- Light gray header row, bold
+- Right-align numbers, left-align text
+- Enough cell padding that text doesn't touch borders
+
+**Color:** 2-3 colors max. Muted — navy, gray, one accent. Same color meanings throughout.
+
+### What's strict vs. flexible
+
+| Always | Case-by-case |
+|---|---|
+| Exact titles/sections when user specifies | Creative titles when they don't |
+| Chart when user says chart; table when they say table | Visualization type when unspecified |
+| Every competitor/data point they list | Number of competitors when unspecified |
+| Exact values when specified | Rounding when precision unspecified |
+| Titles fit without overflow | Number of competitor categories |
+| No overlapping elements | Which dimensions to compare |
+
+---
+
+## Analysis workflow
+
+### Step 0 — Industry-defining metrics
+
+Before anything else: what 3-5 metrics does this industry actually run on? Use these consistently across every competitor.
+
+| Industry | Key metrics |
+|---|---|
+| SaaS | ARR, NRR, CAC payback, LTV/CAC, Rule of 40 |
+| Payments | GPV, take rate, attach rate, transaction margin |
+| Marketplaces | GMV, take rate, buyer/seller ratio, repeat rate |
+| Retail | Same-store sales, inventory turns, sales per sq ft |
+| Logistics | Volume, cost per unit, on-time delivery %, capacity utilization |
+
+Industry not listed — pick the metrics investors and operators benchmark on.
+
+### Step 1 — Market context
+
+Size, growth, drivers, headwinds. With sources.
+
+Correct: "Embedded payments is $80-100B in 2024, growing 20-25% CAGR (McKinsey 2024)"
+Wrong: "The market is large and growing rapidly"
+
+### Step 2 — Industry economics
+
+Map how value flows. Approach depends on industry structure:
+- **Vertically structured** — value chain layers, typical margin at each
+- **Platform/network** — ecosystem participants, value flows between them
+- **Fragmented** — consolidation dynamics, margin differences by scale
+
+### Step 3 — Target company profile
+
+```
+| Metric | Value |
+|---|---|
+| Revenue | $4.96B |
+| Growth | +26% YoY |
+| Gross Margin | 45% |
+| Profitability | $373M Adj. EBITDA |
+| Customers | 134K |
+| Retention | 92% |
+| Market Share | ~15% |
+```
+
+Multi-segment companies add a breakdown:
+
+```
+| Segment | Revenue | Rev YoY | Rev % | EBITDA | EBITDA YoY | Margin |
+|---|---|---|---|---|---|---|
+| Seg A | $25.1B | +26% | 57% | $6.5B | +31% | 26% |
+| Seg B | $13.8B | +31% | 31% | $2.5B | +64% | 18% |
+| Seg C | $5.1B | -2% | 12% | -$74M | -16% | -1% |
+| Total | $44.0B | +18% | 100% | $6.5B* | - | 15% |
+```
+*Note corporate costs if applicable
+
+### Step 4 — Competitor mapping
+
+Group by whichever lens fits (this is a good `ask_user_question` decision if the user hasn't specified):
+- By business model — platform / vertical / horizontal
+- By segment — enterprise / SMB / consumer
+- By posture — direct / adjacent / emerging
+- By origin — incumbent / disruptor / new entrant
+
+### Step 5 — Positioning visualization
+
+| Type | When |
+|---|---|
+| 2×2 matrix | Two dominant competitive factors |
+| Radar/spider | Multi-factor comparison |
+| Tier diagram | Natural clustering into strategic groups |
+| Value chain map | Vertical industries |
+| Ecosystem map | Platform markets |
+
+See `references/frameworks.md` for 2×2 axis pairs by industry.
+
+### Step 6 — Competitor deep-dives
+
+Two tables per competitor.
+
+**Metrics:**
+```
+| Metric | Value |
+|---|---|
+| Revenue | $X.XB |
+| Growth | +XX% YoY |
+| Gross Margin | XX% |
+| Market Cap | $X.XB |
+| Profitability | $XXXM EBITDA |
+| Customers | XXK |
+| Retention | XX% |
+| Market Share | ~XX% |
+```
+
+**Qualitative:**
+```
+| Category | Assessment |
+|---|---|
+| Business | What they do (1 sentence) |
+| Strengths | 2-3 bullets |
+| Weaknesses | 2-3 bullets |
+| Strategy | Current priorities |
+```
+
+### Step 7 — Comparative analysis
+
+```
+| Dimension | Company A | Company B | Company C |
+|---|---|---|---|
+| Scale | ●●● $160B | ●●○ $45B | ●○○ $8B |
+| Growth | ●●○ +26% | ●●● +35% | ●●○ +22% |
+| Margins | ●●○ 7.5% | ●○○ 3.2% | ●●● 15% |
+```
+
+### Step 8 — Strategic context
+
+M&A transactions (multiples, rationale), partnership trends, capital raising patterns, regulatory developments. See `references/schemas.md` for the M&A transaction table format.
+
+### Step 9 — Synthesis
+
+**Moat assessment** — rate each competitor Strong / Moderate / Weak on:
+
+| Moat | What to assess |
+|---|---|
+| Network effects | User/supplier flywheel strength; cross-side vs same-side |
+| Switching costs | Technical integration depth, contractual lock-in, behavioral habits |
+| Scale economies | Unit cost advantages at volume; minimum efficient scale |
+| Intangible assets | Brand, proprietary data, regulatory licenses, patents |
+
+**Required synthesis elements:**
+- Durable advantages (hard to replicate) — map to moat categories
+- Structural vulnerabilities (hard to fix)
+- Current state vs. trajectory
+
+**For investment contexts** (skip if the Phase 1 scoping said no):
+
+```
+| Scenario | Probability | Key driver |
+|---|---|---|
+| Bull | 30% | Market share gains, margin expansion |
+| Base | 50% | Current trajectory continues |
+| Bear | 20% | Competitive pressure, margin compression |
+```
+
+---
+
+## Quality checklist
+
+Before finishing:
+
+**Prompt fidelity**
+- Slide titles match what the user specified, verbatim
+- Charts where they said chart; tables where they said table
+- Every competitor/year/data point they listed is present
+- Exact values and formats as specified
+
+**Data consistency**
+- Source-file values extracted directly, not recalculated
+- Same metric shows the same value on every slide it appears
+- Same decimal precision as the source
+
+**Layout**
+- Titles fit without overflow
+- No overlapping elements
+- All text within containers, no clipping
+
+**Content**
+- Every number has a citation
+- All metrics from the same fiscal period (or flagged)
+- Slide titles state insights, not topics
+- Charts are real chart objects
+
+Run standard visual verification checks on every slide — this catches overlaps, overflow, and low-contrast text that don't show up when you're reading back the XML.
+
+## Data sources (Rebyte)
+
+This deployment is wired to the Rebyte Financial Data Service (see the sibling `data` skill for auth and query mechanics).
+
+- **Competitor metric tables** (revenue, growth, margins, EBITDA) — `us.fundamentals` LTM aggregation via `financial/sql`, or `stocks/financials`; market cap via `stocks/details`. CN peers: `cn.daily_basic` + `cn.fina_indicator`.
+- **Competitor set discovery** — `stocks/related` + `stocks/search`; CN industry grouping via `cn-stocks/universe`.
+- **Recent developments / M&A narrative** — `financial/search` semantic search over `us.news`, plus `stocks/news` (sentiment + ticker-tagged). CN: `cn-stocks/news` (time-window; filter by keywords, articles are not ticker-tagged).
+- **Market share** — derivable as revenue share when the peer set approximates the market.
+- **Not available** (ask the user or use web research): market sizing / CAGR (industry reports), operating KPIs (customers, NRR, ARR), M&A precedent-transaction multiples, sell-side estimates, earnings-call transcripts.
diff --git a/competitive-analysis/references/frameworks.md b/competitive-analysis/references/frameworks.md
new file mode 100644
index 0000000..66b9f3d
--- /dev/null
+++ b/competitive-analysis/references/frameworks.md
@@ -0,0 +1,13 @@
+# Frameworks Reference
+
+## 2x2 Matrix: Common Axis Pairs by Industry
+
+*Technology/SaaS:* Product breadth × Customer segment, Integration depth × Geographic reach
+
+*Consumer/Retail:* Price point × Product range, Online × Offline presence
+
+*Financial Services:* Product complexity × Customer sophistication, Scale × Specialization
+
+*Healthcare:* Care setting × Payer mix, Technology enablement × Service breadth
+
+*Industrial:* Customization × Scale, Geographic scope × Vertical focus
diff --git a/competitive-analysis/references/schemas.md b/competitive-analysis/references/schemas.md
new file mode 100644
index 0000000..8449f14
--- /dev/null
+++ b/competitive-analysis/references/schemas.md
@@ -0,0 +1,33 @@
+# Schemas Reference
+
+Additional table formats not shown in main SKILL.md.
+
+## M&A Transaction Table
+
+| Acquirer | Target | Date | Deal Value | Multiple | Rationale |
+|----------|--------|------|------------|----------|-----------|
+| Company A | Company B | MMM YYYY | $X.XB | X.Xx EV/Rev | [Strategic logic] |
+
+State multiple methodology: "X.Xx EV/Revenue" or "X.Xx EV/EBITDA"
+
+## Scenario Analysis Table
+
+| Scenario | Probability | Valuation | Key Assumptions |
+|----------|-------------|-----------|-----------------|
+| Bull | XX% | $XXB | [Specific, quantified] |
+| Base | XX% | $XXB | [Specific, quantified] |
+| Bear | XX% | $XXB | [Specific, quantified] |
+
+## Slide Structure
+
+```
+┌─────────────────────────────────────────────────────────────┐
+│ [Insight headline, not topic] │
+├─────────────────────────────────────────────────────────────┤
+│ │
+│ [Main Content] │
+│ │
+├─────────────────────────────────────────────────────────────┤
+│ Source: [Citation] ([Date]) │
+└─────────────────────────────────────────────────────────────┘
+```
diff --git a/comps-analysis/SKILL.md b/comps-analysis/SKILL.md
new file mode 100644
index 0000000..3ff7dd6
--- /dev/null
+++ b/comps-analysis/SKILL.md
@@ -0,0 +1,673 @@
+---
+name: comps-analysis
+description: |
+ Build institutional-grade comparable company analyses with operating metrics, valuation multiples, and statistical benchmarking in Excel/spreadsheet format.
+
+ **Perfect for:**
+ - Public company valuation (M&A, investment analysis)
+ - Benchmarking performance vs. industry peers
+ - Pricing IPOs or funding rounds
+ - Identifying valuation outliers (over/under-valued)
+ - Supporting investment committee presentations
+ - Creating sector overview reports
+
+ **Not ideal for:**
+ - Private companies without comparable public peers
+ - Highly diversified conglomerates
+ - Distressed/bankrupt companies
+ - Pre-revenue startups
+ - Companies with unique business models
+---
+
+# Comparable Company Analysis
+
+## ⚠️ CRITICAL: Data Source Priority (READ FIRST)
+
+**ALWAYS follow this data source hierarchy:**
+
+1. **FIRST: Check for MCP data sources** - If S&P Kensho MCP, FactSet MCP, or Daloopa MCP are available, use them exclusively for financial and trading information
+2. **DO NOT use web search** if the above MCP data sources are available
+3. **ONLY if MCPs are unavailable:** Then use Bloomberg Terminal, SEC EDGAR filings, or other institutional sources
+4. **NEVER use web search as a primary data source** - it lacks the accuracy, audit trails, and reliability required for institutional-grade analysis
+
+**Why this matters:** MCP sources provide verified, institutional-grade data with proper citations. Web search results can be outdated, inaccurate, or unreliable for financial analysis.
+
+---
+
+## Overview
+This skill teaches Claude to build institutional-grade comparable company analyses that combine operating metrics, valuation multiples, and statistical benchmarking. The output is a structured Excel/spreadsheet that enables informed investment decisions through peer comparison.
+
+**Reference Material & Contextualization:**
+
+If example files are present in this skill directory (none are bundled in this deployment), use them intelligently:
+
+**DO use examples for:**
+- Understanding structural hierarchy (how sections flow)
+- Grasping the level of rigor expected (statistical depth, documentation standards)
+- Learning principles (clear headers, transparent formulas, audit trails)
+
+**DO NOT use examples for:**
+- Exact reproduction of format or metrics
+- Copying layout without considering context
+- Applying the same visual style regardless of audience
+
+**ALWAYS ask yourself first:**
+1. **"Do you have a preferred format or should I adapt the template style?"**
+2. **"Who is the audience?"** (Investment committee, board presentation, quick reference, detailed memo)
+3. **"What's the key question?"** (Valuation, growth analysis, competitive positioning, efficiency)
+4. **"What's the context?"** (M&A evaluation, investment decision, sector benchmarking, performance review)
+
+**Adapt based on specifics:**
+- **Industry context**: Big tech mega-caps need different metrics than emerging SaaS startups
+- **Sector-specific needs**: Add relevant metrics early (e.g., cloud ARR, enterprise customers, developer ecosystem for tech)
+- **Company familiarity**: Well-known companies may need less background, more focus on delta analysis
+- **Decision type**: M&A requires different emphasis than ongoing portfolio monitoring
+
+**Core principle:** Use template principles (clear structure, statistical rigor, transparent formulas) but vary execution based on context. The goal is institutional-quality analysis, not institutional-looking templates.
+
+User-provided examples and explicit preferences always take precedence over defaults.
+
+## Core Philosophy
+**"Build the right structure first, then let the data tell the story."**
+
+Start with headers that force strategic thinking about what matters, input clean data, build transparent formulas, and let statistics emerge automatically. A good comp should be immediately readable by someone who didn't build it.
+
+---
+
+## ⚠️ CRITICAL: Formulas Over Hardcodes + Step-by-Step Verification
+
+**Environment — Office JS vs Python:**
+- **If running inside Excel (Office Add-in / Office JS):** Use Office JS directly (`Excel.run(async (context) => {...})`). Write formulas via `range.formulas = [["=E7/C7"]]`, not `range.values`. No separate recalc step — Excel handles it natively. Use `range.format.*` for colors/fonts.
+- **If generating a standalone .xlsx file:** Use Python/openpyxl. Write `cell.value = "=E7/C7"` (formula string).
+- Same principles either way — just translate the API calls.
+- **Office JS merged cell pitfall:** Do NOT call `.merge()` then set `.values` on the merged range (throws `InvalidArgument` — range still reports its pre-merge dimensions). Instead write the value to the top-left cell alone, then merge + format the full range:
+ ```js
+ ws.getRange("A1").values = [["TECHNOLOGY — COMPARABLE COMPANY ANALYSIS"]];
+ const hdr = ws.getRange("A1:H1");
+ hdr.merge();
+ hdr.format.fill.color = "#1F4E79";
+ hdr.format.font.color = "#FFFFFF";
+ hdr.format.font.bold = true;
+ ```
+
+**Formulas, not hardcodes:**
+- Every derived value (margin, multiple, statistic) MUST be an Excel formula referencing input cells — never a pre-computed number pasted in
+- When using Python/openpyxl to build the sheet: write `cell.value = "=E7/C7"` (formula string), NOT `cell.value = 0.687` (computed result)
+- The only hardcoded values should be raw input data (revenue, EBITDA, share price, etc.) — and every one of those gets a cell comment with its source
+- Why: the model must update automatically when an input changes. A hardcoded margin is a silent bug waiting to happen.
+
+**Verify step-by-step with the user:**
+- After setting up the structure → show the user the header layout before filling data
+- After entering raw inputs → show the user the input block and confirm sources/periods before building formulas
+- After building operating metrics formulas → show the calculated margins and sanity-check with the user before moving to valuation
+- After building valuation multiples → show the multiples and confirm they look reasonable before adding statistics
+- Do NOT build the entire sheet end-to-end and then present it — catch errors early by confirming each section
+
+---
+
+## Section 1: Document Structure & Setup
+
+### Header Block (Rows 1-3)
+```
+Row 1: [ANALYSIS TITLE] - COMPARABLE COMPANY ANALYSIS
+Row 2: [List of Companies with Tickers] • [Company 1 (TICK1)] • [Company 2 (TICK2)] • [Company 3 (TICK3)]
+Row 3: As of [Period] | All figures in [USD Millions/Billions] except per-share amounts and ratios
+```
+
+**Why this matters:** Establishes context immediately. Anyone opening this file knows what they're looking at, when it was created, and how to interpret the numbers.
+
+### Visual Convention Standards (OPTIONAL - User preferences and uploaded templates always override)
+
+**IMPORTANT: These are suggested defaults only. Always prioritize:**
+1. User's explicit formatting preferences
+2. Formatting from any uploaded template files
+3. Company/team style guides
+4. These defaults (only if no other guidance provided)
+
+**Suggested Font & Typography:**
+- **Font family**: Times New Roman (professional, readable, industry standard)
+- **Font size**: 11pt for data cells, 12pt for headers
+- **Bold text**: Section headers, company names, statistic labels
+
+**Default Color & Shading — Professional Blue/Grey Palette (minimal is better):**
+- **Keep it restrained** — only blues and greys. Do NOT introduce greens, oranges, reds, or multiple accent colors. A clean comps sheet uses 3-4 colors total.
+- **Section headers** (e.g., "OPERATING STATISTICS & FINANCIAL METRICS"):
+ - Dark blue background (`#1F4E79` or `#17365D` navy)
+ - White bold text
+ - Full row shading across all columns
+- **Column headers** (e.g., "Company", "Revenue", "Margin"):
+ - Light blue background (`#D9E1F2` or similar pale blue)
+ - Black bold text
+ - Centered alignment
+- **Data rows**:
+ - White background for company data
+ - Black text for formulas; blue text for hardcoded inputs
+- **Statistics rows** (Maximum, 75th Percentile, etc.):
+ - Light grey background (`#F2F2F2`)
+ - Black text, left-aligned labels
+- **That's the whole palette**: dark blue + light blue + light grey + white. Nothing else unless the user's template says otherwise.
+
+**Suggested Formatting Conventions:**
+- **Decimal precision**:
+ - Percentages: 1 decimal (12.3%)
+ - Multiples: 1 decimal (13.5x)
+ - Dollar amounts: No decimals, thousands separator (69,632)
+ - Margins shown as percentages: 1 decimal (68.7%)
+- **Borders**: No borders (clean, minimal appearance)
+- **Alignment**: All metrics center-aligned for clean, uniform appearance
+- **Cell dimensions**: All column widths should be uniform/even, all row heights should be consistent (creates clean, professional grid)
+
+**Note:** If the user provides a template file or specifies different formatting, use that instead.
+
+---
+
+## Section 2: Operating Statistics & Financial Metrics
+
+### Core Columns (Start with these)
+1. **Company** - Names with consistent formatting
+2. **Revenue** - Size metric (can be LTM, quarterly, or annual depending on context)
+3. **Revenue Growth** - Year-over-year percentage change
+4. **Gross Profit** - Revenue minus cost of goods sold
+5. **Gross Margin** - GP/Revenue (fundamental profitability)
+6. **EBITDA** - Earnings before interest, tax, depreciation, amortization
+7. **EBITDA Margin** - EBITDA/Revenue (operating efficiency)
+
+### Optional Additions (Choose based on industry/purpose)
+- **Quarterly vs LTM** - Include both if seasonality matters
+- **Free Cash Flow** - For capital-intensive or SaaS businesses
+- **FCF Margin** - FCF/Revenue (cash generation efficiency)
+- **Net Income** - For mature, profitable companies
+- **Operating Income** - For businesses with varying D&A
+- **CapEx metrics** - For asset-heavy industries
+- **Rule of 40** - Specifically for SaaS (Growth % + Margin %)
+- **FCF Conversion** - For quality of earnings analysis (advanced)
+
+### Formula Examples (Using Row 7 as example)
+```excel
+// Core ratios - these are always calculated
+Gross Margin (F7): =E7/C7
+EBITDA Margin (H7): =G7/C7
+
+// Optional ratios - include if relevant
+FCF Margin: =[FCF]/[Revenue]
+Net Margin: =[Net Income]/[Revenue]
+Rule of 40: =[Growth %]+[FCF Margin %]
+```
+
+**Golden Rule:** Every ratio should be [Something] / [Revenue] or [Something] / [Something from this sheet]. Keep it simple.
+
+### Statistics Block (After company data)
+
+**CRITICAL: Add statistics formulas for all comparable metrics (ratios, margins, growth rates, multiples).**
+
+```
+[Leave one blank row for visual separation]
+- Maximum: =MAX(B7:B9)
+- 75th Percentile: =QUARTILE(B7:B9,3)
+- Median: =MEDIAN(B7:B9)
+- 25th Percentile: =QUARTILE(B7:B9,1)
+- Minimum: =MIN(B7:B9)
+```
+
+**Columns that NEED statistics (comparable metrics):**
+- Revenue Growth %, Gross Margin %, EBITDA Margin %, EPS
+- EV/Revenue, EV/EBITDA, P/E, Dividend Yield %, Beta
+
+**Columns that DON'T need statistics (size metrics):**
+- Revenue, EBITDA, Net Income (absolute size varies by company scale)
+- Market Cap, Enterprise Value (not comparable across different-sized companies)
+
+**Note:** Add one blank row between company data and statistics rows for visual separation. Do NOT add a "SECTOR STATISTICS" or "VALUATION STATISTICS" header row.
+
+**Why quartiles matter:** They show distribution, not just average. A 75th percentile multiple tells you what "premium" companies trade at.
+
+---
+
+## Section 3: Valuation Multiples & Investment Metrics
+
+### Core Valuation Columns (Start with these)
+1. **Company** - Same order as operating section
+2. **Market Cap** - Current market valuation
+3. **Enterprise Value** - Market Cap ± Net Debt/Cash
+4. **EV/Revenue** - How much market pays per dollar of sales
+5. **EV/EBITDA** - How much market pays per dollar of earnings
+6. **P/E Ratio** - Price relative to net earnings
+
+### Optional Valuation Metrics (Choose based on context)
+- **FCF Yield** - FCF/Market Cap (for cash-focused analysis)
+- **PEG Ratio** - P/E/Growth Rate (for growth companies)
+- **Price/Book** - Market value vs. book value (for asset-heavy businesses)
+- **ROE/ROA** - Return metrics (for profitability comparison)
+- **Revenue/EBITDA CAGR** - Historical growth rates (for trend analysis)
+- **Asset Turnover** - Revenue/Assets (for operational efficiency)
+- **Debt/Equity** - Leverage (for capital structure analysis)
+
+**Key Principle:** Include 3-5 core multiples that matter for your industry. Don't include every possible metric just because you can.
+
+### Formula Examples
+```excel
+// Core multiples - always include these
+EV/Revenue: =[Enterprise Value]/[LTM Revenue]
+EV/EBITDA: =[Enterprise Value]/[LTM EBITDA]
+P/E Ratio: =[Market Cap]/[Net Income]
+
+// Optional multiples - include if data available
+FCF Yield: =[LTM FCF]/[Market Cap]
+PEG Ratio: =[P/E]/[Growth Rate %]
+```
+
+### Cross-Reference Rule
+**CRITICAL:** Valuation multiples MUST reference the operating metrics section. Never input the same raw data twice. If revenue is in C7, then EV/Revenue formula should reference C7.
+
+### Statistics Block
+Same structure as operating section: Max, 75th, Median, 25th, Min for every metric. Add one blank row for visual separation between company data and statistics. Do NOT add a "VALUATION STATISTICS" header row.
+
+---
+
+## Section 4: Notes & Methodology Documentation
+
+### Required Components
+
+**Data Sources & Quality:**
+- Where did the data come from? (S&P Kensho MCP, FactSet MCP, Daloopa MCP, Bloomberg, SEC filings)
+- What period does it cover? (Q4 2024, audited figures)
+- How was it verified? (Cross-checked against 10-K/10-Q)
+- Note: Prioritize MCP data sources (S&P Kensho, FactSet, Daloopa) if available for better accuracy and traceability
+
+**Key Definitions:**
+- EBITDA calculation method (Gross Profit + D&A, or Operating Income + D&A)
+- Free Cash Flow formula (Operating CF - CapEx)
+- Special metrics explained (Rule of 40, FCF Conversion)
+- Time period definitions (LTM, CAGR calculation periods)
+
+**Valuation Methodology:**
+- How was Enterprise Value calculated? (Market Cap + Net Debt)
+- What growth rates were used? (Historical CAGR, forward estimates)
+- Any adjustments made? (One-time items excluded, normalized margins)
+
+**Analysis Framework:**
+- What's the investment thesis? (Cloud/SaaS efficiency)
+- What metrics matter most? (Cash generation, capital efficiency)
+- How should readers interpret the statistics? (Quartiles provide context)
+
+---
+
+## Section 5: Choosing the Right Metrics (Decision Framework)
+
+### Start with "What question am I answering?"
+
+**"Which company is undervalued?"**
+→ Focus on: EV/Revenue, EV/EBITDA, P/E, Market Cap
+→ Skip: Operational details, growth metrics
+
+**"Which company is most efficient?"**
+→ Focus on: Gross Margin, EBITDA Margin, FCF Margin, Asset Turnover
+→ Skip: Size metrics, absolute dollar amounts
+
+**"Which company is growing fastest?"**
+→ Focus on: Revenue Growth %, EBITDA CAGR, User/Customer Growth
+→ Skip: Margin metrics, leverage ratios
+
+**"Which is the best cash generator?"**
+→ Focus on: FCF, FCF Margin, FCF Conversion, CapEx intensity
+→ Skip: EBITDA, P/E ratios
+
+### Industry-Specific Metric Selection
+
+**Software/SaaS:**
+Must have: Revenue Growth, Gross Margin, Rule of 40
+Optional: ARR, Net Dollar Retention, CAC Payback
+Skip: Asset Turnover, Inventory metrics
+
+**Manufacturing/Industrials:**
+Must have: EBITDA Margin, Asset Turnover, CapEx/Revenue
+Optional: ROA, Inventory Turns, Backlog
+Skip: Rule of 40, SaaS metrics
+
+**Financial Services:**
+Must have: ROE, ROA, Efficiency Ratio, P/E
+Optional: Net Interest Margin, Loan Loss Reserves
+Skip: Gross Margin, EBITDA (not meaningful for banks)
+
+**Retail/E-commerce:**
+Must have: Revenue Growth, Gross Margin, Inventory Turnover
+Optional: Same-Store Sales, Customer Acquisition Cost
+Skip: Heavy R&D or CapEx metrics
+
+### The "5-10 Rule"
+
+**5 operating metrics** - Revenue, Growth, 2-3 margins/efficiency metrics
+**5 valuation metrics** - Market Cap, EV, 3 multiples
+**= 10 total columns** - Enough to tell the story, not so many you lose the thread
+
+If you have more than 15 metrics, you're probably including noise. Edit ruthlessly.
+
+---
+
+## Section 6: Best Practices & Quality Checks
+
+### Before You Start
+1. **Define the peer group** - Companies must be truly comparable (similar business model, scale, geography)
+2. **Choose the right period** - LTM smooths seasonality; quarterly shows trends
+3. **Standardize units upfront** - Millions vs. billions decision affects everything
+4. **Map data sources** - Know where each number comes from
+
+### As You Build
+1. **Input all raw data first** - Complete the blue text before writing formulas
+2. **Add cell comments to ALL hard-coded inputs** - Right-click cell → Insert Comment → Document source OR assumption
+
+ **For sourced data, cite exactly where it came from:**
+ - Example: "Bloomberg Terminal - MSFT Equity DES, accessed 2024-10-02"
+ - Example: "Q4 2024 10-K filing, page 42, line item 'Total Revenue'"
+ - Example: "FactSet consensus estimate as of 2024-10-02"
+ - **Include hyperlinks when possible**: Right-click cell → Link → paste URL to SEC filing, data source, or report
+
+ **For assumptions, explain the reasoning:**
+ - Example: "Assumed 15% EBITDA margin based on peer median, company does not disclose"
+ - Example: "Estimated Enterprise Value as Market Cap + $50M net debt (from Q3 balance sheet, Q4 not yet available)"
+ - Example: "Forward P/E based on street consensus EPS of $3.45 (average of 12 analyst estimates)"
+
+ **Why this matters**: Enables audit trails, data verification, assumption transparency, and future updates
+3. **Build formulas row by row** - Test each calculation before moving on
+4. **Use absolute references for headers** - $C$6 locks the header row
+5. **Format consistently** - Percentages as percentages, not decimals
+6. **Add conditional formatting** - Highlight outliers automatically
+
+### Sanity Checks
+- **Margin test**: Gross margin > EBITDA margin > Net margin (always true by definition)
+- **Multiple reasonableness**:
+ - EV/Revenue: typically 0.5-20x (varies widely by industry)
+ - EV/EBITDA: typically 8-25x (fairly consistent across industries)
+ - P/E: typically 10-50x (depends on growth rate)
+- **Growth-multiple correlation**: Higher growth usually means higher multiples
+- **Size-efficiency trade-off**: Larger companies often have better margins (scale benefits)
+
+### Common Mistakes to Avoid
+❌ Mixing market cap and enterprise value in formulas
+❌ Using different time periods for numerator and denominator (LTM vs quarterly)
+❌ Hardcoding numbers into formulas instead of cell references
+❌ **Hard-coded inputs without cell comments citing the source OR explaining the assumption**
+❌ Missing hyperlinks to SEC filings or data sources when available
+❌ Including too many metrics without clear purpose
+❌ Including non-comparable companies (different business models)
+❌ Using outdated data without disclosure
+❌ Calculating averages of percentages incorrectly (should be median)
+
+---
+
+## Section 6: Advanced Features
+
+### Dynamic Headers
+For columns showing calculations, use clear unit labels:
+```
+Revenue Growth (YoY) % | EBITDA Margin | FCF Margin | Rule of 40
+```
+
+### Quartile Analysis Benefits
+Instead of just mean/median, quartiles show:
+- **75th percentile** = "Premium" companies trade here
+- **Median** = Typical market valuation
+- **25th percentile** = "Discount" territory
+
+This helps answer: "Is our target company trading rich or cheap vs. peers?"
+
+### Industry-Specific Modifications
+
+**Software/SaaS:**
+- Add: ARR, Net Dollar Retention, CAC Payback Period
+- Emphasize: Rule of 40, FCF margins, gross margins >70%
+
+**Healthcare:**
+- Add: R&D/Revenue, Pipeline value, Regulatory status
+- Emphasize: EBITDA margins, growth rates, reimbursement risk
+
+**Industrials:**
+- Add: Backlog, Order book trends, Geographic mix
+- Emphasize: ROIC, asset turnover, cyclical adjustments
+
+**Consumer:**
+- Add: Same-store sales, Customer acquisition cost, Brand value
+- Emphasize: Revenue growth, gross margins, inventory turns
+
+---
+
+## Section 7: Workflow & Practical Tips
+
+### Step-by-Step Process
+1. **Set up structure** (30 minutes)
+ - Create all headers
+ - Format cells (blue for inputs, black for formulas)
+ - Lock in units and date references
+
+2. **Gather data** (60-90 minutes)
+ - Pull from primary sources (S&P Kensho MCP, FactSet MCP, Daloopa MCP if available; otherwise Bloomberg, SEC)
+ - Input all raw numbers in blue
+ - Document sources in notes section
+
+3. **Build formulas** (30 minutes)
+ - Start with simple ratios (margins)
+ - Progress to multiples (EV/Revenue)
+ - Add cross-checks (do margins make sense?)
+
+4. **Add statistics** (15 minutes)
+ - Copy formula structure for all columns
+ - Verify ranges are correct (B7:B9, not B7:B10)
+ - Check quartile logic
+
+5. **Quality control** (30 minutes)
+ - Run sanity checks
+ - Verify formula references
+ - Check for #DIV/0! or #REF! errors
+ - Compare against known benchmarks
+
+6. **Documentation** (15 minutes)
+ - Complete notes section
+ - Add data sources
+ - Define methodologies
+ - Date-stamp the analysis
+
+### Pro Tips
+- **Save templates**: Build once, reuse forever
+- **Color-code outliers**: Conditional formatting for values >2 standard deviations
+- **Link to source files**: Hyperlink to Bloomberg screenshots or SEC filings
+- **Version control**: Save as "Comps_v1_2024-12-15" with clear dating
+- **Collaborative reviews**: Have someone else check your formulas
+
+### Excel Formatting Checklist (Optional - adapt to user preferences)
+- [ ] Font set to user's preferred style (default: Times New Roman, 11pt data, 12pt headers)
+- [ ] Section headers formatted per user's template (default: dark blue #17365D with white bold text)
+- [ ] Column headers formatted per user's template (default: light blue/gray #D9E2F3 with black bold text)
+- [ ] Statistics rows formatted per user's template (default: light gray #F2F2F2)
+- [ ] No borders applied (clean, minimal appearance)
+- [ ] **Column widths set to uniform/even width** (creates clean, professional appearance)
+- [ ] **Row heights set to consistent height** (typically 20-25pt for data rows)
+- [ ] Numbers formatted with proper decimal precision and thousands separators
+- [ ] **All metrics center-aligned** for clean, uniform appearance
+- [ ] **One blank row for separation between company data and statistics rows**
+- [ ] **No separate "SECTOR STATISTICS" or "VALUATION STATISTICS" header rows**
+- [ ] **Every hard-coded input cell has a comment with either: (1) exact data source, OR (2) assumption explanation**
+- [ ] **Hyperlinks added to cells where applicable** (SEC filings, data provider pages, reports)
+
+---
+
+## Section 8: Example Template Layout
+
+**Simple Version (Start here):**
+```
+┌─────────────────────────────────────────────────────────────┐
+│ TECHNOLOGY - COMPARABLE COMPANY ANALYSIS │
+│ Microsoft • Alphabet • Amazon │
+│ As of Q4 2024 | All figures in USD Millions │
+├─────────────────────────────────────────────────────────────┤
+│ OPERATING METRICS │
+├──────────┬─────────┬─────────┬──────────┬──────────────────┤
+│ Company │ Revenue │ Growth │ Gross │ EBITDA │ EBITDA │
+│ │ (LTM) │ (YoY) │ Margin │ (LTM) │ Margin │
+├──────────┼─────────┼─────────┼──────────┼─────────┼────────┤
+│ MSFT │ 261,400 │ 12.3% │ 68.7% │ 205,100 │ 78.4% │
+│ GOOGL │ 349,800 │ 11.8% │ 57.9% │ 239,300 │ 68.4% │
+│ AMZN │ 638,100 │ 10.5% │ 47.3% │ 152,600 │ 23.9% │
+│ │ │ │ │ │ │ [blank row]
+│ Median │ =MEDIAN │ =MEDIAN │ =MEDIAN │ =MEDIAN │=MEDIAN │
+│ 75th % │ =QUART │ =QUART │ =QUART │ =QUART │=QUART │
+│ 25th % │ =QUART │ =QUART │ =QUART │ =QUART │=QUART │
+├─────────────────────────────────────────────────────────────┤
+│ VALUATION MULTIPLES │
+├──────────┬──────────┬──────────┬──────────┬────────────────┤
+│ Company │ Mkt Cap │ EV │ EV/Rev │ EV/EBITDA │ P/E│
+├──────────┼──────────┼──────────┼──────────┼───────────┼────┤
+│ MSFT │3,550,000 │3,530,000 │ 13.5x │ 17.2x │36.0│
+│ GOOGL │2,030,000 │1,960,000 │ 5.6x │ 8.2x │24.5│
+│ AMZN │2,226,000 │2,320,000 │ 3.6x │ 15.2x │58.3│
+│ │ │ │ │ │ │ [blank row]
+│ Median │ =MEDIAN │ =MEDIAN │ =MEDIAN │ =MEDIAN │=MED│
+│ 75th % │ =QUART │ =QUART │ =QUART │ =QUART │=QRT│
+│ 25th % │ =QUART │ =QUART │ =QUART │ =QUART │=QRT│
+└──────────┴──────────┴──────────┴──────────┴───────────┴────┘
+```
+
+**Add complexity only when needed:**
+- Include quarterly AND LTM if seasonality matters
+- Add FCF metrics if cash generation is key story
+- Include industry-specific metrics (Rule of 40 for SaaS, etc.)
+- Add more statistics rows if you have >5 companies
+
+---
+
+## Section 9: Industry-Specific Additions (Optional)
+
+Only add these if they're critical to your analysis. Most comps work fine with just core metrics.
+
+**Software/SaaS:**
+Add if relevant: ARR, Net Dollar Retention, Rule of 40
+
+**Financial Services:**
+Add if relevant: ROE, Net Interest Margin, Efficiency Ratio
+
+**E-commerce:**
+Add if relevant: GMV, Take Rate, Active Buyers
+
+**Healthcare:**
+Add if relevant: R&D/Revenue, Pipeline Value, Patent Timeline
+
+**Manufacturing:**
+Add if relevant: Asset Turnover, Inventory Turns, Backlog
+
+---
+
+## Section 10: Red Flags & Warning Signs
+
+### Data Quality Issues
+🚩 Inconsistent time periods (mixing quarterly and annual)
+🚩 Missing data without explanation
+🚩 Significant differences between data sources (>10% variance)
+
+### Valuation Red Flags
+🚩 Negative EBITDA companies being valued on EBITDA multiples (use revenue multiples instead)
+🚩 P/E ratios >100x without hypergrowth story
+🚩 Margins that don't make sense for the industry
+
+### Comparability Issues
+🚩 Different fiscal year ends (causes timing problems)
+🚩ixing pure-play and conglomerates
+🚩 Materially different business models labeled as "comps"
+
+**When in doubt, exclude the company.** Better to have 3 perfect comps than 6 questionable ones.
+
+---
+
+## Section 11: Formulas Reference Guide
+
+### Essential Excel Formulas
+```excel
+// Statistical Functions
+=AVERAGE(range) // Simple mean
+=MEDIAN(range) // Middle value
+=QUARTILE(range, 1) // 25th percentile
+=QUARTILE(range, 3) // 75th percentile
+=MAX(range) // Maximum value
+=MIN(range) // Minimum value
+=STDEV.P(range) // Standard deviation
+
+// Financial Calculations
+=B7/C7 // Simple ratio (Margin)
+=SUM(B7:B9)/3 // Average of multiple companies
+=IF(B7>0, C7/B7, "N/A") // Conditional calculation
+=IFERROR(C7/D7, 0) // Handle divide by zero
+
+// Cross-Sheet References
+='Sheet1'!B7 // Reference another sheet
+=VLOOKUP(A7, Table1, 2) // Lookup from data table
+=INDEX(MATCH()) // Advanced lookup
+
+// Formatting
+=TEXT(B7, "0.0%") // Format as percentage
+=TEXT(C7, "#,##0") // Thousands separator
+```
+
+### Common Ratio Formulas
+```excel
+Gross Margin = Gross Profit / Revenue
+EBITDA Margin = EBITDA / Revenue
+FCF Margin = Free Cash Flow / Revenue
+FCF Conversion = FCF / Operating Cash Flow
+ROE = Net Income / Shareholders' Equity
+ROA = Net Income / Total Assets
+Asset Turnover = Revenue / Total Assets
+Debt/Equity = Total Debt / Shareholders' Equity
+```
+
+---
+
+## Key Principles Summary
+
+1. **Structure drives insight** - Right headers force right thinking
+2. **Less is more** - 5-10 metrics that matter beat 20 that don't
+3. **Choose metrics for your question** - Valuation analysis ≠ efficiency analysis
+4. **Statistics show patterns** - Median/quartiles reveal more than average
+5. **Transparency beats complexity** - Simple formulas everyone understands
+6. **Comparability is king** - Better to exclude than force a bad comp
+7. **Document your choices** - Explain which metrics and why in notes section
+
+---
+
+## Output Checklist
+
+Before delivering a comp analysis, verify:
+- [ ] All companies are truly comparable
+- [ ] Data is from consistent time periods
+- [ ] Units are clearly labeled (millions/billions)
+- [ ] Formulas reference cells, not hardcoded values
+- [ ] **All hard-coded input cells have comments with either: (1) exact data source with citation, OR (2) clear assumption with explanation**
+- [ ] **Hyperlinks added where relevant** (SEC EDGAR filings, Bloomberg pages, research reports)
+- [ ] Statistics include at least 5 metrics (Max, 75th, Med, 25th, Min)
+- [ ] Notes section documents sources and methodology
+- [ ] Visual formatting follows conventions (blue = input, black = formula)
+- [ ] Sanity checks pass (margins logical, multiples reasonable)
+- [ ] Date stamp is current ("As of [Date]")
+- [ ] Formula auditing shows no errors (#DIV/0!, #REF!, #N/A)
+
+---
+
+## Continuous Improvement
+
+After completing a comp analysis, ask:
+1. Did the statistics reveal unexpected insights?
+2. Were there any data gaps that limited analysis?
+3. Did stakeholders ask for metrics you didn't include?
+4. How long did it take vs. how long should it take?
+5. What would make this more useful next time?
+
+The best comp analyses evolve with each iteration. Save templates, learn from feedback, and refine the structure based on what decision-makers actually use.
+
+## Data sources (Rebyte)
+
+This deployment is wired to the Rebyte Financial Data Service (see the sibling `data` skill for auth and query mechanics) instead of S&P/FactSet MCP servers.
+
+- **Peer group selection** — US: `stocks/related` + `stocks/search` (live proxy); CN: `cn-stocks/universe` (industry column).
+- **Income/margin block** (revenue, gross profit, EBITDA, net income, growth) — `us.fundamentals` via `financial/sql` (sum trailing 4 quarterly rows for LTM), or `stocks/financials` for the freshest quarter. CN: `cn.income` + `cn.fina_indicator`.
+- **FCF** — OCF and CapEx columns in `us.fundamentals` (cashflow section).
+- **Market cap / shares / price** — `stocks/details` + `stocks/bars`, or `us.eod`. CN: `cn.daily_basic` gives PE/PB/mktcap directly.
+- **Net debt for EV** — debt + cash columns in `us.fundamentals` balance-sheet section.
+- **Dividend yield** — `stocks/dividends`. **Beta** — regress `us.eod` returns vs SPY (SPY is queryable through `stocks/bars`).
+- **Not available** (ask the user or omit): forward/consensus estimates (forward P/E, NTM multiples).
diff --git a/datapack-builder/SKILL.md b/datapack-builder/SKILL.md
new file mode 100644
index 0000000..6d4e83d
--- /dev/null
+++ b/datapack-builder/SKILL.md
@@ -0,0 +1,665 @@
+---
+name: datapack-builder
+description: Build professional financial services data packs from various sources including CIMs, offering memorandums, SEC filings, web search, or MCP servers. Extract, normalize, and standardize financial data into investment committee-ready Excel workbooks with consistent structure, proper formatting, and documented assumptions. Use for M&A due diligence, private equity analysis, investment committee materials, and standardizing financial reporting across portfolio companies. Do not use for simple financial calculations or working with already-completed data packs.
+---
+
+# Financial Data Pack Builder
+
+Build professional, standardized financial data packs for private equity, investment banking, and asset management. Transform financial data from CIMs, offering memorandums, SEC filings, web search, or MCP server access into polished Excel workbooks ready for investment committee review.
+
+**Important:** Use the xlsx skill for all Excel file creation and manipulation throughout this workflow.
+
+## CRITICAL SUCCESS FACTORS
+
+Every data pack must achieve these standards. Failure on any point makes the deliverable unusable.
+
+### 1. Data Accuracy (Zero Tolerance for Errors)
+- Trace every number to source document with page reference
+- Use formula-based calculations exclusively (no hardcoded values)
+- Cross-check subtotals and totals for internal consistency
+- Verify balance sheet balances: Assets = Liabilities + Equity
+- Confirm cash flow ties to balance sheet changes
+
+### 2. ESSENTIAL RULES
+
+**RULE 1: Financial data (measuring money) → Currency format with $**
+Triggers: Revenue, Sales, Income, EBITDA, Profit, Loss, Cost, Expense, Cash, Debt, Assets, Liabilities, Equity, Capex
+Format: $#,##0.0 for millions, $#,##0 for thousands
+Negatives: $(123.0) NOT -$123
+
+**RULE 2: Operational data (counting things) → Number format, NO $**
+Triggers: Units, Stores, Locations, Employees, Customers, Square Feet, Properties, Headcount
+Format: #,##0 with commas
+Negatives: (123) consistent with rest of table
+
+**RULE 3: Percentages (rates and ratios) → Percentage format**
+Triggers: Margin, Growth, Rate, Percentage, Yield, Return, Utilization, Occupancy
+Format: 0.0% for one decimal place
+Display: 15.0% NOT 0.15
+
+**RULE 4: Years → Text format to prevent comma insertion**
+Format: Text or custom to prevent 2,024
+Display: 2020, 2021, 2022, 2023A, 2024E
+
+**RULE 5: When context is mixed, each metric gets its own appropriate format**
+Example:
+```
+Segment Analysis, 2022, 2023, 2024
+Retail Revenue, $50.0, $55.0, $60.0
+ Stores, 100, 110, 120
+ Revenue per Store, $0.5, $0.5, $0.5
+```
+Revenue and per-store metrics use $, Store count uses number format.
+
+**RULE 6: Use formulas for all calculations → Never hardcode calculated values**
+All subtotals, totals, ratios, and derived metrics must be formula-based, not hardcoded values. This ensures accuracy and allows for dynamic updates.
+
+### 3. Professional Presentation Standards
+
+**Formatting Standards:**
+
+**Color Scheme - Two Layers:**
+
+**Layer 1: Font Colors (MANDATORY from xlsx skill)**
+- **Blue text (RGB: 0,0,255)**: ALL hardcoded inputs (historical data, assumptions), NOT normal text
+- **Black text (RGB: 0,0,0)**: ALL formulas and calculations
+- **Green text (RGB: 0,128,0)**: Links to other sheets
+
+**Layer 2: Fill Colors (Optional for enhanced presentation)**
+- Fill colors are optional and should only be applied if requested by the user or if enhancing presentation
+- If the user requests colors or professional formatting, use this standard scheme:
+ - **Section headers**: Dark blue (RGB: 68,114,196) background with white text
+ - **Sub-headers/column headers**: Light blue (RGB: 217,225,242) background with black text
+ - **Input cells**: Light green/cream (RGB: 226,239,218) background with blue text
+ - **Calculated cells**: White background with black text
+- Users can override with custom brand colors if specified
+
+**How the layers work together (if fill colors are used):**
+- Input cell: Blue text + light green fill = "User-entered data"
+- Formula cell: Black text + white background = "Calculated value"
+- Sheet link: Green text + white background = "Reference from another tab"
+
+**Font color tells you WHAT it is. Fill color tells you WHERE it is (if used).**
+
+**IMPORTANT:** Font colors from xlsx skill are mandatory. Fill colors are optional - default is white/no fill unless the user requests enhanced formatting or colors.
+
+**Always apply:**
+- Bold headers, left-aligned
+- Numbers right-aligned
+- 2-space indentation for sub-items
+- Single underline above subtotals
+- Double underline below final totals
+- Freeze panes on row/column headers
+- Minimal borders (only where structurally needed)
+- Consistent font (typically Calibri or Arial 11pt)
+
+**Never include:**
+- Borders around every cell
+- Multiple fonts or font sizes
+- Charts unless specifically requested
+- Excessive formatting or decoration
+
+## Structural Consistency
+Use the standard 8-tab structure unless explicitly instructed otherwise:
+1. Executive Summary
+2. Historical Financials (Income Statement)
+3. Balance Sheet
+4. Cash Flow Statement
+5. Operating Metrics
+6. Property/Segment Performance (if applicable)
+7. Market Analysis
+8. Investment Highlights
+
+### Tab 1: Executive Summary
+Purpose: One-page overview for busy executives
+
+Contents:
+- Company overview (2-3 sentences on business model)
+- Key investment highlights (3-5 bullet points)
+- Financial snapshot table (Revenue, EBITDA, Growth for last 3 years + projections)
+- Transaction overview if applicable
+- Key metrics prominently displayed
+
+Format: Clean, bold headers, minimal decoration, critical numbers emphasized
+
+### Tab 2: Historical Financials (Income Statement)
+Purpose: Complete profit and loss history
+
+Contents:
+- Revenue breakdown by segment/product line
+- Cost of goods sold / Cost of revenue
+- Gross profit and gross margin %
+- Operating expenses detailed (S&M, R&D, G&A)
+- EBITDA and Adjusted EBITDA
+- Below-the-line items (D&A, interest, taxes)
+- Net income
+
+Format:
+- Years as columns (text format: 2020, 2021, 2022)
+- $ millions or $ thousands (specify units clearly at top)
+- Accounting format for all financial data
+- Single underline above subtotals, double underline below net income
+- Right-align all numbers
+
+### Tab 3: Balance Sheet
+Purpose: Financial position at period end
+
+Contents:
+- Current assets (cash, AR, inventory, prepaid, other)
+- Long-term assets (PP&E, intangibles, goodwill, other)
+- Current liabilities (AP, accrued expenses, current portion of debt, other)
+- Long-term liabilities (long-term debt, deferred taxes, other)
+- Shareholders' equity (common stock, retained earnings, other)
+
+Format:
+- Verify formula: Assets = Liabilities + Equity
+- Consistent date labeling
+- Include working capital calculation
+- Single underline above major subtotals, double underline for final totals
+
+### Tab 4: Cash Flow Statement
+Purpose: Cash generation and use analysis
+
+Contents:
+- Operating cash flow (indirect method preferred)
+- Investing cash flow (capex, acquisitions, asset sales)
+- Financing cash flow (debt issuance/repayment, equity, dividends)
+- Net change in cash
+- Beginning and ending cash balances
+
+Format:
+- Link to income statement and balance sheet where possible
+- Show reconciliation of net income to operating cash flow
+- Clear labeling of cash uses (outflows) vs sources (inflows)
+
+### Tab 5: Operating Metrics
+Purpose: Non-financial KPIs and operational data
+
+Contents (industry-dependent):
+- Unit volumes, customer counts, locations
+- Productivity metrics (revenue per employee, per store, per unit)
+- Capacity utilization
+- Market share
+- Customer retention/churn rates
+- Industry-specific KPIs
+
+**CRITICAL FORMAT NOTE:**
+NO dollar signs on operational metrics. These are quantities, not currency.
+
+Format:
+- Clear units specified (customers, employees, stores, square feet, etc.)
+- Whole numbers with commas: 1,250 NOT $1,250
+- Percentages for rates: 95.0%
+- Right-align numbers
+
+### Tab 6: Property/Segment Performance (if applicable)
+Purpose: Detailed breakdown by business unit, property, or segment
+
+Contents:
+- Revenue and profitability by segment
+- Key metrics by location/product
+- Segment-specific KPIs
+- Comparative performance analysis
+
+Format: Consistent with financial tabs for revenue/EBITDA, number format for operational metrics
+
+### Tab 7: Market Analysis
+Purpose: Industry context and competitive positioning
+
+Contents:
+- Market size and growth trends
+- Competitive landscape overview
+- Market share analysis
+- Industry benchmarks and peer comparisons
+- Regulatory environment if relevant
+
+Format: Mix of narrative text and tables, cite sources for market data
+
+### Tab 8: Investment Highlights
+Purpose: Narrative summary of key investment thesis points
+
+Contents:
+- Detailed writeup of competitive strengths
+- Growth opportunities and strategic initiatives
+- Risk factors and mitigation strategies
+- Management assessment and track record
+- Investment thesis summary
+
+Format: Clear headers, bullet points, concise paragraphs
+
+## STEP-BY-STEP WORKFLOW
+
+### Phase 1: Document Processing and Data Extraction
+
+**Step 1.1: Analyze source data**
+- Access source materials: uploaded documents, web search for public filings, or MCP server data
+- Review data structure and identify key sections
+- Locate financial statements (typically 3-5 years historical)
+- Identify management projections if included
+- Note fiscal year end date
+- Flag any data quality issues immediately
+
+**Step 1.2: Extract financial statements**
+- Locate historical income statement data
+- Extract balance sheet snapshots (year-end or quarter-end)
+- Find cash flow statement
+- Extract management projections if available
+- Note all page references for traceability
+
+**Step 1.3: Extract operating metrics**
+- Identify non-financial KPIs relevant to industry
+- Capture unit economics data
+- Extract customer/location/capacity data
+- Document growth metrics and trends
+
+**Step 1.4: Extract market and industry data**
+- Competitive positioning information
+- Market size and growth rates
+- Industry benchmark data
+- Peer comparison information
+
+**Step 1.5: Note key context**
+- Transaction structure and rationale
+- Management team background
+- Investment highlights from source materials
+- Risk factors and considerations
+- Any data gaps or inconsistencies
+
+### Phase 2: Data Normalization and Standardization
+
+**Step 2.1: Normalize accounting presentation**
+- Ensure consistent line item names across all years
+- Standardize revenue recognition treatment
+- Identify and document one-time charges
+- Create "Adjusted EBITDA" reconciliation if needed
+- Note any accounting policy changes
+
+**Step 2.2: Apply format detection logic**
+For each data point, determine format based on full context:
+- Read tab name, table title, column header, and row label
+- Apply essential rules (see above)
+- When uncertain, examine original source document
+- Default to cleaner formatting (less is more)
+
+**Step 2.3: Identify normalization adjustments**
+Common adjustments to document:
+- Restructuring charges (add back if truly non-recurring)
+- Stock-based compensation (add back per industry standard)
+- Acquisition-related costs (add back, specify amounts)
+- Legal settlements or litigation costs (evaluate recurrence risk)
+- Asset sales or impairments (exclude from operating results)
+- Related party adjustments (normalize to market rates)
+Note: Source citation format varies by data source (page numbers for documents, URLs for web sources, server references for MCP data)
+
+**Step 2.4: Create adjustment schedule**
+For every normalization:
+- Document what was adjusted and why
+- Cite source (document page number, URL, or data source reference)
+- Quantify dollar impact by year
+- Assess recurrence risk
+- Show calculation from reported to adjusted figures
+
+**Step 2.5: Verify data integrity**
+- Confirm subtotals sum correctly using formulas
+- Verify balance sheet balances
+- Check cash flow ties to balance sheet changes
+- Cross-check numbers across tabs for consistency
+- Flag any discrepancies for investigation
+
+### Phase 3: Build Excel Workbook
+
+**CRITICAL: Use xlsx skill for all Excel file manipulation. Read xlsx skill documentation before proceeding.**
+
+**Step 3.1: Create standardized tab structure**
+Create workbook with tabs:
+- Executive Summary
+- Historical Financials
+- Balance Sheet
+- Cash Flow
+- Operating Metrics
+- Property Performance (if applicable)
+- Market Analysis
+- Investment Highlights
+
+**Step 3.2: Build each tab with proper formatting**
+Apply formatting rules systematically:
+- Headers: Bold, left-aligned, 11pt font
+- Financial data: Currency format $#,##0.0 for millions
+- Operational data: Number format #,##0 (no $)
+- Percentages: 0.0% format
+- Years: Text format to prevent comma insertion
+- Negatives: Use accounting format with parentheses
+- Underlines: Single above subtotals, double below totals
+
+**Step 3.3: Insert formulas for calculations**
+- All subtotals and totals must be formula-based
+- Link balance sheet to income statement where appropriate
+- Link cash flow to both income statement and balance sheet
+- Create cross-tab references for validation
+- Avoid hardcoding any calculated values
+
+
+
+### Row Reference Tracking - Copy This Pattern
+
+**Store row numbers when writing data, then reference them in formulas:**
+
+```python
+# ✅ CORRECT - Track row numbers as you write
+revenue_row = row
+write_data_row(ws, row, "Revenue", revenue_values)
+row += 1
+
+ebitda_row = row
+write_data_row(ws, row, "EBITDA", ebitda_values)
+row += 1
+
+# Use stored row numbers in formulas
+margin_row = row
+for col in year_columns:
+ cell = ws.cell(row=margin_row, column=col)
+ cell.value = f"={get_column_letter(col)}{ebitda_row}/{get_column_letter(col)}{revenue_row}"
+```
+
+**For complex models, use a dictionary:**
+
+```python
+row_refs = {
+ 'revenue': 5,
+ 'cogs': 6,
+ 'gross_profit': 7,
+ 'ebitda': 12
+}
+
+# Later in formulas
+margin_formula = f"=B{row_refs['ebitda']}/B{row_refs['revenue']}"
+```
+
+
+
+
+
+### WRONG: Hardcoded Row Offsets
+
+**Don't use relative offsets - they break when table structure changes:**
+
+```python
+# ❌ WRONG - Fragile offset-based references
+formula = f"=B{row-15}/B{row-19}" # What is row-15? What is row-19?
+
+# ❌ WRONG - Magic numbers
+formula = f"=B{current_row-10}*C{current_row-20}"
+```
+
+**Why this fails:**
+- Breaks silently when you add/remove rows
+- Impossible to verify correctness by reading code
+- Creates debugging nightmares in the delivered Excel file
+
+
+
+**Step 3.4: Apply professional presentation**
+- Freeze top row and first column on each data tab
+- Set appropriate column widths (typically 12-15 characters)
+- Right-align all numeric data
+- Left-align all text and headers
+- Add single/double underlines per accounting standards
+- Ensure clean, minimal appearance
+
+### Phase 4: Scenario Building (if projections included)
+
+**Management Case:**
+Present company's projections as provided in source materials:
+- Extract all management assumptions
+- Document growth rates, margin expansion, capital requirements
+- Note key drivers and sensitivities
+- Flag any "hockey stick" inflections that require skepticism
+- Present as "Management Case" with clear labeling
+
+**Base Case (Risk-Adjusted):**
+Apply conservative adjustments to management projections based on company-specific risk factors:
+- Apply revenue growth haircut reflecting execution risk and historical forecast accuracy
+- Moderate margin expansion assumptions based on industry benchmarks and operating leverage
+- Increase capex assumptions if growth-dependent
+- Add working capital requirements if understated
+- Delay synergy realization if applicable, based on integration complexity
+- Document all adjustments with rationale and supporting analysis
+
+**Downside Case (optional but recommended for LBO analysis):**
+Stress test scenario based on industry cyclicality and company vulnerabilities:
+- Model revenue decline reflecting recession risk or competitive pressure
+- Assume margin compression under stress (volume deleverage, pricing pressure)
+- Test covenant compliance and liquidity
+- Assess downside protection
+- Document key risks being stress-tested
+
+**Documentation requirements for scenarios:**
+Create assumptions schedule showing:
+- Key assumptions by scenario (revenue growth, margins, capex %)
+- Rationale for each adjustment
+- Sensitivity analysis on key variables
+- Historical forecast accuracy if available
+- Comparison to industry benchmarks
+
+### Phase 5: Quality Control and Validation
+
+**Step 5.1: Data accuracy checks**
+Validate:
+- Every number traces to source (check spot samples, cite documents/URLs/servers)
+- All calculations are formula-based (no hardcoded values)
+- Subtotals and totals are mathematically correct
+- Years display without commas (2024 NOT 2,024)
+- No formula errors: #REF!, #VALUE!, #DIV/0!, #N/A
+
+**Step 5.2: Format consistency checks**
+Verify:
+- Financial data has $ signs in format
+- Operational data has NO $ signs
+- Percentages display as % (15.0% not 0.15)
+- Negative numbers use parentheses for financial data
+- Headers are bold and left-aligned
+- Numbers are right-aligned
+- Years are text format
+
+**Step 5.3: Structure and completeness checks**
+Confirm:
+- All required tabs present and properly sequenced
+- Executive summary is concise (fits on one page)
+- All key metrics captured comprehensively
+- Logical flow from summary to detail
+- Appropriate level of granularity in each tab
+- No missing data or incomplete sections
+
+**Step 5.4: Professional presentation checks**
+Review:
+- Minimal borders (only for structure)
+- Consistent indentation (2 spaces for sub-items)
+- Proper accounting underlines (single and double)
+- Clean, professional appearance throughout
+- Appropriate column widths (not too narrow or wide)
+
+**Step 5.5: Documentation and assumptions checks**
+Ensure:
+- All normalization adjustments documented with rationale
+- Source citations included (document page numbers, URLs, or data source references)
+- Assumptions clearly stated and reasonable
+- Executive summary accurate and impactful
+- Filename includes company name and date
+
+### Phase 6: Final Delivery
+
+**Step 6.1: Create executive summary**
+Write concise, impactful summary including:
+- Company overview: business model, products/services, geography (2-3 sentences)
+- Key financial metrics: Revenue, EBITDA, Growth rates (table format)
+- Investment highlights: 3-5 key strengths or opportunities
+- Notable risks or considerations (briefly)
+- Transaction context if applicable
+
+**Step 6.2: Final file preparation**
+- Save workbook with proper naming: CompanyName_DataPack_YYYY-MM-DD.xlsx
+
+## NORMALIZATION PATTERNS
+
+### Common Adjustments to EBITDA
+
+**1. Restructuring charges**
+- Add back if truly non-recurring (facility closure, one-time severance)
+- Do NOT add back if company restructures every year
+- Document specific nature and rationale for non-recurrence
+- Example: "2023 restructuring: $3.0M facility closure, documented in source materials, one-time event"
+
+**2. Stock-based compensation**
+- Industry standard: add back for private equity analysis
+- Treat as non-cash operating expense
+- Be consistent across all periods
+- Note if unusually high or includes one-time grants
+
+**3. Acquisition-related costs**
+- Add back transaction fees, integration costs
+- Document specific amounts by type
+- Do not add back ongoing integration investments
+- Cite source for each adjustment
+
+**4. Legal settlements and litigation**
+- Add back if truly isolated incident
+- Assess recurrence risk (one settlement vs pattern of litigation)
+- Document nature of settlement
+- Consider if this is normal course of business
+
+**5. Asset sales or impairments**
+- Exclude gains/losses on asset sales from operating EBITDA
+- Remove impairment charges if truly non-recurring
+- Document what assets were sold/impaired and why
+- Adjust revenue if assets generated operating income
+
+**6. Related party adjustments**
+- Normalize above-market related party expenses (rent, management fees)
+- Adjust to market rates with supporting documentation
+- Remove personal expenses run through business
+- Document market rate comparison
+
+### Conservative vs Aggressive Normalization
+
+**Management Case:**
+- Include all adjustments management proposes
+- Accept company's definition of "non-recurring"
+- More aggressive EBITDA adjustments
+- Use for understanding management's view
+
+**Base Case (Recommended for investment decisions):**
+- Only clearly non-recurring items
+- Apply higher scrutiny to recurring "one-time" charges
+- Exclude speculative adjustments
+- More conservative, defensible to investment committee
+
+## INDUSTRY-SPECIFIC ADAPTATIONS
+
+### Technology/SaaS
+Key metrics to capture:
+- ARR (Annual Recurring Revenue) and MRR
+- Customer count by cohort
+- CAC (Customer Acquisition Cost) and LTV (Lifetime Value)
+- Churn rate (gross and net)
+- Net revenue retention
+- Rule of 40 (Growth % + EBITDA Margin %)
+- Magic number (sales efficiency)
+
+Format notes: ARR is currency ($), customer count is number (no $), rates are %
+
+### Manufacturing/Industrial
+Key metrics to capture:
+- Production capacity and capacity utilization %
+- Units produced by product line
+- Inventory turns
+- Gross margin by product line
+- Order backlog
+
+Format notes: Units, capacity are numbers (no $), utilization is %, revenue/costs are currency
+
+### Real Estate/Hospitality
+Key metrics to capture:
+- Properties/rooms/square footage
+- Occupancy rates %
+- ADR (Average Daily Rate) - currency format
+- RevPAR (Revenue per Available Room) - currency format
+- NOI (Net Operating Income) - currency format
+- Cap rates %
+- FF&E reserve
+
+Format notes: Rooms/sqft are numbers, occupancy is %, ADR/RevPAR are currency
+
+### Healthcare/Services
+Key metrics to capture:
+- Locations/facilities
+- Providers/employees
+- Patients/visits (volume metrics)
+- Revenue per visit - currency
+- Payor mix %
+- Same-store growth %
+
+Format notes: Locations/visits are numbers, revenue per visit is currency, rates are %
+
+## FINAL DELIVERY CHECKLIST
+
+Complete this checklist before delivering the data pack:
+
+**Structure:**
+- All required tabs present and in logical sequence
+- Each tab has clear header and title
+- Executive summary is concise (fits on one page)
+
+**Data Accuracy:**
+- All numbers trace to source (documents, URLs, or data servers)
+- Source references documented for key figures (page numbers, URLs, etc.)
+- All calculations are formula-based (no hardcoded calculated values)
+- Subtotals and totals verified
+- Balance sheet balances (Assets = Liabilities + Equity)
+- No #REF!, #VALUE!, or #DIV/0! errors
+
+**Formatting - Years and Numbers:**
+- Years display correctly: 2020, 2021, 2022 (no commas)
+- Financial data has $ signs: $50.0, $125.5
+- Operational metrics have NO $ signs: 100 stores, 250 employees
+- Percentages formatted correctly: 15.0%, 25.5%
+- Negatives in parentheses: $(15.0) not -$15.0
+
+**Formatting - Professional Standards:**
+- Headers bold and left-aligned
+- Numbers right-aligned
+- Consistent indentation (2 spaces for sub-items)
+- Single underline above subtotals
+- Double underline below final totals
+- Frozen panes on headers
+- Consistent font throughout
+- Minimal borders (only for structure)
+- Clean, professional appearance throughout
+
+**Content Completeness:**
+- Financial statements complete (IS, BS, CF)
+- Operating metrics comprehensively captured
+- Normalization adjustments documented
+- Assumptions clearly stated
+- Executive summary clear, concise, and impactful
+- Investment highlights compelling
+- Market analysis provides context
+
+**Documentation:**
+- All normalization adjustments explained
+- Every data cell cited from source with comments and links (document page numbers, URLs, or data source references)
+- Assumptions documented with rationale
+- Any data limitations noted
+- Filename follows convention: CompanyName_DataPack_YYYY-MM-DD.xlsx
+
+**Final Output:**
+- File saved to outputs with proper naming convention
+- All quality control checks passed
+
+## Data sources (Rebyte)
+
+Primary inputs remain user-uploaded documents (CIM/OM). When the target or its peers are public, pull from the Rebyte Financial Data Service (see the sibling `data` skill for auth and query mechanics):
+
+- **Tabs 2–4 (IS/BS/CF)** — `us.fundamentals` via `financial/sql` (one row per company×period, ~116 columns spans all three statements) or `stocks/financials`. CN targets: `cn.income` / `cn.balancesheet` / `cn.cashflow` / `cn.fina_indicator`.
+- **Tab 7 peer benchmarks** — cross-sectional SQL over `us.fundamentals` for the peer set; CN valuation comps from `cn.daily_basic` (PE/PB/mktcap).
+- **Exec Summary snapshot** (market cap, growth) — `stocks/details` + `us.eod`.
+- **Not available** (source docs or web only): market size / industry growth (Tab 7 context), non-financial operating KPIs (customer counts, occupancy, unit volumes).
diff --git a/dcf-model/SKILL.md b/dcf-model/SKILL.md
new file mode 100644
index 0000000..d3657b6
--- /dev/null
+++ b/dcf-model/SKILL.md
@@ -0,0 +1,1275 @@
+---
+name: dcf-model
+description: Real DCF (Discounted Cash Flow) model creation for equity valuation. Retrieves financial data from SEC filings and analyst reports, builds comprehensive cash flow projections with proper WACC calculations, performs sensitivity analysis, and outputs professional Excel models with executive summaries. Use when users need to value a company using DCF methodology, request intrinsic value analysis, or ask for detailed financial modeling with growth projections and terminal value calculations.
+---
+
+# DCF Model Builder
+
+## Overview
+
+This skill creates institutional-quality DCF models for equity valuation following investment banking standards. Each analysis produces a detailed Excel model (with sensitivity analysis included at the bottom of the DCF sheet).
+
+## Tools
+
+- Default to using all of the information provided by the user and MCP servers available for data sourcing.
+
+## Critical Constraints - Read These First
+
+These constraints apply throughout all DCF model building. Review before starting:
+
+**Environment: Office JS vs Python/openpyxl:**
+- **If running inside Excel (Office Add-in / Office JS environment):** Use Office JS directly — do NOT use Python/openpyxl. Write formulas via `range.formulas = [["=D19*(1+$B$8)"]]`. No separate recalc step needed; Excel calculates natively. Use `range.format.*` for styling. The same formulas-over-hardcodes rule applies: set `.formulas`, never `.values` for derived cells.
+- **If generating a standalone .xlsx file (no live Excel session):** Use Python/openpyxl as described below, then run `scripts/recalc.py` before delivery.
+- The rest of this skill uses openpyxl examples — translate to Office JS API calls when in that environment, but all principles (formula strings, cell comments, section checkpoints, sensitivity table loops) apply identically.
+
+**⚠️ Office JS merged cell pitfall:** When building section headers with merged cells, do NOT call `.merge()` then set `.values` on the merged range — Office JS still reports the range's original dimensions and will throw `InvalidArgument: The number of rows or columns in the input array doesn't match the size or dimensions of the range`. Instead, write the value to the top-left cell alone, then merge and format the full range:
+
+```js
+// WRONG — throws InvalidArgument:
+const hdr = ws.getRange("A7:H7");
+hdr.merge();
+hdr.values = [["MARKET DATA & KEY INPUTS"]]; // 1×1 array vs 1×8 range → fails
+
+// CORRECT — value first on single cell, then merge + format the range:
+ws.getRange("A7").values = [["MARKET DATA & KEY INPUTS"]];
+const hdr = ws.getRange("A7:H7");
+hdr.merge();
+hdr.format.fill.color = "#1F4E79";
+hdr.format.font.bold = true;
+hdr.format.font.color = "#FFFFFF";
+```
+
+This applies to every merged section header in the DCF (market data, scenario blocks, cash flow projection, terminal value, valuation summary, sensitivity tables).
+
+**Formulas Over Hardcodes (NON-NEGOTIABLE):**
+- Every projection, margin, discount factor, PV, and sensitivity cell MUST be a live Excel formula — never a value computed in Python and written as a number
+- When using openpyxl: `ws["D20"] = "=D19*(1+$B$8)"` is correct; `ws["D20"] = calculated_revenue` is WRONG
+- The only hardcoded numbers permitted are: (1) raw historical inputs, (2) assumption drivers (growth rates, WACC inputs, terminal g), (3) current market data (share price, debt balance)
+- If you catch yourself computing something in Python and writing the result — STOP. The model must flex when the user changes an assumption.
+
+**Verify Step-by-Step With the User (DO NOT build end-to-end):**
+- After data retrieval → show the user the raw inputs block (revenue, margins, shares, net debt) and confirm before projecting
+- After revenue projections → show the projected top line and growth rates, confirm before building margin build
+- After FCF build → show the full FCF schedule, confirm logic before computing WACC
+- After WACC → show the calculation and inputs, confirm before discounting
+- After terminal value + PV → show the equity bridge (EV → equity value → per share), confirm before sensitivity tables
+- Catch errors at each stage — a wrong margin assumption discovered after sensitivity tables are built means rebuilding everything downstream
+
+**Sensitivity Tables:**
+- **Use an ODD number of rows and columns** (standard: 5×5, sometimes 7×7) — this guarantees a true center cell
+- **Center cell = base case.** Build the axis values so the middle row header and middle column header exactly equal the model's actual assumptions (e.g., if base WACC = 9.0%, the middle row is 9.0%; if terminal g = 3.0%, the middle column is 3.0%). The center cell's output must therefore equal the model's actual implied share price — this is the sanity check that the table is built correctly.
+- **Highlight the center cell** with the medium-blue fill (`#BDD7EE`) + bold font so it's immediately visible which cell is the base case.
+- Populate ALL cells (typically 3 tables × 25 cells = 75) with full DCF recalculation formulas
+- Use openpyxl loops (or Office JS loops) to write formulas programmatically
+- NO placeholder text, NO linear approximations, NO manual steps required
+- Each cell must recalculate full DCF for that assumption combination
+
+**Cell Comments:**
+- Add cell comments AS each hardcoded value is created
+- Format: "Source: [System/Document], [Date], [Reference], [URL if applicable]"
+- Every blue input must have a comment before moving to next section
+- Do not defer to end or write "TODO: add source"
+
+**Model Layout Planning:**
+- Define ALL section row positions BEFORE writing any formulas
+- Write ALL headers and labels first
+- Write ALL section dividers and blank rows second
+- THEN write formulas using the locked row positions
+- Test formulas immediately after creation
+
+**Formula Recalculation:**
+- Run `python scripts/recalc.py model.xlsx 30` before delivery
+- Fix ALL errors until status is "success"
+- Zero formula errors required (#REF!, #DIV/0!, #VALUE!, etc.)
+
+**Scenario Blocks:**
+- Create separate blocks for Bear/Base/Bull cases
+- Show assumptions horizontally across projection years within each block
+- Use IF formulas: `=IF($B$6=1,[Bear cell],IF($B$6=2,[Base cell],[Bull cell]))`
+- Verify formulas reference correct scenario block cells
+
+## DCF Process Workflow
+
+### Step 1: Data Retrieval and Validation
+
+Fetch data from MCP servers, user provided data, and the web.
+
+**Data Sources Priority:**
+1. **MCP Servers** (if configured) - Structured financial data from providers like Daloopa
+2. **User-Provided Data** - Historical financials from their research
+3. **Web Search/Fetch** - Current prices, beta, debt and cash when needed
+
+**Validation Checklist:**
+- Verify net debt vs net cash (critical for valuation)
+- Confirm diluted shares outstanding (check for recent buybacks/issuances)
+- Validate historical margins are consistent with business model
+- Cross-check revenue growth rates with industry benchmarks
+- Verify tax rate is reasonable (typically 21-28%)
+
+### Step 2: Historical Analysis (3-5 years)
+
+Analyze and document:
+- **Revenue growth trends**: Calculate CAGR, identify drivers
+- **Margin progression**: Track gross margin, EBIT margin, FCF margin
+- **Capital intensity**: D&A and CapEx as % of revenue
+- **Working capital efficiency**: NWC changes as % of revenue growth
+- **Return metrics**: ROIC, ROE trends
+
+Create summary tables showing:
+```
+Historical Metrics (LTM):
+Revenue: $X million
+Revenue growth: X% CAGR
+Gross margin: X%
+EBIT margin: X%
+D&A % of revenue: X%
+CapEx % of revenue: X%
+FCF margin: X%
+```
+
+### Step 3: Build Revenue Projections
+
+**Methodology:**
+1. Start with latest actual revenue (LTM or most recent fiscal year)
+2. Apply growth rates for each projection year
+3. Show both dollar amounts AND calculated growth %
+
+**Growth Rate Framework:**
+- Year 1-2: Higher growth reflecting near-term visibility
+- Year 3-4: Gradual moderation toward industry average
+- Year 5+: Approaching terminal growth rate
+
+**Formula structure:**
+- Revenue(Year N) = Revenue(Year N-1) × (1 + Growth Rate)
+- Growth %(Year N) = Revenue(Year N) / Revenue(Year N-1) - 1
+
+**Three-scenario approach:**
+```
+Bear Case: Conservative growth (e.g., 8-12%)
+Base Case: Most likely scenario (e.g., 12-16%)
+Bull Case: Optimistic growth (e.g., 16-20%)
+```
+
+### Step 4: Operating Expense Modeling
+
+**Fixed/Variable Cost Analysis:**
+
+Operating expenses should model realistic operating leverage:
+- **Sales & Marketing**: Typically 15-40% of revenue depending on business model
+- **Research & Development**: Typically 10-30% for technology companies
+- **General & Administrative**: Typically 8-15% of revenue, shows leverage as company scales
+
+**Key principles:**
+- ALL percentages based on REVENUE, not gross profit
+- Model operating leverage: % should decline as revenue scales
+- Maintain separate line items for S&M, R&D, G&A
+- Calculate EBIT = Gross Profit - Total OpEx
+
+**Margin expansion framework:**
+```
+Current State → Target State (Year 5)
+Gross Margin: X% → Y% (justify based on scale, efficiency)
+EBIT Margin: X% → Y% (result of revenue growth + opex leverage)
+```
+
+### Step 5: Free Cash Flow Calculation
+
+**Build FCF in proper sequence:**
+
+```
+EBIT
+(-) Taxes (EBIT × Tax Rate)
+= NOPAT (Net Operating Profit After Tax)
+(+) D&A (non-cash expense, % of revenue)
+(-) CapEx (% of revenue, typically 4-8%)
+(-) Δ NWC (change in working capital)
+= Unlevered Free Cash Flow
+```
+
+**Working Capital Modeling:**
+- Calculate as % of revenue change (delta revenue)
+- Typical range: -2% to +2% of revenue change
+- Negative number = source of cash (working capital release)
+- Positive number = use of cash (working capital build)
+
+**Maintenance vs Growth CapEx:**
+- Maintenance CapEx: Sustains current operations (~2-3% revenue)
+- Growth CapEx: Supports expansion (additional 2-5% revenue)
+- Total CapEx should align with company's growth strategy
+
+### Step 6: Cost of Capital (WACC) Research
+
+**CAPM Methodology for Cost of Equity:**
+
+```
+Cost of Equity = Risk-Free Rate + Beta × Equity Risk Premium
+
+Where:
+- Risk-Free Rate = Current 10-Year Treasury Yield
+- Beta = 5-year monthly stock beta vs market index
+- Equity Risk Premium = 5.0-6.0% (market standard)
+```
+
+**Cost of Debt Calculation:**
+
+```
+After-Tax Cost of Debt = Pre-Tax Cost of Debt × (1 - Tax Rate)
+
+Determine Pre-Tax Cost of Debt from:
+- Credit rating (if available)
+- Current yield on company bonds
+- Interest expense / Total Debt from financials
+```
+
+**Capital Structure Weights:**
+
+```
+Market Value Equity = Current Stock Price × Shares Outstanding
+Net Debt = Total Debt - Cash & Equivalents
+Enterprise Value = Market Cap + Net Debt
+
+Equity Weight = Market Cap / Enterprise Value
+Debt Weight = Net Debt / Enterprise Value
+
+WACC = (Cost of Equity × Equity Weight) + (After-Tax Cost of Debt × Debt Weight)
+```
+
+**Special Cases:**
+- **Net Cash Position**: If Cash > Debt, Net Debt is NEGATIVE
+ - Debt Weight may be negative
+ - WACC calculation adjusts accordingly
+- **No Debt**: WACC = Cost of Equity
+
+**Typical WACC Ranges:**
+- Large Cap, Stable: 7-9%
+- Growth Companies: 9-12%
+- High Growth/Risk: 12-15%
+
+### Step 7: Discount Rate Application (5-10 Year Forecast)
+
+**Mid-Year Convention:**
+- Cash flows assumed to occur mid-year
+- Discount Period: 0.5, 1.5, 2.5, 3.5, 4.5, etc.
+- Discount Factor = 1 / (1 + WACC)^Period
+
+**Present Value Calculation:**
+```
+For each projection year:
+PV of FCF = Unlevered FCF × Discount Factor
+
+Example (Year 1):
+FCF = $1,000
+WACC = 10%
+Period = 0.5
+Discount Factor = 1 / (1.10)^0.5 = 0.9535
+PV = $1,000 × 0.9535 = $954
+```
+
+**Projection Period Selection:**
+- **5 years**: Standard for most analyses
+- **7-10 years**: High growth companies with longer runway
+- **3 years**: Mature, stable businesses
+
+### Step 8: Terminal Value Calculation
+
+**Perpetuity Growth Method (Preferred):**
+
+```
+Terminal FCF = Final Year FCF × (1 + Terminal Growth Rate)
+Terminal Value = Terminal FCF / (WACC - Terminal Growth Rate)
+
+Critical Constraint: Terminal Growth < WACC (otherwise infinite value)
+```
+
+**Terminal Growth Rate Selection:**
+- Conservative: 2.0-2.5% (GDP growth rate)
+- Moderate: 2.5-3.5%
+- Aggressive: 3.5-5.0% (only for market leaders)
+
+**Do not exceed**: Risk-free rate or long-term GDP growth
+
+**Exit Multiple Method (Alternative):**
+```
+Terminal Value = Final Year EBITDA × Exit Multiple
+
+Where Exit Multiple comes from:
+- Industry comparable trading multiples
+- Precedent transaction multiples
+- Typical range: 8-15x EBITDA
+```
+
+**Present Value of Terminal Value:**
+```
+PV of Terminal Value = Terminal Value / (1 + WACC)^Final Period
+
+Where Final Period accounts for timing:
+5-year model with mid-year convention: Period = 4.5
+```
+
+**Terminal Value Sanity Check:**
+- Should represent 50-70% of Enterprise Value
+- If >75%, model may be over-reliant on terminal assumptions
+- If <40%, check if terminal assumptions are too conservative
+
+### Step 9: Enterprise to Equity Value Bridge
+
+**Valuation Summary Structure:**
+
+```
+(+) Sum of PV of Projected FCFs = $X million
+(+) PV of Terminal Value = $Y million
+= Enterprise Value = $Z million
+
+(-) Net Debt [or + Net Cash if negative] = $A million
+= Equity Value = $B million
+
+÷ Diluted Shares Outstanding = C million shares
+= Implied Price per Share = $XX.XX
+
+Current Stock Price = $YY.YY
+Implied Return = (Implied Price / Current Price) - 1 = XX%
+```
+
+**Critical Adjustments:**
+- **Net Debt = Total Debt - Cash & Equivalents**
+ - If positive: Subtract from EV (reduces equity value)
+ - If negative (Net Cash): Add to EV (increases equity value)
+- **Use Diluted Shares**: Includes options, RSUs, convertible securities
+- **Other adjustments** (if applicable):
+ - Minority interests
+ - Pension liabilities
+ - Operating lease obligations
+
+**Valuation Output Format:**
+```csv
+Valuation Component,Amount ($M)
+PV Explicit FCFs,X.X
+PV Terminal Value,Y.Y
+Enterprise Value,Z.Z
+(-) Net Debt,A.A
+Equity Value,B.B
+,,
+Shares Outstanding (M),C.C
+Implied Price per Share,$XX.XX
+Current Share Price,$YY.YY
+Implied Upside/(Downside),+XX%
+```
+
+### Step 10: Sensitivity Analysis
+
+Build **three sensitivity tables** at the bottom of the DCF sheet showing how valuation changes with different assumptions:
+
+1. **WACC vs Terminal Growth** - Shows enterprise value sensitivity to discount rate and perpetuity growth
+2. **Revenue Growth vs EBIT Margin** - Shows impact of top-line growth and operating leverage
+3. **Beta vs Risk-Free Rate** - Shows sensitivity to cost of equity components
+
+**Implementation**: These are simple 2D grids (NOT Excel's "Data Table" feature) with formulas in each cell. Each cell must contain a full DCF recalculation for that specific assumption combination. See Critical Constraints section for detailed requirements on populating all 75 cells programmatically using openpyxl.
+
+
+
+This section contains all the CORRECT patterns to follow when building DCF models.
+
+### Scenario Block Selection Pattern - Follow This Approach
+
+**Assumptions are organized in separate blocks for each scenario:**
+
+**CRITICAL STRUCTURE - Three rows per section header:**
+
+```csv
+BEAR CASE ASSUMPTIONS (section header, merge cells across)
+Assumption,FY1,FY2,FY3,FY4,FY5
+Revenue Growth (%),12%,10%,9%,8%,7%
+EBIT Margin (%),45%,44%,43%,42%,41%
+
+BASE CASE ASSUMPTIONS (section header, merge cells across)
+Assumption,FY1,FY2,FY3,FY4,FY5
+Revenue Growth (%),16%,14%,12%,10%,9%
+EBIT Margin (%),48%,49%,50%,51%,52%
+
+BULL CASE ASSUMPTIONS (section header, merge cells across)
+Assumption,FY1,FY2,FY3,FY4,FY5
+Revenue Growth (%),20%,18%,15%,13%,11%
+EBIT Margin (%),50%,51%,52%,53%,54%
+```
+
+**Each scenario block MUST have a column header row** showing the projection years (FY2025E, FY2026E, etc.) immediately below the section title. Without this, users cannot tell which assumption value corresponds to which year.
+
+**How to reference assumptions - Create a consolidation column:**
+1. Case selector cell (e.g., B6) contains 1=Bear, 2=Base, or 3=Bull
+2. Create a consolidation column with INDEX or OFFSET formulas to pull from the correct scenario block
+3. Projection formulas reference the consolidation column (clean cell references)
+4. Each scenario block contains full set of DCF assumptions across projection years
+
+**Recommended consolidation column pattern (using INDEX):**
+`=INDEX(B10:D10, 1, $B$6)`
+
+**NOT this - scattered IF statements throughout:**
+`=IF($B$6=1,[Bear block cell],IF($B$6=2,[Base block cell],[Bull block cell]))`
+
+The consolidation column approach centralizes logic and makes the model easier to audit.
+
+### Correct Revenue Projection Pattern
+
+**Create a consolidation column with INDEX formulas, then reference it in projections:**
+
+**Step 1 - Consolidation column for FY1 growth:**
+`=INDEX([Bear FY1 growth]:[Bull FY1 growth], 1, $B$6)`
+
+**Step 2 - Revenue projection references the consolidation column:**
+`Revenue Year 1: =D29*(1+$E$10)`
+
+Where:
+- D29 = Prior year revenue
+- $E$10 = Consolidation column cell for FY1 growth (contains INDEX formula)
+- $B$6 = Case selector (1=Bear, 2=Base, 3=Bull)
+
+**This approach is cleaner than embedding IF statements in every projection formula** and makes it much easier to audit which scenario assumptions are being used.
+
+### Correct FCF Formula Pattern
+
+**Use consolidation columns with INDEX formulas, then reference them in FCF calculations:**
+
+**Consolidation column approach:**
+```csv
+Item,Formula,Reference
+D&A,=E29*$E$21,$E$21 = consolidation column for D&A %
+CapEx,=E29*$E$22,$E$22 = consolidation column for CapEx %
+Δ NWC,=(E29-D29)*$E$23,$E$23 = consolidation column for NWC %
+Unlevered FCF,=E57+E58-E60-E62,E57=NOPAT E58=D&A E60=CapEx E62=Δ NWC
+```
+
+**Each consolidation column cell contains an INDEX formula** that pulls from the appropriate scenario block based on case selector. This keeps projection formulas clean and auditable.
+
+Before writing formulas, confirm scenario block row locations and set up consolidation columns.
+
+### Correct Cell Comment Format
+
+**Every hardcoded value needs this format:**
+
+"Source: [System/Document], [Date], [Reference], [URL if applicable]"
+
+**Examples:**
+```csv
+Item,Source Comment
+Stock price,Source: Market data script 2025-10-12 Close price
+Shares outstanding,Source: 10-K FY2024 Page 45 Note 12
+Historical revenue,Source: 10-K FY2024 Page 32 Consolidated Statements
+Beta,Source: Market data script 2025-10-12 5-year monthly beta
+Consensus estimates,Source: Management guidance Q3 2024 earnings call
+```
+
+### Correct Assumption Table Structure
+
+**CRITICAL: Each scenario block requires THREE structural elements:**
+
+1. **Section header row** (merged cells): e.g., "BEAR CASE ASSUMPTIONS"
+2. **Column header row** showing years - THIS IS REQUIRED, DO NOT SKIP
+3. **Data rows** with assumption values
+
+**Structure:**
+```csv
+BEAR CASE ASSUMPTIONS (section header - merge across columns A:G)
+Assumption,FY1,FY2,FY3,FY4,FY5
+Revenue Growth (%),X%,X%,X%,X%,X%
+EBIT Margin (%),X%,X%,X%,X%,X%
+Terminal Growth,X%,,,,
+WACC,X%,,,,
+
+BASE CASE ASSUMPTIONS (section header - merge across columns A:G)
+Assumption,FY1,FY2,FY3,FY4,FY5
+Revenue Growth (%),X%,X%,X%,X%,X%
+EBIT Margin (%),X%,X%,X%,X%,X%
+Terminal Growth,X%,,,,
+WACC,X%,,,,
+
+BULL CASE ASSUMPTIONS (section header - merge across columns A:G)
+Assumption,FY1,FY2,FY3,FY4,FY5
+Revenue Growth (%),X%,X%,X%,X%,X%
+EBIT Margin (%),X%,X%,X%,X%,X%
+Terminal Growth,X%,,,,
+WACC,X%,,,,
+```
+
+**WITHOUT the column header row showing projection years (FY2025E, FY2026E, etc.), users cannot tell which assumption value corresponds to which year. This row is MANDATORY.**
+
+**Then create a consolidation column** (typically the next column to the right) that uses INDEX formulas to pull from the selected scenario block based on the case selector. This consolidation column is what your projection formulas reference.
+
+### Correct Row Planning Process
+
+**1. Write ALL headers and labels FIRST:**
+```csv
+Row,Content
+1,[Company Name] DCF Model
+2,Ticker | Date | Year End
+4,Case Selector
+7,KEY ASSUMPTIONS
+26,Assumption headers
+27-31,Growth assumptions
+...,...
+```
+
+**2. Write ALL section dividers and blank rows**
+
+**3. THEN write formulas using the locked row positions**
+
+**4. Test formulas immediately after creation**
+
+**Think of it like construction:**
+- Good: Pour foundation, then build walls (stable structure)
+- Bad: Build walls, then pour foundation (walls collapse)
+
+**Excel version:**
+- Good: Add headers, then write formulas (formulas stable)
+- Bad: Write formulas, then add headers (formulas break)
+
+### Correct Sensitivity Table Implementation
+
+**IMPORTANT**: These are NOT Excel's "Data Table" feature. These are simple grids where you write regular formulas using openpyxl. Yes, this means ~75 formulas total (3 tables × 25 cells each), but this is straightforward and required.
+
+**Programmatic Population with Formulas:**
+
+Each sensitivity table must be fully populated with formulas that recalculate the implied share price for each combination of assumptions. **Do not use Excel's Data Table feature** (it requires manual intervention and cannot be automated via openpyxl).
+
+**Implementation approach - CONCRETE EXAMPLE:**
+
+**Table Structure — 5×5 grid (ODD dimensions, base case centered):**
+
+If the model's base WACC = 9.0% and base terminal growth = 3.0%, build the axes symmetrically around those values:
+
+```csv
+WACC vs Terminal Growth, 2.0%, 2.5%, 3.0%, 3.5%, 4.0%
+ 8.0%, [fml], [fml], [fml], [fml], [fml]
+ 8.5%, [fml], [fml], [fml], [fml], [fml]
+ 9.0%, [fml], [fml], [★ ], [fml], [fml] ← middle row = base WACC
+ 9.5%, [fml], [fml], [fml], [fml], [fml]
+ 10.0%, [fml], [fml], [fml], [fml], [fml]
+ ↑
+ middle col = base terminal g
+```
+
+**★ = the center cell.** Its formula output MUST equal the model's actual implied share price (from the valuation summary). Apply the medium-blue fill (`#BDD7EE`) and bold font to this cell so the base case is visually anchored.
+
+**Rule for axis values:** `axis_values = [base - 2*step, base - step, base, base + step, base + 2*step]` — symmetric around the base, odd count guarantees a center.
+
+**Formula Pattern - Cell B88 (WACC=8.0%, Terminal Growth=2.0%):**
+
+The formula in B88 should recalculate the implied price using:
+- WACC from row header: `$A88` (8.0%)
+- Terminal Growth from column header: `B$87` (2.0%)
+
+**Recommended approach:** Reference the main DCF calculation but substitute these values.
+
+**Example formula structure:**
+`=([SUM of PV FCFs using $A88 as discount rate] + [Terminal Value using B$87 as growth rate and $A88 as WACC] - [Net Debt]) / [Shares]`
+
+**CRITICAL - Write a formula for EVERY cell in the 5x5 grid (25 cells per table, 75 cells total).** Use openpyxl to write these formulas programmatically in a loop. Do NOT skip this step or leave placeholder text.
+
+**Python implementation pattern:**
+```python
+# Pseudocode for populating sensitivity table
+for row_idx, wacc_value in enumerate(wacc_range):
+ for col_idx, term_growth_value in enumerate(term_growth_range):
+ # Build formula that uses wacc_value and term_growth_value
+ formula = f"="
+ ws.cell(row=start_row+row_idx, column=start_col+col_idx).value = formula
+```
+
+**The sensitivity tables must work immediately when the model is opened, with no manual steps required from the user.**
+
+
+
+
+
+This section contains all the WRONG patterns to avoid when building DCF models.
+
+### WRONG: Simplified Sensitivity Table Approximations or Placeholder Text
+
+**Don't use linear approximations:**
+
+```
+// WRONG - Linear approximation
+B97: =B88*(1+(0.096-0.116)) // Assumes linear relationship
+
+// WRONG - Division shortcut
+B105: =B88/(1+(E48-0.07)) // Doesn't recalculate full DCF
+```
+
+**Don't leave placeholder text:**
+```
+// WRONG - Placeholder note
+"Note: Use Excel Data Table feature (Data → What-If Analysis → Data Table) to populate sensitivity tables."
+
+// WRONG - Empty cells
+[leaving cells blank because "this is complex"]
+```
+
+**Don't confuse terminology:**
+- ❌ "Sensitivity tables need Excel's Data Table feature" (NO - that's a specific Excel tool we can't use)
+- ✅ "Sensitivity tables are simple grids with formulas in each cell" (YES - this is what we build)
+
+**Why these shortcuts are wrong:**
+- Linear approximation formulas don't actually recalculate the DCF - they just apply simple math adjustments
+- The relationships are not linear, so the results will be inaccurate
+- Placeholder text requires manual user intervention
+- Model is not immediately usable when delivered
+- Not professional or client-ready
+- Empty cells = incomplete deliverable
+
+**Common rationalization to REJECT:**
+"Writing 75+ formulas feels complex, so I'll leave a note for the user to complete it manually."
+
+**Reality:** Writing 75 formulas is straightforward when you use a loop in Python with openpyxl. Each formula follows the same pattern - just substitute the row/column values. This is a required part of the deliverable.
+
+**Instead:** Populate every sensitivity cell with formulas that recalculate the full DCF for that specific combination of assumptions
+
+### WRONG: Missing Cell Comments
+
+**Don't do this:**
+- Create all hardcoded inputs without comments
+- Think "I'll add them later"
+- Write "TODO: add source"
+- Leave blue inputs without documentation
+
+**Why it's wrong:**
+- Can't verify where data came from
+- Fails xlsx skill requirements
+- Not audit-ready
+- Wastes time fixing later
+
+**Instead:** Add cell comment AS EACH hardcoded value is created
+
+### WRONG: Formula Row References Off
+
+**Symptom:**
+The FCF section references wrong assumption rows:
+`D&A: =E29*$E$34 // Should be $E$21, but referencing wrong row`
+`CapEx: =E29*$E$41 // Should be $E$22, but row shifted`
+
+**Why this happens:**
+1. Formulas written first
+2. Then headers inserted
+3. All row references shifted
+4. Now formulas point to wrong cells → #REF! errors
+
+**Instead:** Lock row layout FIRST, then write formulas
+
+### WRONG: Single Row for Each Assumption Across Scenarios
+
+**Don't structure assumptions like this:**
+```csv
+Assumption,Bear,Base,Bull
+Revenue Growth FY1,10%,13%,16%
+Revenue Growth FY2,9%,12%,15%
+```
+This vertical layout makes it hard to see the progression across years within each scenario.
+
+**Why it's wrong:**
+- Makes it difficult to see assumptions evolving across years within each scenario
+- Harder to compare scenario assumptions across full projection period
+- Less intuitive for reviewing scenario logic
+
+**Instead:**
+- Create separate blocks for each scenario (Bear, Base, Bull)
+- Within each block, show assumptions horizontally across projection years
+- This makes each scenario's assumptions easier to review as a cohesive set
+
+### WRONG: No Borders
+
+**Don't deliver a model without borders:**
+- No section delineation
+- All cells blend together
+- Hard to read and unprofessional
+
+**Why it's wrong:**
+- Not client-ready
+- Difficult to navigate
+- Looks amateur
+
+**Instead:** Add borders around all major sections
+
+### WRONG: Wrong Font Colors or No Font Color Distinction
+
+**Don't do this:**
+- All text is black
+- Only use fill colors (no font color changes)
+- Mix up which cells are blue vs black
+
+**Why it's wrong:**
+- Can't distinguish inputs from formulas
+- Auditing becomes impossible
+- Violates xlsx skill requirements
+
+**Instead:** Blue text for ALL hardcoded inputs, black text for ALL formulas, green for sheet links
+
+### WRONG: Operating Expenses Based on Gross Profit
+
+**Don't do this:**
+`S&M: =E33*0.15 // E33 = Gross Profit (WRONG)`
+
+**Why it's wrong:**
+- Operating expenses scale with revenue, not gross profit
+- Produces unrealistic margin progression
+- Not how businesses actually operate
+
+**Instead:**
+`S&M: =E29*0.15 // E29 = Revenue (CORRECT)`
+
+### TOP 5 ERRORS SUMMARY
+
+1. **Formula row references off** → Define ALL row positions BEFORE writing formulas
+2. **Missing cell comments** → Add comments AS cells are created, not at end
+3. **Simplified sensitivity tables** → Populate all cells with full DCF recalc formulas, not approximations
+4. **Scenario block references wrong** → Ensure IF formulas pull from correct Bear/Base/Bull blocks
+5. **No borders** → Add professional section borders for client-ready appearance
+
+In addition, be aware of these errors:
+
+### WACC Calculation Errors
+- Mixing book and market values in capital structure
+- Using equity beta instead of asset/unlevered beta incorrectly
+- Wrong tax rate application to cost of debt
+- Incorrect risk-free rate (must use current 10Y Treasury)
+- Failure to adjust for net debt vs net cash position
+
+### Growth Assumption Flaws
+- Terminal growth > WACC (creates infinite value)
+- Projection growth rates inconsistent with historical performance
+- Ignoring industry growth constraints
+- Revenue growth not aligned with unit economics
+- Margin expansion without operational justification
+
+### Terminal Value Mistakes
+- Using wrong growth method (perpetuity vs exit multiple)
+- Terminal value >80% of enterprise value (suggests over-reliance)
+- Inconsistent terminal margins with steady state assumptions
+- Wrong discount period for terminal value
+
+### Cash Flow Projection Errors
+- Operating expenses based on gross profit instead of revenue
+- D&A/CapEx percentages misaligned with business model
+- Working capital changes not properly calculated
+- Tax rate inconsistency between years
+- NOPAT calculation errors
+
+**These errors are the most common. Re-read this section before starting any DCF build.**
+
+
+
+## Excel File Creation
+
+**This skill uses the `xlsx` skill for all spreadsheet operations.** The xlsx skill provides:
+- Standardized formula construction rules
+- Number formatting conventions
+- Automated formula recalculation via `scripts/recalc.py` script
+- Comprehensive error checking and validation
+
+All Excel files created by this skill must follow xlsx skill requirements, including zero formula errors and proper recalculation.
+
+## Quality Rubric
+
+Every DCF model must maximize for:
+1. **Realistic revenue and margin assumptions** based on historical performance
+2. **Appropriate cost of capital calculation** with proper CAPM methodology
+3. **Comprehensive sensitivity analysis** showing valuation ranges
+4. **Clear terminal value calculation** with supporting rationale
+5. **Professional model structure** enabling scenario analysis
+6. **Transparent documentation** of all key assumptions
+
+## Input Requirements
+
+### Minimum Required Inputs
+1. **Company identifier**: Ticker symbol or company name
+2. **Growth assumptions**: Revenue growth rates for projection period (or "use consensus")
+3. **Optional parameters**:
+ - Projection period (default: 5 years)
+ - Scenario cases (Bear/Base/Bull growth and margin assumptions)
+ - Terminal growth rate (default: 2.5-3.0%)
+ - Specific WACC inputs if not using CAPM
+
+## Excel Model Structure
+
+### Sheet Architecture
+
+Create **two sheets**:
+
+1. **DCF** - Main valuation model with sensitivity analysis at bottom
+2. **WACC** - Cost of capital calculation
+
+**CRITICAL**: Sensitivity tables go at the BOTTOM of the DCF sheet (not on a separate sheet). This keeps all valuation outputs together.
+
+### Formula Recalculation (MANDATORY)
+
+After creating or modifying the Excel model, **recalculate all formulas** using the recalc.py script from the xlsx skill:
+
+```bash
+python scripts/recalc.py [path_to_excel_file] [timeout_seconds]
+```
+
+Example:
+```bash
+python scripts/recalc.py AAPL_DCF_Model_2025-10-12.xlsx 30
+```
+
+The script will:
+- Recalculate all formulas in all sheets using LibreOffice
+- Scan ALL cells for Excel errors (#REF!, #DIV/0!, #VALUE!, #NAME?, #NULL!, #NUM!, #N/A)
+- Return detailed JSON with error locations and counts
+
+**Expected output format:**
+```json
+{
+ "status": "success", // or "errors_found"
+ "total_errors": 0, // Total error count
+ "total_formulas": 42, // Number of formulas in file
+ "error_summary": {} // Only present if errors found
+}
+```
+
+**If errors are found**, the output will include details:
+```json
+{
+ "status": "errors_found",
+ "total_errors": 2,
+ "total_formulas": 42,
+ "error_summary": {
+ "#REF!": {
+ "count": 2,
+ "locations": ["DCF!B25", "DCF!C25"]
+ }
+ }
+}
+```
+
+**Fix all errors** and re-run recalc.py until status is "success" before delivering the model.
+
+### Formatting Standards
+
+**IMPORTANT**: Follow the xlsx skill for formula construction rules and number formatting conventions. The DCF skill adds specific visual presentation standards.
+
+**Color Scheme - Two Layers**:
+
+**Layer 1: Font Colors (MANDATORY from xlsx skill)**
+- **Blue text (RGB: 0,0,255)**: ALL hardcoded inputs (stock price, shares, historical data, assumptions)
+- **Black text (RGB: 0,0,0)**: ALL formulas and calculations
+- **Green text (RGB: 0,128,0)**: Links to other sheets (WACC sheet references)
+
+**Layer 2: Fill Colors — Professional Blue/Grey Palette (Default unless user specifies otherwise)**
+- **Keep it minimal** — use only blues and greys for fills. Do NOT introduce greens, yellows, oranges, or multiple accent colors. A model with too many colors looks amateurish.
+- **Default fill palette:**
+ - **Section headers**: Dark blue (RGB: 31,78,121 / `#1F4E79`) background with white bold text
+ - **Sub-headers/column headers**: Light blue (RGB: 217,225,242 / `#D9E1F2`) background with black bold text
+ - **Input cells**: Light grey (RGB: 242,242,242 / `#F2F2F2`) background with blue font — or just white with blue font if you want maximum minimalism
+ - **Calculated cells**: White background with black font
+ - **Output/summary rows** (per-share value, EV, etc.): Medium blue (RGB: 189,215,238 / `#BDD7EE`) background with black bold font
+- **That's it — 3 blues + 1 grey + white.** Resist the urge to add more.
+- User-provided templates or explicit color preferences ALWAYS override these defaults.
+
+**How the layers work together:**
+- Input cell: Blue font + light grey fill = "Hardcoded input"
+- Formula cell: Black font + white background = "Calculated value"
+- Sheet link: Green font + white background = "Reference from another sheet"
+- Key output: Black bold font + medium blue fill = "This is the answer"
+
+**Font color tells you WHAT it is (input/formula/link). Fill color tells you WHERE you are (header/data/output).**
+
+### Border Standards (REQUIRED for Professional Appearance)
+
+**Thick borders** (1.5pt) around major sections:
+- KEY INPUTS section
+- PROJECTION ASSUMPTIONS section
+- 5-YEAR CASH FLOW PROJECTION section
+- TERMINAL VALUE section
+- VALUATION SUMMARY section
+- Each SENSITIVITY ANALYSIS table
+
+**Medium borders** (1pt) between sub-sections:
+- Company Details vs Historical Performance
+- Growth Assumptions vs EBIT Margin vs FCF Parameters
+
+**Thin borders** (0.5pt) around data tables:
+- Scenario assumption tables (Bear | Base | Bull | Selected)
+- Historical vs projected financials matrix
+
+**No borders:** Individual cells within tables (keep clean, scannable)
+
+**Borders are mandatory** - models without professional borders are not client-ready.
+
+**Number Formats** (follows xlsx skill standards):
+- **Years**: Format as text strings (e.g., "2024" not "2,024")
+- **Percentages**: `0.0%` (one decimal place)
+- **Currency**: `$#,##0` for millions; `$#,##0.00` for per-share - ALWAYS specify units in headers ("Revenue ($mm)")
+- **Zeros**: Use number formatting to make all zeros "-" (e.g., `$#,##0;($#,##0);-`)
+- **Large numbers**: `#,##0` with thousands separator
+- **Negative numbers**: `(#,##0)` in parentheses (NOT minus sign)
+
+**Cell Comments (MANDATORY for all hardcoded inputs)**:
+
+Per the xlsx skill, ALL hardcoded values must have cell comments documenting the source. Format: "Source: [System/Document], [Date], [Reference], [URL if applicable]"
+
+**CRITICAL**: Add comments AS CELLS ARE CREATED. Do not defer to the end.
+
+### DCF Sheet Detailed Structure
+
+**Section 1: Header**
+```csv
+Row,Content
+1,[Company Name] DCF Model
+2,Ticker: [XXX] | Date: [Date] | Year End: [FYE]
+3,Blank
+4,Case Selector Cell (1=Bear 2=Base 3=Bull)
+5,Case Name Display (formula: =IF([Selector]=1"Bear"IF([Selector]=2"Base""Bull")))
+```
+
+**Section 2: Market Data (NOT case dependent)**
+```csv
+Item,Value
+Current Stock Price,$XX.XX
+Shares Outstanding (M),XX.X
+Market Cap ($M),[Formula]
+Net Debt ($M),XXX [or Net Cash if negative]
+```
+
+**Section 3: DCF Scenario Assumptions**
+
+Create separate assumption blocks for each scenario (Bear, Base, Bull) with DCF-specific assumptions (Revenue Growth %, EBIT Margin %, Tax Rate %, D&A % of Revenue, CapEx % of Revenue, NWC Change % of ΔRev, Terminal Growth Rate, WACC) laid out horizontally across projection years. Each block must include section header, column header row showing the projection years (FY1, FY2, etc.), and data rows. See `` section "Correct Assumption Table Structure" for the exact layout.
+
+**Section 4: Historical & Projected Financials**
+
+**Reference a consolidation column (e.g., "Selected Case") that pulls from scenario blocks**, not scattered IF formulas in every projection row.
+
+```csv
+Income Statement ($M),2020A,2021A,2022A,2023A,2024E,2025E,2026E
+Revenue,XXX,XXX,XXX,XXX,[=E29*(1+$E$10)],[=F29*(1+$E$11)],[=G29*(1+$E$12)]
+ % growth,XX%,XX%,XX%,XX%,[=E29/D29-1],[=F29/E29-1],[=G29/F29-1]
+,,,,,,
+Gross Profit,XXX,XXX,XXX,XXX,[=E29*E33],[=F29*F33],[=G29*G33]
+ % margin,XX%,XX%,XX%,XX%,[=E33/E29],[=F33/F29],[=G33/G29]
+,,,,,,
+Operating Expenses:,,,,,,,
+ S&M,XXX,XXX,XXX,XXX,[=E29*0.15],[=F29*0.14],[=G29*0.13]
+ R&D,XXX,XXX,XXX,XXX,[=E29*0.12],[=F29*0.11],[=G29*0.10]
+ G&A,XXX,XXX,XXX,XXX,[=E29*0.08],[=F29*0.07],[=G29*0.07]
+ Total OpEx,XXX,XXX,XXX,XXX,[=E36+E37+E38],[=F36+F37+F38],[=G36+G37+G38]
+,,,,,,
+EBIT,XXX,XXX,XXX,XXX,[=E33-E39],[=F33-F39],[=G33-G39]
+ % margin,XX%,XX%,XX%,XX%,[=E41/E29],[=F41/F29],[=G41/G29]
+,,,,,,
+Taxes,(XX),(XX),(XX),(XX),[=E41*$E$24],[=F41*$E$24],[=G41*$E$24]
+ Tax rate,XX%,XX%,XX%,XX%,[=E43/E41],[=F43/F41],[=G43/G41]
+,,,,,,
+NOPAT,XXX,XXX,XXX,XXX,[=E41-E43],[=F41-F43],[=G41-G43]
+```
+
+**Key Formula Pattern**:
+- Revenue growth: `=E29*(1+$E$10)` where $E$10 is consolidation column for Year 1 growth
+- NOT: `=E29*(1+IF($B$6=1,$B$10,IF($B$6=2,$C$10,$D$10)))`
+
+This approach is cleaner, easier to audit, and prevents formula errors by centralizing the scenario logic.
+
+**Section 5: Free Cash Flow Build**
+
+**CRITICAL**: Verify row references point to the CORRECT assumption rows. Test formulas immediately after creation.
+
+```csv
+Cash Flow ($M),2020A,2021A,2022A,2023A,2024E,2025E,2026E
+NOPAT,XXX,XXX,XXX,XXX,[=E45],[=F45],[=G45]
+(+) D&A,XXX,XXX,XXX,XXX,[=E29*$E$21],[=F29*$E$21],[=G29*$E$21]
+ % of Rev,XX%,XX%,XX%,XX%,[=E58/E29],[=F58/F29],[=G58/G29]
+(-) CapEx,(XX),(XX),(XX),(XX),[=E29*$E$22],[=F29*$E$22],[=G29*$E$22]
+ % of Rev,XX%,XX%,XX%,XX%,[=E60/E29],[=F60/F29],[=G60/G29]
+(-) Δ NWC,(XX),(XX),(XX),(XX),[=(E29-D29)*$E$23],[=(F29-E29)*$E$23],[=(G29-F29)*$E$23]
+ % of Δ Rev,XX%,XX%,XX%,XX%,[=E62/(E29-D29)],[=F62/(F29-E29)],[=G62/(G29-F29)]
+,,,,,,
+Unlevered FCF,XXX,XXX,XXX,XXX,[=E57+E58-E60-E62],[=F57+F58-F60-F62],[=G57+G58-G60-G62]
+```
+
+**Row reference examples** (based on layout planning):
+- $E$21 = D&A % assumption (consolidation column, row 21)
+- $E$22 = CapEx % assumption (consolidation column, row 22)
+- $E$23 = NWC % assumption (consolidation column, row 23)
+- E29 = Revenue for year (row 29)
+- E45 = NOPAT for year (row 45)
+
+**Before writing formulas**: Confirm these row numbers match the actual layout. Test one column, then copy across.
+
+**Section 6: Discounting & Valuation**
+```csv
+DCF Valuation,2024E,2025E,2026E,2027E,2028E,Terminal
+Unlevered FCF ($M),XXX,XXX,XXX,XXX,XXX,
+Period,0.5,1.5,2.5,3.5,4.5,
+Discount Factor,0.XX,0.XX,0.XX,0.XX,0.XX,
+PV of FCF ($M),XXX,XXX,XXX,XXX,XXX,
+,,,,,,
+Terminal FCF ($M),,,,,,,XXX
+Terminal Value ($M),,,,,,,XXX
+PV Terminal Value ($M),,,,,,,XXX
+,,,,,,
+Valuation Summary ($M),,,,,,
+Sum of PV FCFs,XXX,,,,,
+PV Terminal Value,XXX,,,,,
+Enterprise Value,XXX,,,,,
+(-) Net Debt,(XX),,,,,
+Equity Value,XXX,,,,,
+,,,,,,
+Shares Outstanding (M),XX.X,,,,,
+IMPLIED PRICE PER SHARE,$XX.XX,,,,,
+Current Stock Price,$XX.XX,,,,,
+Implied Upside/(Downside),XX%,,,,,
+```
+
+### WACC Sheet Structure
+
+```csv
+COST OF EQUITY CALCULATION,,
+Risk-Free Rate (10Y Treasury),X.XX%,[Yellow input]
+Beta (5Y monthly),X.XX,[Yellow input]
+Equity Risk Premium,X.XX%,[Yellow input]
+Cost of Equity,X.XX%,[Calculated blue]
+,,
+COST OF DEBT CALCULATION,,
+Credit Rating,AA-,[Yellow input]
+Pre-Tax Cost of Debt,X.XX%,[Yellow input]
+Tax Rate,XX.X%,[Link to DCF sheet]
+After-Tax Cost of Debt,X.XX%,[Calculated blue]
+,,
+CAPITAL STRUCTURE,,
+Current Stock Price,$XX.XX,[Link to DCF]
+Shares Outstanding (M),XX.X,[Link to DCF]
+Market Capitalization ($M),"X,XXX",[Calculated]
+,,
+Total Debt ($M),XXX,[Yellow input]
+Cash & Equivalents ($M),XXX,[Yellow input]
+Net Debt ($M),XXX,[Calculated]
+,,
+Enterprise Value ($M),"X,XXX",[Calculated]
+,,
+WACC CALCULATION,Weight,Cost,Contribution
+Equity,XX.X%,X.X%,X.XX%
+Debt,XX.X%,X.X%,X.XX%
+,,
+WEIGHTED AVERAGE COST OF CAPITAL,X.XX%,[Green output]
+```
+
+**Key WACC Formulas:**
+```
+Market Cap = Price × Shares
+Net Debt = Total Debt - Cash
+Enterprise Value = Market Cap + Net Debt
+Equity Weight = Market Cap / EV
+Debt Weight = Net Debt / EV
+WACC = (Cost of Equity × Equity Weight) + (After-tax Cost of Debt × Debt Weight)
+```
+
+### Sensitivity Analysis (Bottom of DCF Sheet)
+
+**TERMINOLOGY REMINDER**: "Sensitivity tables" = simple 2D grids with row headers, column headers, and formulas in each data cell. NOT Excel's "Data Table" feature (Data → What-If Analysis → Data Table). You will use openpyxl to write regular Excel formulas into each cell.
+
+**Location**: Rows 87+ on DCF sheet (NOT a separate sheet)
+
+**Three sensitivity tables, vertically stacked:**
+
+1. **WACC vs Terminal Growth** (rows 87-100) - 5x5 grid = 25 cells with formulas
+2. **Revenue Growth vs EBIT Margin** (rows 102-115) - 5x5 grid = 25 cells with formulas
+3. **Beta vs Risk-Free Rate** (rows 117-130) - 5x5 grid = 25 cells with formulas
+
+**Total formulas to write: 75** (this is required, not optional)
+
+**CRITICAL**: All sensitivity table cells must be populated programmatically with formulas using openpyxl. DO NOT use linear approximation shortcuts. DO NOT leave placeholder text or notes about manual steps. DO NOT rationalize leaving cells empty because "it's complex" - use a Python loop to generate the formulas.
+
+**Table Setup:**
+1. Create table structure with row/column headers (the assumption values to test)
+2. Populate EVERY data cell with a formula that:
+ - Uses the row header value (e.g., WACC = 9.0%)
+ - Uses the column header value (e.g., Terminal Growth = 3.0%)
+ - Recalculates the full DCF with those specific assumptions
+ - Returns the implied share price for that scenario
+3. All cells must contain working formulas when delivered
+4. Format cells with conditional formatting: Green scale for higher values, red scale for lower values
+5. Bold the base case cell
+6. Leave 1-2 blank rows between tables
+
+**No manual intervention required** - the sensitivity tables must be fully functional when the user opens the file.
+
+## Case Selector Implementation
+
+**Three-Case Framework:**
+
+### Bear Case
+- Conservative revenue growth (low end of historical range)
+- Margin compression or no expansion
+- Higher WACC (risk premium increase)
+- Lower terminal growth rate
+- Higher CapEx assumptions
+
+### Base Case
+- Consensus or management guidance revenue growth
+- Moderate margin expansion based on operating leverage
+- Current market-implied WACC
+- GDP-aligned terminal growth (2.5-3.0%)
+- Standard CapEx assumptions
+
+### Bull Case
+- Optimistic revenue growth (high end of projections)
+- Significant margin expansion
+- Lower WACC (reduced risk premium)
+- Higher terminal growth (3.5-5.0%)
+- Reduced CapEx intensity
+
+**Formula Implementation:**
+
+**DO NOT use nested IF formulas scattered throughout.** Instead, create a consolidation column that uses INDEX or OFFSET formulas to pull from the appropriate scenario block.
+
+**Recommended pattern (using INDEX):**
+`=INDEX(B10:D10, 1, $B$6)` where `B10:D10` = Bear/Base/Bull values, `1` = row offset, `$B$6` = case selector cell (1, 2, or 3)
+
+**Then reference the consolidation column** in all projections:
+`Revenue Year 1: =D29*(1+$E$10)` where $E$10 is the consolidation column value for Year 1 growth.
+
+This approach centralizes scenario logic, making the model easier to audit and maintain.
+
+## Deliverables Structure
+
+**File naming**: `[Ticker]_DCF_Model_[Date].xlsx`
+
+**Two sheets**:
+1. **DCF** - Complete model with Bear/Base/Bull cases + three sensitivity tables at bottom (WACC vs Terminal Growth, Revenue Growth vs EBIT Margin, Beta vs Risk-Free Rate)
+2. **WACC** - Cost of capital calculation
+
+**Key features**: Case selector (1/2/3), consolidation column with INDEX/OFFSET formulas, color-coded cells, cell comments on all inputs, professional borders
+
+## Best Practices
+
+### Model Construction
+1. **Build incrementally**: Complete each section before moving to next
+2. **Test as building**: Enter sample numbers to verify formulas
+3. **Use consistent structure**: Similar calculations follow similar patterns
+4. **Comment complex formulas**: Add notes for unusual calculations
+5. **Build in checks**: Sum checks and balance checks where applicable
+
+### Documentation
+1. **Document all assumptions**: Explain reasoning behind key inputs
+2. **Cite data sources**: Note where each data point came from
+3. **Explain methodology**: Describe any non-standard approaches
+4. **Flag uncertainties**: Highlight areas with limited visibility
+
+### Quality Control
+1. **Cross-check calculations**: Verify math in multiple ways
+2. **Stress test assumptions**: Run sensitivity to ensure model is robust
+3. **Peer review**: Have someone else check formulas
+4. **Version control**: Save versions as work progresses
+
+## Common Variations
+
+### High-Growth Technology Companies
+- Longer projection period (7-10 years)
+- Higher initial growth rates (20-30%)
+- Significant margin expansion over time
+- Higher WACC (12-15%)
+- Model unit economics (users, ARPU, etc.)
+
+### Mature/Stable Companies
+- Shorter projection period (3-5 years)
+- Modest growth rates (GDP +1-3%)
+- Stable margins
+- Lower WACC (7-9%)
+- Focus on cash generation and capital allocation
+
+### Cyclical Companies
+- Model through economic cycle
+- Normalize margins at mid-cycle
+- Consider trough and peak scenarios
+- Adjust beta for cyclicality
+
+### Multi-Segment Companies
+- Separate DCFs for each business unit
+- Different growth rates and margins by segment
+- Sum-of-parts valuation
+- Consider synergies
+
+## Troubleshooting
+
+**If you encounter errors or unreasonable results, read [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) for detailed debugging guidance.**
+
+## Workflow Integration
+
+### At Start of DCF Build
+
+1. **Gather market data**:
+ - Check for available MCP servers for current market data
+ - Use web search/fetch for stock prices, beta, and other market metrics
+ - Request from user if specific data is needed
+
+2. **Gather historical financials**:
+ - Check for available MCP servers (Daloopa, etc.)
+ - Request from user if not available via MCP
+ - Manual extraction from 10-Ks if necessary
+
+3. **Begin model construction** using the DCF methodology detailed in this skill
+
+### During Model Construction
+
+1. **Build Excel model** using openpyxl with formulas (not hardcoded values)
+2. **Follow xlsx skill conventions** for formula construction and formatting
+3. **Apply fill colors only if requested** by user or if specific brand guidelines are provided
+
+### Before Delivering Model (MANDATORY)
+
+1. **Verify structure**:
+ - Scenario blocks for Bear/Base/Bull with assumptions across projection years
+ - Case selector functional with formulas referencing correct scenario blocks
+ - Sensitivity tables at bottom of DCF sheet (not separate sheet)
+ - Font colors: Blue inputs, black formulas, green sheet links
+ - Cell comments on ALL hardcoded inputs
+ - Professional borders around major sections
+
+2. **Recalculate formulas**: Run `python scripts/recalc.py model.xlsx 30`
+
+3. **Check output**:
+ - If `status` is `"success"` → Continue to step 4
+ - If `status` is `"errors_found"` → Check `error_summary` and read [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) for debugging guidance
+
+4. **Fix errors and re-run recalc.py** until status is "success"
+
+5. **Spot-check formulas**:
+ - Test one FCF formula - does it reference the correct assumption rows?
+ - Change case selector - does the consolidation column update properly?
+ - Verify revenue formulas reference consolidation column (not nested IF formulas)
+
+6. **Deliver model**
+
+### Available Data Sources
+
+- **MCP servers**: If configured (Daloopa for historical financials)
+- **Web search/fetch**: For current stock prices, beta, and market data
+- **User-provided data**: Historical financials, consensus estimates
+- **Manual extraction**: SEC EDGAR filings as fallback
+
+## Final Output Checklist
+
+Before delivering DCF model:
+
+**Required:**
+- Run `python scripts/recalc.py model.xlsx 30` until status is "success" (zero formula errors)
+- Two sheets: DCF (with sensitivity at bottom), WACC
+- Font colors: Blue=inputs, Black=formulas, Green=sheet links
+- Cell comments on ALL hardcoded inputs
+- Sensitivity tables fully populated with formulas
+- Professional borders around major sections
+
+**Validation:**
+- OpEx based on revenue (not gross profit)
+- Terminal value 50-70% of EV
+- Terminal growth < WACC
+- Tax rate 21-28%
+- File naming: `[Ticker]_DCF_Model_[Date].xlsx`
+## Data sources (Rebyte)
+
+This deployment is wired to the Rebyte Financial Data Service (see the sibling `data` skill for auth and query mechanics) instead of MCP financial-data servers.
+
+- **Historical financials (3–5y)** — `us.fundamentals` via `financial/sql` (income + cashflow + balance columns per filing period). CN targets: `cn.income` / `cn.cashflow` / `cn.balancesheet`.
+- **Current price / shares / market cap** — `stocks/bars` or `us.eod` latest close; `stocks/details` for shares outstanding and market cap.
+- **Net debt** (equity bridge, WACC weights) — latest-period balance-sheet columns in `us.fundamentals`.
+- **Beta** — compute from 5y monthly returns via `us.eod` (stock vs SPY).
+- **Cost of debt** — interest expense ÷ total debt from `us.fundamentals`.
+- **Splits / dividends adjustments** — `stocks/splits`, `stocks/dividends`.
+- **Not available** (must come from the user or web): current 10-Y Treasury yield (risk-free rate), equity risk premium, analyst consensus growth, credit ratings.
diff --git a/dcf-model/TROUBLESHOOTING.md b/dcf-model/TROUBLESHOOTING.md
new file mode 100644
index 0000000..eb46365
--- /dev/null
+++ b/dcf-model/TROUBLESHOOTING.md
@@ -0,0 +1,40 @@
+# DCF Model Troubleshooting Guide
+
+**When to read this file:** If recalc.py shows errors OR valuation results seem unreasonable OR case selector not working properly.
+
+## Model Returns Error Values
+
+### #REF! Errors
+- Usually caused by formulas referencing wrong rows after headers were inserted
+- Solution: Rebuild with correct row references, or start over following layout planning
+- Prevention: Define all row positions BEFORE writing formulas
+
+### #DIV/0! Errors
+- Division by zero or empty cells
+- Solution: Add IF statements to handle zeros: `=IF([Divisor]=0,0,[Numerator]/[Divisor])`
+
+### #VALUE! Errors
+- Wrong data type in calculation (text instead of number)
+- Solution: Verify all inputs are formatted as numbers
+
+## Valuation Seems Unreasonable
+
+### Implied price far too high
+- Check terminal value isn't >80% of EV
+- Verify terminal growth < WACC
+- Review if growth assumptions are realistic
+- Consider if margins are too optimistic
+
+### Implied price far too low
+- Verify net debt vs net cash is correct
+- Check if WACC is too high
+- Review if projections are too conservative
+- Consider if terminal growth is too low
+
+## Case Selector Not Working
+
+### Consolidation column not updating when switching scenarios
+- Verify case selector cell contains 1, 2, or 3
+- Check INDEX/OFFSET formulas reference correct row range and selector cell
+- Ensure absolute references ($B$6) are used for selector
+- Test by manually changing the selector cell and verifying projection values update
diff --git a/dcf-model/requirements.txt b/dcf-model/requirements.txt
new file mode 100644
index 0000000..0040dc4
--- /dev/null
+++ b/dcf-model/requirements.txt
@@ -0,0 +1,7 @@
+# DCF Model Builder - Python Dependencies
+
+# Excel file handling
+openpyxl>=3.0.0
+
+# HTTP requests
+requests>=2.28.0
diff --git a/dcf-model/scripts/recalc.py b/dcf-model/scripts/recalc.py
new file mode 100644
index 0000000..5becd24
--- /dev/null
+++ b/dcf-model/scripts/recalc.py
@@ -0,0 +1,66 @@
+#!/usr/bin/env python3
+"""Recalculate the formulas in an .xlsx and write the cached values back.
+
+openpyxl writes formula *strings* (`=B5*B6`) but never evaluates them, so a
+freshly built workbook has no cached results — Excel shows the formulas but the
+values read as 0/blank until the file is opened in a spreadsheet app. This helper
+round-trips the file through LibreOffice headless, which recalculates on load and
+persists the computed values on save.
+
+Usage:
+ python3 scripts/recalc.py
+
+Requires LibreOffice (`soffice`) on PATH — present on the Rebyte VM. On a machine
+without it the script exits non-zero with a clear message instead of silently
+delivering an unrecalculated file.
+"""
+import os
+import shutil
+import subprocess
+import sys
+import tempfile
+
+
+def recalc(path: str) -> None:
+ soffice = shutil.which("soffice") or shutil.which("libreoffice")
+ if not soffice:
+ sys.exit(
+ "recalc.py: LibreOffice (soffice) not found on PATH.\n"
+ "Install it, or open the workbook once in Excel to cache values."
+ )
+ path = os.path.abspath(path)
+ if not os.path.isfile(path):
+ sys.exit(f"recalc.py: no such file: {path}")
+
+ with tempfile.TemporaryDirectory() as tmp:
+ # Converting to xlsx forces a recalc on load; the re-saved file carries
+ # the computed values. Use an isolated user profile so headless runs do
+ # not collide with a desktop LibreOffice session.
+ profile = os.path.join(tmp, "profile")
+ subprocess.run(
+ [
+ soffice,
+ "--headless",
+ "--calc",
+ f"-env:UserInstallation=file://{profile}",
+ "--convert-to",
+ "xlsx:Calc MS Excel 2007 XML",
+ "--outdir",
+ tmp,
+ path,
+ ],
+ check=True,
+ stdout=subprocess.DEVNULL,
+ stderr=subprocess.STDOUT,
+ )
+ out = os.path.join(tmp, os.path.basename(path))
+ if not os.path.isfile(out):
+ sys.exit("recalc.py: LibreOffice produced no output — recalc failed.")
+ shutil.move(out, path)
+ print(f"recalc.py: recalculated {path}")
+
+
+if __name__ == "__main__":
+ if len(sys.argv) != 2:
+ sys.exit("usage: recalc.py ")
+ recalc(sys.argv[1])
diff --git a/dcf-model/scripts/validate_dcf.py b/dcf-model/scripts/validate_dcf.py
new file mode 100644
index 0000000..6c8172c
--- /dev/null
+++ b/dcf-model/scripts/validate_dcf.py
@@ -0,0 +1,292 @@
+#!/usr/bin/env python3
+"""
+DCF Model Validation Script
+Validates Excel DCF models for formula errors and common DCF mistakes
+"""
+
+import sys
+import json
+from pathlib import Path
+from typing import Optional
+
+
+class DCFModelValidator:
+ """Validates DCF models for errors and quality issues"""
+
+ def __init__(self, excel_path: str):
+ try:
+ import openpyxl
+ except ImportError:
+ raise ImportError("openpyxl not installed. Run: pip install openpyxl")
+
+ self.excel_path = excel_path
+ self.openpyxl = openpyxl
+
+ if not Path(excel_path).exists():
+ raise FileNotFoundError(f"File not found: {excel_path}")
+
+ self.workbook_formulas = openpyxl.load_workbook(excel_path, data_only=False)
+ self.workbook_values = openpyxl.load_workbook(excel_path, data_only=True)
+ self.errors = []
+ self.warnings = []
+ self.info = []
+
+ def validate_all(self) -> dict:
+ """
+ Run all validation checks
+
+ Returns:
+ Dict with validation results
+ """
+ from datetime import datetime
+
+ self.check_sheet_structure()
+ self.check_formula_errors()
+ self.check_dcf_logic()
+
+ results = {
+ 'file': self.excel_path,
+ 'validation_date': datetime.now().isoformat(),
+ 'status': 'PASS' if len(self.errors) == 0 else 'FAIL',
+ 'error_count': len(self.errors),
+ 'warning_count': len(self.warnings),
+ 'errors': self.errors,
+ 'warnings': self.warnings,
+ 'info': self.info
+ }
+
+ return results
+
+ def check_sheet_structure(self):
+ """Verify required sheets exist"""
+ required_sheets = ['DCF', 'WACC', 'Sensitivity']
+ sheet_names = self.workbook_values.sheetnames
+
+ for sheet in required_sheets:
+ if sheet not in sheet_names:
+ self.warnings.append(f"Recommended sheet missing: {sheet}")
+ else:
+ self.info.append(f"Found sheet: {sheet}")
+
+ def check_formula_errors(self):
+ """Check for Excel formula errors in all sheets"""
+ excel_errors = ['#VALUE!', '#DIV/0!', '#REF!', '#NAME?', '#NULL!', '#NUM!', '#N/A']
+ error_details = {err: [] for err in excel_errors}
+ total_errors = 0
+ total_formulas = 0
+
+ for sheet_name in self.workbook_values.sheetnames:
+ ws_values = self.workbook_values[sheet_name]
+ ws_formulas = self.workbook_formulas[sheet_name]
+
+ for row in ws_values.iter_rows():
+ for cell in row:
+ formula_cell = ws_formulas[cell.coordinate]
+
+ # Count formulas
+ if formula_cell.value and isinstance(formula_cell.value, str) and formula_cell.value.startswith('='):
+ total_formulas += 1
+
+ # Check for errors
+ if cell.value is not None and isinstance(cell.value, str):
+ for err in excel_errors:
+ if err in cell.value:
+ location = f"{sheet_name}!{cell.coordinate}"
+ error_details[err].append(location)
+ total_errors += 1
+ self.errors.append(f"{err} at {location}")
+ break
+
+ # Add summary info
+ self.info.append(f"Total formulas: {total_formulas}")
+ if total_errors == 0:
+ self.info.append("✓ No formula errors found")
+ else:
+ self.errors.append(f"Total formula errors: {total_errors}")
+
+ return error_details, total_errors
+
+ def check_dcf_logic(self):
+ """Validate DCF-specific logic and calculations"""
+ self._check_terminal_growth_vs_wacc()
+ self._check_wacc_range()
+ self._check_terminal_value_proportion()
+
+ def _check_terminal_growth_vs_wacc(self):
+ """Critical check: Terminal growth must be less than WACC"""
+ try:
+ dcf_sheet = self.workbook_values['DCF']
+
+ terminal_growth = None
+ wacc = None
+
+ # Search for terminal growth and WACC values
+ for row in dcf_sheet.iter_rows(max_row=100, max_col=20):
+ for cell in row:
+ if cell.value and isinstance(cell.value, str):
+ cell_str = cell.value.lower()
+ if 'terminal' in cell_str and 'growth' in cell_str:
+ # Look for value in adjacent cells
+ for offset in range(1, 5):
+ adjacent = dcf_sheet.cell(cell.row, cell.column + offset).value
+ if isinstance(adjacent, (int, float)) and 0 < adjacent < 1:
+ terminal_growth = adjacent
+ break
+ if 'wacc' in cell_str and wacc is None:
+ for offset in range(1, 5):
+ adjacent = dcf_sheet.cell(cell.row, cell.column + offset).value
+ if isinstance(adjacent, (int, float)) and 0 < adjacent < 1:
+ wacc = adjacent
+ break
+
+ if terminal_growth is not None and wacc is not None:
+ if terminal_growth >= wacc:
+ self.errors.append(
+ f"CRITICAL: Terminal growth ({terminal_growth:.2%}) >= WACC ({wacc:.2%}). "
+ "This creates infinite value and is mathematically invalid."
+ )
+ else:
+ self.info.append(
+ f"✓ Terminal growth ({terminal_growth:.2%}) < WACC ({wacc:.2%})"
+ )
+ else:
+ self.warnings.append("Could not locate terminal growth and WACC values")
+
+ except KeyError:
+ self.warnings.append("DCF sheet not found")
+ except Exception as e:
+ self.warnings.append(f"Could not validate terminal growth vs WACC: {str(e)}")
+
+ def _check_wacc_range(self):
+ """Check if WACC is in reasonable range"""
+ try:
+ wacc_sheet = self.workbook_values.get('WACC') or self.workbook_values['DCF']
+ wacc = None
+
+ for row in wacc_sheet.iter_rows(max_row=100, max_col=20):
+ for cell in row:
+ if cell.value and isinstance(cell.value, str):
+ if 'wacc' in cell.value.lower():
+ for offset in range(1, 5):
+ adjacent = wacc_sheet.cell(cell.row, cell.column + offset).value
+ if isinstance(adjacent, (int, float)) and 0 < adjacent < 1:
+ wacc = adjacent
+ break
+
+ if wacc is not None:
+ if wacc < 0.05 or wacc > 0.20:
+ self.warnings.append(
+ f"WACC ({wacc:.2%}) is outside typical range (5%-20%). Verify calculation."
+ )
+ else:
+ self.info.append(f"✓ WACC ({wacc:.2%}) in reasonable range")
+ else:
+ self.warnings.append("Could not locate WACC value")
+
+ except Exception as e:
+ self.warnings.append(f"Could not validate WACC range: {str(e)}")
+
+ def _check_terminal_value_proportion(self):
+ """Check if terminal value is reasonable proportion of enterprise value"""
+ try:
+ dcf_sheet = self.workbook_values['DCF']
+
+ terminal_value = None
+ enterprise_value = None
+
+ for row in dcf_sheet.iter_rows(max_row=200, max_col=20):
+ for cell in row:
+ if cell.value and isinstance(cell.value, str):
+ cell_str = cell.value.lower()
+ if 'terminal' in cell_str and 'value' in cell_str and 'pv' in cell_str:
+ for offset in range(1, 5):
+ adjacent = dcf_sheet.cell(cell.row, cell.column + offset).value
+ if isinstance(adjacent, (int, float)) and adjacent > 0:
+ terminal_value = adjacent
+ break
+ if 'enterprise' in cell_str and 'value' in cell_str:
+ for offset in range(1, 5):
+ adjacent = dcf_sheet.cell(cell.row, cell.column + offset).value
+ if isinstance(adjacent, (int, float)) and adjacent > 0:
+ enterprise_value = adjacent
+ break
+
+ if terminal_value is not None and enterprise_value is not None and enterprise_value > 0:
+ proportion = terminal_value / enterprise_value
+ if proportion > 0.80:
+ self.warnings.append(
+ f"Terminal value is {proportion:.1%} of EV (typically should be 50-70%). "
+ "Model may be over-reliant on terminal assumptions."
+ )
+ elif proportion < 0.40:
+ self.warnings.append(
+ f"Terminal value is {proportion:.1%} of EV (typically should be 50-70%). "
+ "Check if terminal assumptions are too conservative."
+ )
+ else:
+ self.info.append(f"✓ Terminal value is {proportion:.1%} of EV")
+ else:
+ self.warnings.append("Could not locate terminal value and enterprise value")
+
+ except Exception as e:
+ self.warnings.append(f"Could not validate terminal value proportion: {str(e)}")
+
+
+
+def validate_dcf_model(excel_path: str) -> dict:
+ """
+ Validate a DCF model Excel file
+
+ Args:
+ excel_path: Path to Excel DCF model
+
+ Returns:
+ Dict with validation results
+ """
+ validator = DCFModelValidator(excel_path)
+ return validator.validate_all()
+
+
+def main():
+ """Command-line interface"""
+ if len(sys.argv) < 2:
+ print("Usage: python validate_dcf.py [output.json]")
+ print("\nValidates DCF model for:")
+ print(" - Formula errors (#REF!, #DIV/0!, etc.)")
+ print(" - Terminal growth < WACC (critical)")
+ print(" - WACC in reasonable range (5-20%)")
+ print(" - Terminal value proportion of EV (40-80%)")
+ print("\nReturns JSON with errors, warnings, and info")
+ print("\nExample: python validate_dcf.py model.xlsx")
+ print("Example: python validate_dcf.py model.xlsx results.json")
+ sys.exit(1)
+
+ excel_file = sys.argv[1]
+ output_file = sys.argv[2] if len(sys.argv) > 2 else None
+
+ try:
+ results = validate_dcf_model(excel_file)
+
+ # Print results
+ print(json.dumps(results, indent=2))
+
+ # Save to file if requested
+ if output_file:
+ with open(output_file, 'w') as f:
+ json.dump(results, f, indent=2)
+
+ # Exit with error code if validation failed
+ sys.exit(0 if results['status'] == 'PASS' else 1)
+
+ except Exception as e:
+ error_result = {
+ 'file': excel_file,
+ 'status': 'ERROR',
+ 'error': str(e)
+ }
+ print(json.dumps(error_result, indent=2))
+ sys.exit(1)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/dd-checklist/SKILL.md b/dd-checklist/SKILL.md
new file mode 100644
index 0000000..5360f16
--- /dev/null
+++ b/dd-checklist/SKILL.md
@@ -0,0 +1,117 @@
+---
+name: dd-checklist
+description: Generate and track comprehensive due diligence checklists tailored to the target company's sector, deal type, and complexity. Covers all major workstreams with request lists, status tracking, and red flag escalation. Use when kicking off diligence, organizing a data room review, or tracking outstanding items. Triggers on "dd checklist", "due diligence tracker", "diligence request list", "what do we still need", or "data room review".
+---
+
+# Due Diligence Checklist
+
+## Workflow
+
+### Step 1: Scope the Diligence
+
+Ask the user for:
+- **Target company**: Name, sector, business model
+- **Deal type**: Platform acquisition, add-on, growth equity, recap, carve-out
+- **Deal size / complexity**: Determines depth of diligence
+- **Key concerns**: Any known issues to prioritize (customer concentration, regulatory, environmental, etc.)
+- **Timeline**: When is LOI / close targeted?
+
+### Step 2: Generate Workstream Checklists
+
+Generate a checklist across all major workstreams, tailored to the sector:
+
+**Financial Due Diligence**
+- Quality of earnings (QoE) — revenue and EBITDA adjustments
+- Working capital analysis — normalized vs. actual
+- Debt and debt-like items
+- Capital expenditure (maintenance vs. growth)
+- Tax structure and exposure
+- Audit history and accounting policies
+- Pro forma adjustments (run-rate, synergies)
+
+**Commercial Due Diligence**
+- Market size and growth (TAM/SAM/SOM)
+- Competitive positioning and market share
+- Customer analysis — concentration, retention, NPS
+- Pricing power and contract structure
+- Sales pipeline and backlog
+- Go-to-market effectiveness
+
+**Legal Due Diligence**
+- Corporate structure and org chart
+- Material contracts (customer, supplier, partnership)
+- Litigation history and pending claims
+- IP portfolio and protection
+- Regulatory compliance
+- Employment agreements and non-competes
+
+**Operational Due Diligence**
+- Management team assessment
+- Organizational structure and key person risk
+- IT systems and infrastructure
+- Supply chain and vendor dependencies
+- Facilities and real estate
+- Insurance coverage
+
+**HR / People Due Diligence**
+- Org chart and headcount trends
+- Compensation benchmarking
+- Benefits and pension obligations
+- Key employee retention risk
+- Culture assessment
+- Union/labor agreements
+
+**IT / Technology Due Diligence** (for tech-enabled businesses)
+- Technology stack and architecture
+- Technical debt assessment
+- Cybersecurity posture
+- Data privacy compliance (GDPR, CCPA, SOC2)
+- Product roadmap and R&D spend
+- Scalability assessment
+
+**Environmental / ESG** (where applicable)
+- Environmental liabilities
+- Regulatory compliance history
+- ESG risks and opportunities
+
+### Step 3: Status Tracking
+
+For each item, track:
+
+| Item | Workstream | Priority | Status | Owner | Notes |
+|------|-----------|----------|--------|-------|-------|
+| QoE report | Financial | P0 | Pending | | |
+| Customer interviews | Commercial | P0 | In Progress | | 3 of 10 complete |
+
+Status options: Not Started → Requested → Received → In Review → Complete → Red Flag
+
+### Step 4: Red Flag Summary
+
+Maintain a running list of red flags discovered during diligence:
+- What was found
+- Which workstream
+- Severity (deal-breaker / significant / manageable)
+- Mitigant or path to resolution
+- Impact on valuation or deal terms
+
+### Step 5: Output
+
+- Excel workbook with tabs per workstream (default)
+- Summary dashboard: % complete by workstream, outstanding items, red flags
+- Weekly status update format for deal team
+
+## Sector-Specific Additions
+
+Automatically add relevant items based on sector:
+- **Software/SaaS**: ARR quality, cohort analysis, hosting costs, SOC2
+- **Healthcare**: Regulatory approvals, reimbursement risk, payor mix
+- **Industrial**: Equipment condition, environmental remediation, safety record
+- **Financial services**: Regulatory capital, compliance history, credit quality
+- **Consumer**: Brand health, channel mix, seasonality, inventory management
+
+## Important Notes
+
+- Prioritize P0 items that are gating to LOI or close
+- Flag items where the seller is slow to respond — may indicate issues
+- Cross-reference data room contents against the checklist to identify gaps
+- Update the checklist as diligence progresses — it's a living document
diff --git a/dd-meeting-prep/SKILL.md b/dd-meeting-prep/SKILL.md
new file mode 100644
index 0000000..4e5ffb6
--- /dev/null
+++ b/dd-meeting-prep/SKILL.md
@@ -0,0 +1,103 @@
+---
+name: dd-meeting-prep
+description: Prepare for due diligence meetings — management presentations, expert network calls, customer references, and advisor sessions. Generates targeted question lists, benchmarks to reference, and red flags to probe. Use before any diligence meeting or call. Triggers on "prep for management meeting", "diligence call prep", "expert call questions", "customer reference questions", or "meeting prep for [company]".
+---
+
+# Diligence Meeting Prep
+
+## Workflow
+
+### Step 1: Meeting Context
+
+Ask the user for:
+- **Meeting type**: Management presentation, expert call, customer reference, advisor check-in, site visit
+- **Attendees**: Who from the target company or third party
+- **Topic focus**: Full business overview, or specific workstream (financial, commercial, operational, tech)
+- **What you already know**: Prior meetings, CIM, data room findings
+- **Key concerns**: Specific issues to probe
+
+### Step 2: Generate Question List
+
+Organize questions by priority and topic. Structure depends on meeting type:
+
+#### Management Presentation
+**Business Overview (warm-up)**
+- Walk us through the founding story and key milestones
+- How do you describe the business to someone unfamiliar with the space?
+- What are you most proud of? What would you do differently?
+
+**Revenue & Growth**
+- Walk us through revenue by customer/segment/geography
+- What's driving growth? Price vs. volume vs. new customers
+- What does the sales cycle look like? How has win rate trended?
+- Where do you see the biggest growth opportunities in the next 3-5 years?
+
+**Competitive Positioning**
+- Who do you lose deals to and why?
+- What's your moat? How defensible is it?
+- How do customers evaluate you vs. alternatives?
+
+**Operations & Team**
+- Walk us through the org chart — who are the key people?
+- What roles are you hiring for? What's been hardest to fill?
+- What keeps you up at night operationally?
+
+**Financial Deep-Dive**
+- Walk us through the margin bridge — what's changed and why?
+- Any one-time or non-recurring items we should understand?
+- How do you think about capex — maintenance vs. growth?
+- Working capital seasonality?
+
+**Forward Look**
+- Walk us through the budget/plan for next year
+- What assumptions are you most/least confident in?
+- What would need to go right/wrong to significantly beat/miss plan?
+
+#### Expert Network Call
+- How do you view [company]'s positioning in the market?
+- What are the secular trends driving this space?
+- Who are the strongest competitors and why?
+- What risks should an investor be aware of?
+- If you were buying this business, what would you diligence most carefully?
+
+#### Customer Reference Call
+- How did you find [company] and why did you choose them?
+- What alternatives did you evaluate?
+- What do they do well? Where could they improve?
+- How likely are you to renew/expand? What would change that?
+- If they raised prices 10-20%, how would you react?
+
+### Step 3: Benchmarks & Context
+
+For each key topic, provide relevant benchmarks:
+- Industry growth rates and margin profiles
+- Comparable company metrics (if comps analysis exists in session)
+- Data points from the CIM or data room that warrant follow-up
+- Discrepancies between different data sources to clarify
+
+### Step 4: Red Flags to Probe
+
+Based on what's known, flag specific areas to dig into:
+- Inconsistencies in the CIM or financials
+- Customer concentration or churn signals
+- Management team gaps or recent departures
+- Unusual accounting treatments
+- Missing data room items
+
+### Step 5: Output
+
+One-page meeting prep doc:
+1. **Meeting logistics**: Who, when, where, duration
+2. **Objectives**: Top 3 things you need to learn from this meeting
+3. **Question list**: Prioritized, grouped by topic (star the must-asks)
+4. **Benchmarks**: Key numbers to reference
+5. **Red flags**: Specific items to probe
+6. **Follow-up items**: What to request after the meeting
+
+## Important Notes
+
+- Lead with open-ended questions — let management talk, then follow up on specifics
+- Don't lead the witness — ask neutral questions, not "isn't it true that..."
+- Take notes on body language and confidence levels, not just answers
+- Always end with: "What haven't we asked about that we should?"
+- Keep the question list to 15-20 max — you won't get through more in a 60-90 min session
diff --git a/deal-screening/SKILL.md b/deal-screening/SKILL.md
new file mode 100644
index 0000000..a9bd8da
--- /dev/null
+++ b/deal-screening/SKILL.md
@@ -0,0 +1,60 @@
+---
+name: deal-screening
+description: Quickly screen inbound deal flow — CIMs, teasers, and broker materials — against the fund's investment criteria. Extracts key deal metrics, runs a pass/fail framework, and outputs a one-page screening memo. Use when reviewing new deal flow, triaging inbound materials, or deciding whether to take a first call. Triggers on "screen this deal", "review this CIM", "should we look at this", "triage this teaser", or "deal screening".
+---
+
+# Deal Screening
+
+## Workflow
+
+### Step 1: Extract Deal Facts
+
+From the provided CIM, teaser, or description, extract:
+
+- **Company**: Name, location, sector/subsector
+- **Description**: What they do (1-2 sentences)
+- **Financials**: Revenue, EBITDA, margins, growth rate
+- **Deal type**: Platform, add-on, recap, minority, carve-out
+- **Asking price / valuation**: Multiple, enterprise value if stated
+- **Seller motivation**: Why selling now
+- **Management**: Rolling or exiting
+- **Key customers**: Concentration risk
+- **Key risks**: Obvious red flags
+
+### Step 2: Screen Against Criteria
+
+Apply the fund's investment criteria (ask user if not known):
+
+| Criterion | Target | Actual | Pass/Fail |
+|-----------|--------|--------|-----------|
+| Revenue range | | | |
+| EBITDA range | | | |
+| EBITDA margin | | | |
+| Growth profile | | | |
+| Sector fit | | | |
+| Geography | | | |
+| Deal size / EV | | | |
+| Valuation (x EBITDA) | | | |
+| Customer concentration | | | |
+| Management continuity | | | |
+
+### Step 3: Quick Assessment
+
+Provide a 3-part assessment:
+
+1. **Verdict**: Pass / Further Diligence / Hard Pass
+2. **Bull case** (2-3 bullets): Why this could be a good deal
+3. **Bear case** (2-3 bullets): Key risks and concerns
+4. **Key questions**: What you'd need to answer on a first call
+
+### Step 4: Output
+
+One-page screening memo suitable for sharing with partners or an IC quick screen.
+
+## Important Notes
+
+- Speed matters — screening should take minutes, not hours
+- Be direct about red flags. Don't bury concerns
+- If financials seem inconsistent or incomplete, flag it explicitly
+- Ask for the fund's criteria upfront if this is the first screening
+- Save screening criteria in memory for future deals once confirmed
diff --git a/deal-tracker/SKILL.md b/deal-tracker/SKILL.md
new file mode 100644
index 0000000..753077b
--- /dev/null
+++ b/deal-tracker/SKILL.md
@@ -0,0 +1,90 @@
+---
+name: deal-tracker
+description: Track multiple live deals with milestones, deadlines, action items, and status updates. Maintains a deal pipeline view and surfaces upcoming deadlines and overdue items. Use when managing a book of business, tracking process milestones, or preparing for weekly deal reviews. Triggers on "deal tracker", "deal status", "where are we on", "process update", "deal pipeline", or "weekly deal review".
+---
+
+# Deal Tracker
+
+## Workflow
+
+### Step 1: Deal Setup
+
+For each deal, capture:
+- **Deal name / code name**: Project [Name]
+- **Client**: Seller or buyer name
+- **Deal type**: Sell-side, buy-side, financing, restructuring
+- **Role**: Lead advisor, co-advisor, fairness opinion
+- **Deal size**: Expected enterprise value
+- **Stage**: Pre-mandate → Engaged → Marketing → IOI → Diligence → Final bids → Signing → Close
+- **Team**: MD, VP, Associate, Analyst assigned
+- **Key dates**: Engagement date, CIM distribution, IOI deadline, management meetings, final bid deadline, target close
+
+### Step 2: Milestone Tracking
+
+Track key milestones per deal:
+
+| Milestone | Target Date | Actual Date | Status | Notes |
+|-----------|------------|-------------|--------|-------|
+| Engagement letter signed | | | | |
+| CIM / teaser drafted | | | | |
+| Buyer list approved | | | | |
+| Teaser distributed | | | | |
+| NDA execution | | | | |
+| CIM distributed | | | | |
+| IOI deadline | | | | |
+| IOIs received / reviewed | | | | |
+| Shortlist selected | | | | |
+| Management meetings | | | | |
+| Data room opened | | | | |
+| Final bid deadline | | | | |
+| Bids received / reviewed | | | | |
+| Exclusivity granted | | | | |
+| Confirmatory diligence | | | | |
+| Purchase agreement signed | | | | |
+| Regulatory approval | | | | |
+| Close | | | | |
+
+Status: On Track / At Risk / Delayed / Complete
+
+### Step 3: Action Items
+
+Maintain a running action item list across all deals:
+
+| Action | Deal | Owner | Due Date | Priority | Status |
+|--------|------|-------|----------|----------|--------|
+| | | | | P0/P1/P2 | Open/Done/Blocked |
+
+### Step 4: Weekly Deal Review
+
+Generate a summary for weekly team meetings:
+
+**For each active deal:**
+1. One-line status update
+2. Key developments this week
+3. Upcoming milestones (next 2 weeks)
+4. Blockers or risks
+5. Action items for next week
+
+**Pipeline summary:**
+- Total active deals by stage
+- Deals at risk (missed milestones, stalled processes)
+- New mandates / pitches in pipeline
+- Expected closings this quarter
+
+### Step 5: Output
+
+- Excel workbook with:
+ - Pipeline overview (all deals, one row each)
+ - Per-deal milestone tracker tabs
+ - Action item master list
+ - Weekly review summary
+- Optional: Markdown summary for email/Slack distribution
+
+## Important Notes
+
+- Update the tracker weekly at minimum — stale trackers are worse than no tracker
+- Flag deals where milestones are slipping — early warning prevents surprises
+- Action items without owners and due dates don't get done — be specific
+- The pipeline view should show deal stage, size, and likelihood — useful for revenue forecasting
+- Keep notes on buyer/investor feedback — patterns in feedback inform strategy adjustments
+- Archive closed/dead deals separately — keep the active view clean
diff --git a/deck-refresh/SKILL.md b/deck-refresh/SKILL.md
new file mode 100644
index 0000000..c24d112
--- /dev/null
+++ b/deck-refresh/SKILL.md
@@ -0,0 +1,111 @@
+---
+name: deck-refresh
+description: Updates a presentation with new numbers — quarterly refreshes, earnings updates, comp rolls, rebased market data. Use whenever the user asks to "update the deck with Q4 numbers", "refresh the comps", "roll this forward", "swap in the new earnings", "change all the $485M to $512M", or any request to swap figures across an existing deck without rebuilding it.
+---
+
+# Deck Refresh
+
+Update numbers across the deck. The deck is the source of truth for formatting; you're only changing values.
+
+## Environment check
+
+This skill works in both the PowerPoint add-in and chat. Identify which you're in before starting — the edit mechanism differs, the intent doesn't:
+
+- **Add-in** — the deck is open live; edit text runs, table cells, and chart data directly.
+- **Chat** — the deck is an uploaded file; edit it by regenerating the affected slides with the new values and writing the result back.
+
+Either way: smallest possible change, existing formatting stays intact.
+
+This is a four-phase process and the third phase is an approval gate. Don't edit until the user has seen the plan.
+
+## Phase 1 — Get the data
+
+Use `ask_user_question` to find out how the new numbers are arriving:
+
+- **Pasted mapping** — user types or pastes "revenue $485M → $512M, EBITDA $120M → $135M." The clearest case.
+- **Uploaded Excel** — old/new columns, or a fresh output sheet the user wants pulled from. Read it, confirm which column is which before you trust it.
+- **Just the new values** — "Q4 revenue was $512M, margins were 22%." You figure out what each one replaces. Workable, but confirm the mapping before you touch anything — a "$512M" that you map to revenue but the user meant for gross profit is a quiet disaster.
+
+Also ask about **derived numbers**: if revenue moves, does the user want growth rates and share percentages recalculated, or left alone? Most decks have "+15% YoY" baked in somewhere that's now stale. Whether to touch those is a judgment call the user should make, not you.
+
+## Phase 2 — Read everything, find everything
+
+Read every slide. For each old value, find every instance — including the ones that don't look the same:
+
+| Variant | Example |
+|---|---|
+| Scale | `$485M`, `$0.485B`, `$485,000,000` |
+| Precision | `$485M`, `$485.0M`, `~$485M` |
+| Unit style | `$485M`, `$485MM`, `$485 million`, `485M` |
+| Embedded | "revenue grew to $485M", "a $485M business", axis labels |
+
+A deck that says `$485M` on slide 3, `485` on slide 8's chart axis, and `$485.0 million` in a footnote on slide 15 has three instances of the same number. Find-replace misses two of them. You shouldn't.
+
+**Where numbers hide:**
+- Text boxes (obvious)
+- Table cells
+- Chart data labels and axis labels
+- Chart source data — the numbers driving the bars, not just the labels on them
+- Footnotes, source lines, small print
+- Speaker notes, if the user cares about those
+
+Build a list: for each old value, every location it appears, the exact text it appears as, and what it'll become. This list is the plan.
+
+## Phase 3 — Present the plan, get approval
+
+**This is a destructive operation on a deck someone spent time on.** Show the full change list before editing a single thing. Format it so it's scannable:
+
+```
+$485M → $512M (Revenue)
+ Slide 3 — Title box: "Revenue grew to $485M"
+ Slide 8 — Chart axis label: "485"
+ Slide 15 — Footnote: "$485.0 million in FY24 revenue"
+
+$120M → $135M (Adj. EBITDA)
+ Slide 3 — Table cell
+ Slide 11 — Body text: "$120M of Adj. EBITDA"
+
+FLAGGED — possibly derived, not in your mapping:
+ Slide 3 — "+15% YoY" (growth rate — stale if base year didn't change?)
+ Slide 7 — "12% market share" (was this computed from $485M / market size?)
+```
+
+The flagged section matters. You're not just executing a find-replace — you're catching the second-order effects the user would've missed at 11pm. If the mapping says `$485M → $512M` and slide 3 also has `+15% YoY` right next to it, that growth rate is probably wrong now. Flag it; don't silently fix it, don't silently leave it.
+
+Use `ask_user_question` for the approval: proceed as shown, proceed but skip the flagged items, or let them revise the mapping first.
+
+## Phase 4 — Execute, preserve, report
+
+For each change, make the smallest edit that accomplishes it. How that happens depends on your environment:
+
+- **Add-in** — edit the specific run, cell, or chart series directly in the live deck.
+- **Chat** — regenerate the affected slide with the new value in place, preserving every other element exactly as it was, and write it back to the file.
+
+Either way, the standard is the same:
+
+- **Text in a shape** — change the value, leave font/size/color/bold state exactly as they were. If `$485M` is 14pt navy bold inside a sentence, `$512M` is 14pt navy bold inside the same sentence.
+- **Table cell** — change the cell, leave the table alone.
+- **Chart data** — update the underlying series values so the bars/lines actually move. Editing just the label without the data leaves a chart that lies.
+
+Don't reformat anything you didn't need to touch. The deck's existing style is correct by definition; you're a surgeon, not a renovator.
+
+After the last edit, report what actually happened:
+
+```
+Updated 11 values across 8 slides.
+
+Changed:
+ [the list from Phase 3, now past-tense]
+
+Still flagged — did NOT change:
+ Slide 3 — "+15% YoY" (derived; confirm separately)
+ Slide 7 — "12% market share"
+```
+
+Run standard visual verification checks on every edited slide. A number that got longer (`$485M` → `$1,205M`) might now overflow its text box or push a table column width. Catch it before the user does.
+
+## What you're not doing
+
+- **Not rebuilding slides** — if a slide's narrative no longer makes sense with the new numbers ("margins compressed" but margins went up), flag it, don't rewrite it.
+- **Not recalculating unless asked** — derived numbers are the user's call. Your Phase 1 question covers this.
+- **Not touching formatting** — if the deck uses `$MM` and the user's mapping says `$M`, match the deck, not the mapping. Values change; style stays.
diff --git a/earnings-analysis/SKILL.md b/earnings-analysis/SKILL.md
new file mode 100644
index 0000000..7ee1b35
--- /dev/null
+++ b/earnings-analysis/SKILL.md
@@ -0,0 +1,239 @@
+---
+name: earnings-analysis
+description: Create professional equity research earnings update reports (8-12 pages, 3,000-5,000 words) analyzing quarterly results for companies already under coverage. Fast-turnaround format focusing on beat/miss analysis, key metrics, updated estimates, and revised thesis. Includes 1-3 summary tables and 8-12 charts. Use when user requests "earnings update", "quarterly update", "earnings analysis", "Q1/Q2/Q3/Q4 results", or post-earnings report.
+---
+
+# Equity Research Earnings Update
+
+Create professional **EARNINGS UPDATE REPORTS** analyzing quarterly results for companies already under coverage, following institutional standards (JPMorgan, Goldman Sachs, Morgan Stanley format).
+
+**Key Characteristics:**
+- **Length**: 8-12 pages
+- **Word Count**: 3,000-5,000 words
+- **Tables**: 1-3 summary tables (NOT comprehensive)
+- **Figures**: 8-12 charts
+- **Turnaround**: 1-2 days (within 24-48 hours of earnings)
+- **Audience**: Clients already familiar with the company
+- **Focus**: What's NEW - beat/miss, updated estimates, thesis impact
+- **Font**: Times New Roman throughout (unless user specifies otherwise)
+
+## When to Use
+
+Use when the user requests:
+- "Create an earnings update for [Company] Q3 2024"
+- "Analyze [Company]'s quarterly results"
+- "Post-earnings report for [Company]"
+- "Q1/Q2/Q3/Q4 update for [Company]"
+
+**Do NOT use if:**
+- User requests "initiation report" → Use different skill
+- User requests "flash note" or "quick take" → Different format
+- Company is not already covered → Need initiation first
+
+## Critical Requirements
+
+### 1. Speed & Timeliness
+- Publish within 24-48 hours of earnings release
+- Focus on NEW information only
+- Don't rehash company background extensively
+
+### 2. Beat/Miss Analysis
+- Lead with whether company beat or missed estimates
+- Quantify variances (e.g., "Revenue beat by $120M or 3%")
+- Explain WHY results differed from expectations
+
+### 3. Summary Format
+- Keep tables to 1-3 (summary only, not comprehensive)
+- No full P&L/Cash Flow/Balance Sheet (just key metrics)
+- Assume reader has seen initiation report
+
+### 4. Citations & Source Attribution ⭐⭐⭐ MANDATORY
+
+**CRITICAL**: Properly cite all data with SPECIFIC sources and CLICKABLE HYPERLINKS.
+
+**Include specific citations WITH CLICKABLE LINKS in every figure and table:**
+
+```
+Source: Q3 2024 10-Q filed November 8, 2024; Company earnings release
+ [Hyperlink "10-Q" to: https://www.sec.gov/cgi-bin/viewer?accession=...]
+ [Hyperlink "earnings release" to: https://investor.company.com/news/q3-2024]
+```
+
+**HOW HYPERLINKS SHOULD APPEAR IN WORD:**
+- Document names appear as blue, underlined clickable links
+- Reader can Ctrl+Click to open source directly
+- Not plain text URLs - formatted hyperlinks with display text
+
+**REQUIRED SOURCES LIST:**
+
+Cite in every earnings update:
+- ✅ Earnings release (with date and URL)
+- ✅ 10-Q filing (with filing date and EDGAR link)
+- ✅ Earnings call transcript (with date)
+- ✅ Investor presentation/supplemental materials (if available)
+- ✅ Consensus estimates source (Bloomberg/FactSet/etc. with date)
+- ✅ Prior guidance (from previous quarter's materials)
+
+**REFERENCE SECTION WITH CLICKABLE HYPERLINKS:**
+
+Include "Sources" section at end of report:
+
+```
+SOURCES & REFERENCES
+
+Earnings Materials (Q3 2024):
+• Earnings Release (November 7, 2024)
+ [Hyperlink entire line to: https://investor.company.com/news/q3-2024-earnings]
+
+• Form 10-Q (Filed November 8, 2024)
+ [Hyperlink to: https://www.sec.gov/cgi-bin/viewer?accession=...]
+
+• Earnings Call Transcript (November 7, 2024)
+ [Hyperlink to: https://seekingalpha.com/article/...]
+
+• Investor Presentation (November 7, 2024)
+ [Hyperlink to: https://investor.company.com/presentations/q3-2024.pdf]
+```
+
+**VERIFICATION CHECKLIST:**
+- [ ] Every figure has source with specific document and date
+- [ ] Every table has source with document reference
+- [ ] Beat/miss analysis cites consensus source with date
+- [ ] Guidance changes cite current and prior guidance sources
+- [ ] Key statistics have footnotes
+- [ ] Sources section lists all materials with URLs
+- [ ] ALL URLs are CLICKABLE HYPERLINKS (not plain text)
+- [ ] All SEC filings hyperlinked to EDGAR viewer
+
+### 5. Updated Estimates
+- Update forward estimates based on results
+- Show old vs. new estimates clearly
+- Explain what changed and why
+
+## High-Level Workflow
+
+The earnings update process follows 5 phases:
+
+### Phase 1: Data Collection (30-60 minutes)
+
+**🚨🚨🚨 CRITICAL: TRAINING DATA IS OUTDATED 🚨🚨🚨**
+
+**BEFORE STARTING - COMPLETE THESE 4 STEPS IN ORDER:**
+1. **CHECK TODAY'S DATE** - Write down the current date
+2. **SEARCH FOR LATEST** - Use web search: "[Company] latest earnings results"
+3. **VERIFY THE DATE** - Confirm earnings release is within last 3 months
+4. **CHECK TRANSCRIPT DATE** - Verify transcript date matches release date
+
+**COMMON MISTAKE**: Using outdated earnings calls from training data instead of searching for the latest.
+
+**REQUIREMENTS:**
+- ✅ Search for latest earnings - do NOT rely on training data
+- ✅ Write down today's date and the release date found
+- ✅ Verify release date is within 3 months of today
+- ✅ Verify transcript date matches release date
+- ✅ If dates don't match or are old (>3 months), search again
+
+**See [references/workflow.md](references/workflow.md)** for detailed search procedures and verification steps.
+
+### Phase 2: Analysis (2-3 hours)
+- Beat/miss analysis for each key metric
+- Segment/geographic/product breakdown
+- Margin and guidance analysis
+- Update financial model and estimates
+
+**See [references/workflow.md](references/workflow.md)** for detailed analysis framework.
+
+### Phase 3: Chart Generation (1-2 hours)
+Create 8-12 charts focusing on quarterly trends and what's new:
+- Quarterly revenue progression
+- Quarterly EPS progression
+- Quarterly margin trends
+- Revenue by segment/geography
+- Key operating metrics
+- Beat/miss summary
+- Estimate revisions
+- Valuation charts
+
+**See [references/workflow.md](references/workflow.md)** for chart specifications.
+
+### Phase 4: Report Creation (2-3 hours)
+Create 8-12 page DOCX report with specific structure.
+
+**See [references/report-structure.md](references/report-structure.md)** for complete page-by-page templates and formatting requirements.
+
+**High-level structure:**
+- Page 1: Earnings summary with rating and price target
+- Pages 2-3: Detailed results analysis
+- Pages 4-5: Key metrics & guidance
+- Pages 6-7: Updated investment thesis
+- Pages 8-10: Valuation & estimates
+- Pages 11-12: Appendix (optional)
+
+### Phase 5: Quality Check & Delivery (30 minutes)
+Verify content, formatting, accuracy, and timeliness before delivery.
+
+**See [references/best-practices.md](references/best-practices.md)** for quality checklist and common mistakes to avoid.
+
+## Output Specification
+
+**Primary Deliverable**: DOCX report (8-12 pages)
+**File Name**: `[Company]_Q[Quarter]_[Year]_Earnings_Update.docx`
+**Example**: `Nike_Q2_FY24_Earnings_Update.docx`
+
+**Contents:**
+- Page 1: Summary with rating, price target, key takeaways
+- Pages 2-3: Detailed results analysis
+- Pages 4-5: Key metrics and guidance
+- Pages 6-7: Updated thesis assessment
+- Pages 8-10: Valuation and estimates
+- Pages 11-12: Appendix (optional)
+- 8-12 embedded charts
+- 1-3 summary tables
+- Complete sources section with clickable hyperlinks
+
+**Optional Deliverable**: XLS model update (optional for earnings updates)
+
+## Key Differences from Initiation Report
+
+| Aspect | Earnings Update | Initiation Report |
+|--------|----------------|-------------------|
+| **Length** | 8-12 pages | 30-50 pages |
+| **Words** | 3,000-5,000 | 10,000-15,000 |
+| **Tables** | 1-3 summary | 12-20 comprehensive |
+| **Figures** | 8-12 | 25-35 |
+| **Turnaround** | 1-2 days | 3-6 weeks |
+| **Scope** | Quarterly results | Complete company |
+| **Focus** | What's NEW | Everything |
+| **Company Background** | Brief mention | 6-10 pages |
+| **XLS Model** | Optional | Required |
+
+## Resources
+
+### references/workflow.md
+Detailed Phase 1-5 instructions with step-by-step procedures for data collection, analysis, chart generation, and report creation.
+
+### references/report-structure.md
+Complete page-by-page templates, table formats, and formatting requirements for the DOCX report.
+
+### references/best-practices.md
+Examples of good/bad headlines, tips for success, common mistakes to avoid, and comprehensive quality checklist.
+
+## Dependencies
+
+**Required:**
+- Python (matplotlib, pandas, seaborn) for chart generation
+- DOCX skill for report creation
+
+**Optional:**
+- XLS skill for model updates (not required for earnings updates)
+
+## Data sources (Rebyte)
+
+This deployment is wired to the Rebyte Financial Data Service (see the sibling `data` skill for auth and query mechanics).
+
+- **Latest quarter actuals + history** — `stocks/financials` (freshest filing), backfilled by `us.fundamentals` via `financial/sql` (QoQ/YoY revenue, margins, EPS; 8–12 quarter trend charts). CN names: `cn.income` + `cn.fina_indicator`.
+- **Price reaction** — `us.bars_1m` / `us.eod` around the release date.
+- **Valuation charts** (P/E, EV/EBITDA) — `stocks/details` market cap × trailing `us.fundamentals`.
+- **Management commentary / guidance color** — `financial/search` semantic search over `us.news` around the release date; `stocks/news` for ticker-tagged headlines.
+- **Per-share integrity** — `stocks/splits`, `stocks/dividends`.
+- **Not available** (reframe or ask the user): analyst consensus (frame results vs your own prior model and vs prior-year, not vs Street), earnings-call transcripts, structured guidance history.
diff --git a/earnings-analysis/references/best-practices.md b/earnings-analysis/references/best-practices.md
new file mode 100644
index 0000000..3684a18
--- /dev/null
+++ b/earnings-analysis/references/best-practices.md
@@ -0,0 +1,248 @@
+# Best Practices, Examples, and Quality Guidelines
+
+This document provides examples, tips for success, common mistakes to avoid, and comprehensive quality checklists.
+
+## Example Headlines
+
+### Good Earnings Update Headlines:
+- "Nike Q2 FY24: DTC Strength Offsets Wholesale Weakness - Maintaining OW, PT $95"
+- "Tesla Q3'24: Cybertruck Ramp Ahead of Plan - Raising Estimates, PT to $285"
+- "LVMH Q4'24: Fashion & Leather Resilient, Wines Weak - In-Line, Reiterating Buy"
+- "Apple Q1 FY24: Services Beat, iPhone Miss - Mixed Quarter, Lowering PT to $185"
+
+### Bad Headlines (Avoid):
+- "Nike Quarterly Update" (too generic, no takeaway)
+- "Company Reports Earnings" (states obvious, no analysis)
+- "Q3 Results Analysis" (no company name, no view)
+
+## Tips for Success
+
+1. **Speed matters**: Published 24-48hrs post-earnings, not days later
+
+2. **Lead with conclusion**: Beat or miss? Up or down estimates?
+
+3. **Quantify everything**: "Strong" means nothing, "$150M beat on $1.2B revenue" is clear
+
+4. **Focus on drivers**: Don't just say "revenue beat", explain WHY
+
+5. **Show the work**: Old estimates → New estimates with reasons
+
+6. **Update price target if material**: If estimates change >5%, usually PT changes too
+
+7. **Acknowledge the call**: Reference management commentary, don't just analyze the press release
+
+8. **Compare to peers**: If similar companies reported, note relative performance
+
+9. **Be concise**: This is NOT a comprehensive report, stay focused on quarterly results
+
+10. **Chart the trends**: Quarterly progression charts are most valuable
+
+## Common Mistakes to Avoid
+
+❌ **Too comprehensive**: Don't write an initiation-length report for quarterly results
+
+❌ **Missing beat/miss**: Lead with whether results beat or missed expectations
+
+❌ **Not updating estimates**: Must provide updated forward estimates
+
+❌ **Vague language**: "Strong performance" without quantification
+
+❌ **Ignoring guidance**: If company guides, analyze it thoroughly
+
+❌ **Too slow**: Publishing 5+ days after earnings loses relevance
+
+❌ **Rehashing basics**: Don't spend 3 pages explaining what the company does
+
+❌ **Missing price target update**: If estimates changed materially, PT should too
+
+❌ **No investment impact**: Must connect results to thesis and rating
+
+❌ **Missing citations**: Every number needs a source with clickable hyperlinks
+
+❌ **Plain text URLs**: All URLs must be formatted as clickable hyperlinks
+
+## Comprehensive Quality Control Checklist
+
+Before delivering earnings update, verify all items below:
+
+### Content & Analysis Checklist
+
+**Beat/Miss Analysis:**
+- [ ] Beat/miss analysis leads the report
+- [ ] Specific variances quantified (e.g., "beat by $120M or 3%")
+- [ ] Explanation of WHY results differed from expectations
+- [ ] Analysis of each key metric (revenue, EPS, margins, etc.)
+
+**Metrics & Performance:**
+- [ ] All key metrics discussed with YoY comparisons
+- [ ] QoQ comparisons included where relevant
+- [ ] Segment/geographic/product breakdowns provided
+- [ ] Operating metrics analyzed (customers, ARPU, units, etc.)
+
+**Guidance & Estimates:**
+- [ ] Guidance changes analyzed and quantified (if provided)
+- [ ] If no guidance, this is explicitly noted
+- [ ] Updated estimates provided for current year
+- [ ] Updated estimates provided for next year
+- [ ] Old vs. new estimates clearly shown
+- [ ] Explanation of what changed and why
+
+**Valuation & Rating:**
+- [ ] Price target updated (if warranted by results)
+- [ ] If PT unchanged, explicitly maintained
+- [ ] Valuation methodology explained
+- [ ] Rating confirmed or changed with clear rationale
+- [ ] Investment thesis assessed and updated if needed
+
+### Format & Length Checklist
+
+**Overall Structure:**
+- [ ] Report is 8-12 pages (not shorter, not longer)
+- [ ] Page 1 has earnings summary format
+- [ ] Page 1 has "EARNINGS UPDATE" in title (NOT "Initiating Coverage")
+- [ ] Event-driven title (e.g., "Strong Q3 Results...")
+
+**Tables:**
+- [ ] 1-3 summary tables included (NOT comprehensive tables)
+- [ ] All tables have clear column headers
+- [ ] All tables have header row shading
+- [ ] All tables have source lines at bottom
+- [ ] Estimates table shows old vs. new with change column
+
+**Charts:**
+- [ ] 8-12 charts embedded throughout document
+- [ ] All charts have "Figure X - [Title]" caption above
+- [ ] All charts have "Source: [Source]" line below
+- [ ] Charts focus on quarterly trends
+- [ ] Charts highlight changes (beat/miss, revisions)
+- [ ] Charts use professional styling
+
+### Citations & Sources Checklist ⭐⭐⭐ MANDATORY
+
+**Figure & Table Citations:**
+- [ ] Every figure has specific source with document name and date
+- [ ] Every table has specific source with document reference
+- [ ] Source citations include page numbers or slide numbers where applicable
+
+**Beat/Miss Citations:**
+- [ ] Beat/miss analysis cites consensus source (Bloomberg, FactSet, etc.)
+- [ ] Consensus source includes "as of" date (pre-earnings close)
+- [ ] Company reported results cited to earnings release or 10-Q
+
+**Guidance Citations:**
+- [ ] Current guidance cited to earnings call transcript or release
+- [ ] Prior guidance cited to previous quarter's materials
+- [ ] Both current and prior guidance sources hyperlinked
+
+**Statistics & Metrics:**
+- [ ] Key statistics have footnotes with sources
+- [ ] Footnotes reference specific documents and page/slide numbers
+- [ ] Management quotes cite speaker name and source document
+
+**Hyperlinks:** ⭐⭐⭐ CRITICAL
+- [ ] ALL URLs are CLICKABLE HYPERLINKS (not plain text)
+- [ ] Hyperlinks formatted with meaningful display text
+- [ ] Blue, underlined hyperlink formatting in Word document
+- [ ] Hyperlinks tested and working (Ctrl+Click opens correct page)
+- [ ] All SEC filings hyperlinked to EDGAR viewer
+- [ ] All earnings materials hyperlinked (release, transcript, presentation)
+- [ ] Prior quarter materials hyperlinked for comparison
+- [ ] No raw URLs displayed anywhere in document
+
+**Sources Section:**
+- [ ] "Sources & References" section included at end of report
+- [ ] Section lists all earnings materials with dates
+- [ ] All materials have clickable hyperlinks
+- [ ] Consensus data sources listed (even if no link for subscription data)
+- [ ] Prior period references included
+
+### Accuracy Checklist
+
+**Numerical Accuracy:**
+- [ ] Numbers match company's reported results exactly
+- [ ] Math checks out in all calculations
+- [ ] Estimate changes calculated correctly
+- [ ] Valuation math is accurate
+- [ ] Charts match text descriptions
+
+**Factual Accuracy:**
+- [ ] No typos in ticker symbol
+- [ ] No typos in company name
+- [ ] Dates are current and accurate
+- [ ] Quarter/year references are correct
+- [ ] Year notation correct (A for actual, E for estimate)
+
+### Timeliness Checklist
+
+**Publication Timing:**
+- [ ] Report published within 24-48 hours of earnings release
+- [ ] If later than 48 hours, acknowledged as "delayed reaction"
+- [ ] ✅ **VERIFIED all data is from LATEST quarter by searching for recent earnings**
+- [ ] ✅ **Did NOT rely on knowledge cutoff - actively searched for current data**
+- [ ] Consensus estimates are pre-earnings (not post-earnings)
+- [ ] No outdated information included
+- [ ] Earnings release date is within last 1-3 months (not 6+ months old)
+
+### Writing Style Checklist
+
+**Clarity & Directness:**
+- [ ] Lead with numbers ("Revenue grew 15% to $1.2B" not "Strong revenue")
+- [ ] Use "vs." not "versus"
+- [ ] Be direct and concise throughout
+- [ ] Focus on what's NEW (not rehashing company basics)
+- [ ] Avoid vague language ("strong performance" without quantification)
+
+**Professional Standards:**
+- [ ] Institutional tone maintained
+- [ ] Consistent terminology throughout
+- [ ] No informal language
+- [ ] Proper financial notation
+
+## Pre-Delivery Final Check
+
+Run through this quick final check before sending report to user:
+
+### 5-Minute Final Review:
+1. **Page 1**: Rating clear? Price target updated? Key takeaways compelling?
+2. **Numbers**: Do reported results match company's press release exactly?
+3. **Citations**: Spot check 3-4 figures/tables - all have sources with clickable hyperlinks?
+4. **Estimates**: Old vs. new clearly shown? Changes explained?
+5. **Charts**: All 8-12 embedded? All numbered and captioned?
+6. **Length**: Is it 8-12 pages (not 6, not 15)?
+7. **Hyperlinks**: Test 3-4 hyperlinks - do they work with Ctrl+Click?
+8. **Timeliness**: Is this being published within 48 hours of earnings?
+
+If all items check out, the report is ready for delivery.
+
+## Summary Delivery Format
+
+When delivering the completed report to the user, provide this summary:
+
+```
+[Company] Q[X] [Year] Earnings Update Complete
+
+Results: [BEAT / INLINE / MISS]
+- Revenue: $X.XB ([beat/missed] by $XXM or X%)
+- EPS: $X.XX ([beat/missed] by $X.XX)
+
+Key Takeaways:
+■ [Takeaway 1]
+■ [Takeaway 2]
+■ [Takeaway 3]
+
+Updated Estimates:
+- FY[Year]E Revenue: $XX.XB (prior: $XX.XB, [+/-]X%)
+- FY[Year]E EPS: $X.XX (prior: $X.XX, [+/-]X%)
+
+Rating: [MAINTAINED / RAISED / LOWERED] [RATING]
+Price Target: $XXX (prior: $XXX) - [+/-]XX% upside
+
+Deliverables:
+✓ 8-12 page earnings update report (DOCX)
+✓ 8-12 embedded charts
+✓ Updated estimates with old/new comparison
+✓ Complete sources section with clickable hyperlinks
+✓ [Optional: Updated XLS financial model]
+
+File: [Company]_Q[X]_[Year]_Earnings_Update.docx
+```
diff --git a/earnings-analysis/references/report-structure.md b/earnings-analysis/references/report-structure.md
new file mode 100644
index 0000000..0dfdb2b
--- /dev/null
+++ b/earnings-analysis/references/report-structure.md
@@ -0,0 +1,368 @@
+# Report Structure and Templates
+
+This document provides complete page-by-page templates and formatting requirements for the earnings update DOCX report.
+
+## Complete Report Structure
+
+**REPORT STRUCTURE:**
+
+---
+
+## PAGE 1: EARNINGS SUMMARY
+
+**Top Section - Header:**
+```
+[COMPANY NAME] ([TICKER])
+[QUARTER] [YEAR] EARNINGS UPDATE
+
+[Current Date]
+
+Rating: [MAINTAIN/RAISE/LOWER] [RATING]
+Price (as of [date]): $XX.XX
+Price Target: [OLD → NEW if changed, or MAINTAIN $XXX]
+```
+
+**Top Section - Quick Summary Box:**
+```
+EARNINGS SUMMARY
+─────────────────────────────────────────────────
+Q[X] [YEAR] RESULTS: [BEAT / INLINE / MISS]
+
+ Reported Est Variance
+Revenue $X,XXX $X,XXX +$XXX (+X%)
+EPS (Adj) $X.XX $X.XX +$X.XX (+X%)
+
+Key Takeaways:
+■ [Takeaway 1 - one sentence]
+■ [Takeaway 2 - one sentence]
+■ [Takeaway 3 - one sentence]
+```
+
+**Main Content - Investment Impact (3-4 bullets):**
+
+Use ■ character with **bold headers** and paragraph-length explanations:
+
+```
+■ **Results beat on strong [segment/geography/product], maintaining positive momentum**
+
+Q[X] revenue of $X.XB exceeded our $X.XB estimate by X% and consensus by X%,
+driven primarily by [specific driver]. [Segment] revenue grew X% YoY (vs. our
+X% estimate), while [segment] grew X% (vs. X% estimate). Management highlighted
+[specific products/initiatives] as key growth drivers and maintained confident
+tone on outlook. The beat demonstrates [thesis point], reinforcing our positive
+view.
+
+■ **Margins expanded XXbps YoY despite [headwind], showcasing operational leverage**
+
+[Detailed margin analysis paragraph...]
+
+■ **Guidance raised / maintained / lowered - implies [interpretation]**
+
+[Detailed guidance analysis paragraph...]
+
+■ **Maintaining [RATING] with [raised/unchanged] $XXX price target**
+
+[Investment conclusion paragraph...]
+```
+
+**Bottom Section - Updated Estimates Table:**
+
+```
+UPDATED FINANCIAL ESTIMATES
+─────────────────────────────────────────────────────────────────
+ FY2024E (OLD) FY2024E (NEW) Change FY2025E (NEW)
+Revenue ($M) XX,XXX XX,XXX +X% XX,XXX
+Revenue Growth (%) X.X% X.X% +XXbps X.X%
+Gross Margin (%) XX.X% XX.X% +XXbps XX.X%
+EBITDA ($M) X,XXX X,XXX +X% X,XXX
+EBITDA Margin (%) XX.X% XX.X% +XXbps XX.X%
+EPS (Adjusted) ($) X.XX X.XX +X% X.XX
+P/E (x) XX.Xx XX.Xx -X% XX.Xx
+
+Note: "E" = Estimate. Old estimates from [prior report date].
+Source: Company data, [Firm Name] estimates.
+```
+
+---
+
+## PAGES 2-3: DETAILED RESULTS ANALYSIS
+
+Break down results by:
+
+### Revenue Analysis (1 page)
+- Total revenue beat/miss explanation
+- Segment/geographic/product breakdown
+- YoY and sequential trends
+- Comparison to guidance (if provided)
+
+**Table: Quarterly Revenue Progression**
+```
+ Q[X-3] Q[X-2] Q[X-1] Q[X] YoY Chg QoQ Chg
+Total Revenue ($M) X,XXX X,XXX X,XXX X,XXX +X% +X%
+ [Segment A] ($M) XXX XXX XXX XXX +X% +X%
+ [Segment B] ($M) XXX XXX XXX XXX +X% +X%
+ [Segment C] ($M) XXX XXX XXX XXX +X% +X%
+
+Note: Q[X] = [Quarter] [Year]
+Source: Company reports, [Firm Name] analysis
+```
+
+### Profitability Analysis (1 page)
+- Gross margin analysis (drivers, trends)
+- Operating margin analysis
+- Below-the-line items (interest, tax, etc.)
+- EPS reconciliation (adjusted vs. GAAP)
+
+**Table: Margin Analysis**
+```
+ Q[X-3] Q[X-2] Q[X-1] Q[X] YoY Chg
+Gross Margin (%) XX.X% XX.X% XX.X% XX.X% +XXbps
+Operating Margin (%) XX.X% XX.X% XX.X% XX.X% +XXbps
+Net Margin (%) XX.X% XX.X% XX.X% XX.X% +XXbps
+
+Key Drivers:
++ [Positive driver 1]
++ [Positive driver 2]
+- [Negative driver 1]
+- [Negative driver 2]
+```
+
+**Embed 2-3 charts on these pages:**
+- Chart 1: Quarterly revenue progression
+- Chart 2: Quarterly EPS progression
+- Chart 3: Margin trends
+
+---
+
+## PAGES 4-5: KEY METRICS & GUIDANCE
+
+### Business Metrics (1 page)
+- Customer count, ARPU, units, store count, etc.
+- Whatever metrics company emphasizes
+- Comparison to expectations
+- Trends and outlook
+
+**Table: Key Operating Metrics**
+```
+ Q[X-3] Q[X-2] Q[X-1] Q[X] YoY Chg Our Est Var
+[Metric 1] XXX XXX XXX XXX +X% XXX +X%
+[Metric 2] XXX XXX XXX XXX +X% XXX +X%
+[Metric 3] XXX XXX XXX XXX +X% XXX +X%
+
+Source: Company reports
+```
+
+### Guidance & Outlook (1 page)
+- What guidance was provided (if any)
+- Comparison to prior guidance
+- Comparison to Street estimates
+- Our assessment of achievability
+- Key assumptions
+
+**If guidance provided:**
+```
+MANAGEMENT GUIDANCE vs. ESTIMATES
+─────────────────────────────────────────────────────────────────
+ New Guidance Old Guidance Change Street
+FY2024E Revenue $XX-XXB $XX-XXB Raised $XX.XB
+FY2024E EPS $X.XX-X.XX $X.XX-X.XX Raised $X.XX
+
+Our Take: [Brief assessment of guidance]
+```
+
+**Embed 2-3 charts:**
+- Chart 4: Key metrics trends
+- Chart 5: Guidance vs. Street comparison
+- Chart 6: Revenue by segment/geography
+
+---
+
+## PAGES 6-7: UPDATED INVESTMENT THESIS
+
+### Thesis Impact Assessment (1-2 pages)
+
+For each key thesis pillar, assess impact of results:
+
+```
+■ **Thesis Pillar 1: [Original thesis statement]**
+
+Status: [STRENGTHENED / UNCHANGED / WEAKENED]
+
+Q[X] results [supported / challenged] this thesis pillar because [specific
+evidence from results]. [Detailed analysis of 150-200 words explaining how
+results impact this specific thesis element.]
+
+■ **Thesis Pillar 2: [Original thesis statement]**
+
+[Similar analysis]
+
+■ **Thesis Pillar 3: [Original thesis statement]**
+
+[Similar analysis]
+```
+
+### Risks Update (0.5 pages)
+- Any new risks identified?
+- Have existing risks been mitigated or worsened?
+- Brief assessment
+
+**Embed 1-2 charts:**
+- Chart 7: Valuation vs. historical
+- Chart 8: Estimate revision comparison
+
+---
+
+## PAGES 8-10: VALUATION & ESTIMATES
+
+### Updated Valuation (1-2 pages)
+
+**DCF Update:**
+```
+Updated DCF inputs based on Q[X] results:
+- Revenue growth FY24E: X.X% → X.X% (raised/lowered)
+- EBIT margin FY24E: XX.X% → XX.X%
+- Terminal growth: X.X% (unchanged)
+- WACC: X.X% (unchanged)
+
+Updated DCF fair value: $XXX (prior: $XXX)
+```
+
+**Comparable Companies:**
+```
+[Company] trades at XX.Xx NTM P/E vs. peer median of XX.Xx (-X% discount).
+Given [rationale], we believe [premium/discount/inline] valuation is warranted.
+```
+
+**Price Target Methodology:**
+```
+Our $XXX price target (prior: $XXX) is based on:
+- XX% DCF
+- XX% NTM P/E of XX.Xx (vs. peers at XX.Xx)
+- XX% EV/EBITDA
+
+Implied upside: +XX% from current price of $XXX
+```
+
+### Updated Estimates Detail
+
+Provide updated estimates for at least current year and next year:
+
+```
+DETAILED ESTIMATE UPDATES
+─────────────────────────────────────────────────────────────────
+ FY2024E FY2025E
+ Old New Change New Estimate
+Revenue ($B) XX.X XX.X +X.X% XX.X
+ [Segment A] XX.X XX.X +X.X% XX.X
+ [Segment B] XX.X XX.X +X.X% XX.X
+
+Gross Profit ($B) XX.X XX.X +X.X% XX.X
+Gross Margin (%) XX.X% XX.X% +XXbps XX.X%
+
+EBITDA ($B) X.X X.X +X.X% X.X
+EBITDA Margin (%) XX.X% XX.X% +XXbps XX.X%
+
+Operating Income X.X X.X +X.X% X.X
+Op Margin (%) XX.X% XX.X% +XXbps XX.X%
+
+Net Income ($B) X.X X.X +X.X% X.X
+EPS - Adjusted ($) X.XX X.XX +X.X% X.XX
+EPS - GAAP ($) X.XX X.XX +X.X% X.XX
+
+P/E (x) XX.Xx XX.Xx XX.Xx
+EV/EBITDA (x) XX.Xx XX.Xx XX.Xx
+
+Source: [Firm Name] estimates
+```
+
+**Embed 1-2 charts:**
+- Chart 9: P/E or EV/EBITDA bands
+- Chart 10: Price target walk (old → new)
+
+---
+
+## PAGES 11-12: APPENDIX (Optional)
+
+### Detailed Quarterly Models (if space allows)
+- Income statement detail
+- Cash flow highlights
+- Balance sheet highlights
+
+### Call Transcript Highlights (optional)
+- Key Q&A excerpts
+- Notable management quotes
+
+### Peer Comparison (if peers have reported)
+- How results compare to competitors
+- Market share implications
+
+**Embed final charts:**
+- Chart 11: Peer comparison
+- Chart 12: Additional supporting charts
+
+---
+
+## FORMATTING REQUIREMENTS
+
+### 1. Page 1 Requirements
+- Clear rating (MAINTAIN OUTPERFORM, RAISE TO BUY, etc.)
+- Updated price target prominently displayed
+- Summary table with old/new estimates
+- 3-4 paragraph-length bullets with ■ character
+
+### 2. All Tables Requirements
+- Source line at bottom
+- Clear column headers
+- Shading for header rows
+
+### 3. All Charts Requirements
+- "Figure X - [Title]" caption above
+- "Source: [Source]" line below
+- Professional styling
+
+### 4. Year Notation
+- Use A for actual (Q3'24A)
+- Use E for estimate (Q4'24E)
+
+### 5. Writing Style
+- Lead with numbers ("Revenue grew 15% to $1.2B" not "Strong revenue growth")
+- Use "vs." not "versus"
+- Be direct and concise
+- Focus on what's NEW
+
+### 6. Hyperlink Requirements ⭐⭐⭐
+- ALL URLs must be clickable hyperlinks in Word
+- Blue, underlined text that opens on Ctrl+Click
+- Display text meaningful (not raw URL)
+- Every source citation should have clickable link where applicable
+- No plain text URLs - always format as hyperlinks
+
+## Citation Examples for Specific Content
+
+### For Beat/Miss Analysis:
+```
+Revenue of $2.45B beat consensus of $2.39B by $60M (2.5%)¹
+
+¹ Bloomberg consensus as of market close November 6, 2024; Company earnings release November 7, 2024
+ [Hyperlink "earnings release" to: https://investor.company.com/news/q3-2024-earnings]
+```
+
+### For Guidance:
+```
+Management raised FY2024 revenue guidance to $9.8-10.0B from prior $9.5-9.7B²
+
+² Q3 2024 Earnings Call, November 7, 2024, CFO prepared remarks
+ [Hyperlink "Earnings Call" to: https://seekingalpha.com/article/...]
+ Prior guidance from Q2 earnings call August 8, 2024
+ [Hyperlink "Q2 earnings call" to August transcript]
+```
+
+### For Key Metrics:
+```
+Enterprise customers grew 23% YoY to 845, with net revenue retention at 128%³
+
+³ Q3 2024 10-Q, page 23
+ [Hyperlink "10-Q" to: https://www.sec.gov/cgi-bin/viewer?accession=...]
+ Q3 2024 Investor Presentation slide 8
+ [Hyperlink "Investor Presentation" to PDF]
+```
diff --git a/earnings-analysis/references/workflow.md b/earnings-analysis/references/workflow.md
new file mode 100644
index 0000000..7c170e5
--- /dev/null
+++ b/earnings-analysis/references/workflow.md
@@ -0,0 +1,526 @@
+# Detailed Workflow for Earnings Updates
+
+This document provides detailed step-by-step instructions for each phase of the earnings update process.
+
+## ⚠️⚠️⚠️ CRITICAL WARNING: ALWAYS USE THE LATEST EARNINGS DATA ⚠️⚠️⚠️
+
+**STOP AND READ THIS FIRST:**
+
+Training data is OUTDATED. Actively search for and retrieve the MOST RECENT earnings materials. Using outdated earnings data is the #1 mistake in earnings analysis.
+
+**BEFORE STARTING:**
+1. **CHECK TODAY'S DATE** - Write down the current date
+2. **SEARCH FOR LATEST** - Use web search to find the most recent earnings
+3. **VERIFY THE DATE** - Confirm the earnings release is within the last 3 months
+4. **IF OLDER THAN 3 MONTHS** - Wrong quarter obtained, search again
+
+## Phase 1: Earnings Data Collection (30-60 minutes)
+
+### Step 1: Identify the Latest Earnings Period
+
+**CRITICAL**: ALWAYS SEARCH FOR THE LATEST EARNINGS - DO NOT RELY ON KNOWLEDGE CUTOFF.
+**CRITICAL**: NEVER USE EARNINGS DATA FROM TRAINING - IT IS OUTDATED.
+
+**Step 1a: Search for Latest Earnings Release**
+
+**🚨 ACTIVELY SEARCH - training data is outdated. 🚨**
+
+**MANDATORY STEP 1: CHECK TODAY'S DATE**
+- **Write down today's date explicitly**: [Month] [Day], [Year]
+- **Use this to verify** that any earnings found are within 3 months
+- **Example**: "Today is October 29, 2024"
+
+**MANDATORY STEP 2: SEARCH FOR "LATEST EARNINGS"**
+- **Use web search** with queries like:
+ - `[Company name] latest earnings results`
+ - `[Company name] most recent quarterly earnings`
+ - `[Ticker symbol] earnings latest quarter`
+- **OR search company investor relations site**:
+ - Go to `investor.[company].com` or `[company].com/investors`
+ - Navigate to "Press Releases", "News", or "Earnings" section
+ - **Sort by date to find MOST RECENT release**
+ - Look for keywords: "earnings", "results", "financial results", "quarterly results"
+
+**MANDATORY STEP 3: VERIFY THE RELEASE DATE**
+- **Look at the date of the earnings release found**
+- **Calculate**: Is this date within the last 3 months from today?
+- **If YES** → Proceed to next step
+- **If NO (older than 3 months)** → 🚨 WRONG QUARTER - Search again for more recent
+
+**❌ COMMON MISTAKES TO AVOID:**
+- ❌ Using earnings data from training without searching
+- ❌ Assuming "Q3 2024" is latest based on expectations
+- ❌ Grabbing the first earnings release found without checking the date
+- ❌ Not comparing the release date to today's date
+- ❌ Proceeding when the release is 4+ months old
+
+**✅ CORRECT APPROACH:**
+- ✅ Check today's date first
+- ✅ Search explicitly for "latest" or "most recent"
+- ✅ Read the actual release date on the materials
+- ✅ Confirm release date is within 3 months of today
+- ✅ If unsure, search again with different terms
+
+**MANDATORY STEP 4: IDENTIFY THE QUARTER**
+- **Read the title/headline** to identify the quarter (Q1, Q2, Q3, Q4 or fiscal quarter)
+- **Read the release date** on the document itself
+- **Verify both the quarter name AND the date are recent**
+
+3. **Alternative search methods if IR site is unclear:**
+ - Web search: `[Company name] latest earnings results`
+ - Web search: `[Company name] most recent quarterly earnings`
+ - Web search: `[Ticker symbol] earnings latest quarter`
+ - SEC EDGAR: Search for company and look at most recent 10-Q or 10-K filing date
+
+**Example searches that find latest data:**
+- "Nike latest earnings results" → Returns most recent quarter reported
+- "AAPL most recent quarterly earnings" → Shows latest Apple earnings
+- "Tesla Q3 2024 earnings" → Results confirm Q3 2024 exists
+
+**Step 1b: Understand Company's Fiscal Calendar**
+
+After identifying the latest quarter from search, understand the company's fiscal year to interpret it correctly:
+
+**Common fiscal year patterns:**
+- **Calendar year (CY)**: Q1=Jan-Mar, Q2=Apr-Jun, Q3=Jul-Sep, Q4=Oct-Dec
+- **Nike fiscal**: Q1=Jun-Aug, Q2=Sep-Nov, Q3=Dec-Feb, Q4=Mar-May (May fiscal year-end)
+- **Apple fiscal**: Q1=Oct-Dec, Q2=Jan-Mar, Q3=Apr-Jun, Q4=Jul-Sep (September fiscal year-end)
+- **Walmart fiscal**: Q1=Feb-Apr, Q2=May-Jul, Q3=Aug-Oct, Q4=Nov-Jan (January fiscal year-end)
+
+Many companies state their fiscal year in the earnings release header. Search `[company] fiscal year calendar` if needed.
+
+**Step 1c: MANDATORY VERIFICATION - Verify Latest Data Obtained**
+
+🛑 **STOP - DO NOT PROCEED until verifying ALL of these:**
+
+- [ ] ✅ **Today's date written down**: [Month] [Day], [Year]
+- [ ] ✅ **Actively searched** using "latest earnings" or "most recent earnings"
+- [ ] ✅ **Earnings release date found**: [Month] [Day], [Year]
+- [ ] ✅ **Verified release is within 3 months of today** (do the math!)
+- [ ] ✅ **Did NOT assume** the quarter based on today's date alone
+- [ ] ✅ **Can see the actual press release** confirming the quarter/period
+- [ ] ✅ **Opened and read** the actual earnings materials (not just assumed they exist)
+
+**🚨 RED FLAGS - If ANY of these are true, WRONG quarter obtained:**
+- 🚨 Release date is more than 90 days old
+- 🚨 Relying on expectations rather than what was FOUND by searching
+- 🚨 Have not actually SEEN a press release or filing confirming this quarter exists
+- 🚨 Used data from training without searching
+- 🚨 Cannot state the exact release date
+- 🚨 Release date found is from 2023 or earlier (when today is 2024+)
+
+**IF ANY RED FLAGS PRESENT**: STOP and search again. Do not proceed with outdated data.
+
+**Step 1c: Handle Naming Variations**
+
+Companies use different terminology - recognize these patterns:
+
+**Quarter terminology:**
+- "Q1 2024", "Q1 FY24", "First Quarter 2024", "1Q24"
+- "Third Quarter Fiscal 2024", "Q3 FY2024", "3Q FY24"
+
+**Earnings release titles:**
+- "[Company] Reports Q3 2024 Results"
+- "[Company] Announces Third Quarter Fiscal 2024 Financial Results"
+- "[Company] Q3 Revenue Grew 15% Year-over-Year"
+
+**SEC filing searches:**
+- Company name may differ from common name (e.g., "Meta Platforms, Inc." vs "Facebook")
+- Search by ticker symbol to find filings reliably
+- Look for most recent 10-Q (quarterly) or 10-K (annual if Q4)
+
+### Step 2: Gather Earnings Materials
+
+After SEARCHING FOR and confirming the latest quarter, collect the following:
+
+**⚠️ IMPORTANT: SEARCH for and ACCESS actual documents - do not rely on training data.**
+
+**Primary Materials (REQUIRED):**
+- **Earnings press release** - Usually on company investor relations site under "Press Releases" or "News"
+ - Navigate to IR site and find the actual press release
+ - Search patterns: "[Company name] latest earnings", "[Company name] Q[X] [Year] earnings results"
+ - Look for PDF or HTML version
+ - **Verify the date matches what was found in Step 1** (should be within last 1-3 months)
+ - **Read the actual document** to confirm the quarter and get reported numbers
+
+- **10-Q or 10-K filing** - On SEC EDGAR (sec.gov/edgar/searchedgar/companysearch.html)
+ - Search by ticker symbol
+ - For quarters 1-3: Look for most recent 10-Q
+ - For Q4: Look for 10-K (annual report)
+ - Note: May be filed 1-5 days after earnings release
+ - Direct link format: `https://www.sec.gov/cgi-bin/viewer?accession=[accession-number]`
+
+- **Earnings call transcript** - 🚨 **VERIFY THE DATE ON THE TRANSCRIPT** 🚨
+ - **Search for**: "[Company] latest earnings call transcript" or "[Company] Q[X] [Year] earnings call transcript"
+ - **Sources**:
+ - Company IR site (some post transcripts directly)
+ - Seeking Alpha: Search "[Company] [latest quarter] earnings call transcript"
+ - AlphaStreet, Motley Fool (alternative sources)
+ - **CRITICAL DATE CHECK**:
+ - ✅ **Before using ANY transcript, verify the date on the transcript itself**
+ - ✅ **The transcript date MUST match the earnings release date from Step 1**
+ - ✅ **If transcript says "Q2 2023" but release was "Q3 2024", WRONG transcript obtained**
+ - 🚨 **Common mistake**: Grabbing an old transcript without checking the date
+ - If transcript not yet available, listen to webcast replay or note to wait for transcript
+
+**Supplemental Materials (if available):**
+- **Investor presentation/slides** - Often posted on IR site alongside press release
+ - Usually titled "Q[X] [Year] Earnings Presentation" or "Investor Presentation"
+ - PDF format with slides management presented during earnings call
+
+- **Supplemental data file** - Some companies provide Excel files with detailed metrics
+ - Look for "Supplemental Financial Information" or "Investor Data Sheet"
+
+**Reference Materials (for comparison):**
+- **Prior quarter results** - For QoQ comparison
+ - From prior quarter's earnings release (90 days ago)
+
+- **Prior year same quarter** - For YoY comparison
+ - From same quarter last year (4 quarters ago)
+
+- **Prior estimates** - If this company was previously covered
+ - From last earnings update or initiation report
+ - Check what was estimated for this quarter's metrics
+
+- **Consensus estimates** - From Bloomberg, FactSet, Refinitiv, or Yahoo Finance
+ - CRITICAL: Use estimates from BEFORE earnings release
+ - Look for "as of [date before earnings]" to ensure pre-announcement consensus
+ - Needed for beat/miss analysis
+
+**🛑 MANDATORY VERIFICATION before proceeding to Step 3:**
+
+**DATES - Verify ALL dates match:**
+- [ ] ✅ **Today's date written down**: _______________
+- [ ] ✅ **Earnings release date**: _______________ (MUST be within 3 months of today)
+- [ ] ✅ **Earnings call transcript date**: _______________ (MUST match release date ±1 day)
+- [ ] ✅ **10-Q/10-K filing date**: _______________ (MUST be same quarter as release)
+- [ ] ✅ **ALL materials show SAME quarter** (e.g., all say "Q3 2024", not mixed quarters)
+
+**SEARCH & ACCESS - Verify active search completed:**
+- [ ] ✅ **SEARCHED** for "latest earnings" (not assumed based on current date)
+- [ ] ✅ **ACCESSED** actual earnings press release and read it
+- [ ] ✅ **OPENED** actual earnings call transcript and verified date
+- [ ] ✅ **CONFIRMED** this is the MOST RECENT quarter by checking dates
+- [ ] ✅ Have full financial results (revenue, EPS, margins, etc.) from actual release
+- [ ] ✅ Have pre-earnings consensus estimates with source date
+
+**🚨 RED FLAGS - STOP if ANY of these are true:**
+- 🚨 Did NOT actually search for or access the earnings materials
+- 🚨 Working from memory or training data instead of current documents
+- 🚨 The earnings release date is more than 90 days old
+- 🚨 Cannot state the EXACT DATE of the earnings release
+- 🚨 The transcript date does NOT match the release date
+- 🚨 Materials show different quarters (e.g., release says Q3 but transcript says Q2)
+- 🚨 Grabbed the first result without verifying the date
+
+### Step 3: Extract Key Metrics
+
+Create a structured summary:
+
+```
+REPORTED RESULTS vs. ESTIMATES:
+─────────────────────────────────────────────────
+ Reported Our Est Consensus Beat/(Miss)
+Revenue $X,XXX $X,XXX $X,XXX $XX (X%)
+Gross Margin XX.X% XX.X% XX.X% XXbps
+EBITDA $XXX $XXX $XXX $XX (X%)
+Operating Profit $XXX $XXX $XXX $XX (X%)
+EPS (Adjusted) $X.XX $X.XX $X.XX $X.XX
+EPS (GAAP) $X.XX $X.XX $X.XX $X.XX
+
+KEY BUSINESS METRICS:
+─────────────────────────────────────────────────
+[Metric 1] XXX XXX XXX +X% YoY
+[Metric 2] XXX XXX XXX +X% YoY
+[Metric 3] XXX XXX XXX +X% YoY
+```
+
+### Step 4: Identify Key Themes from Call
+
+Listen to or read earnings call transcript and note:
+- Management's tone (confident, cautious, defensive?)
+- Key topics emphasized (product launches, geographic trends, competition)
+- Questions from analysts (what are investors concerned about?)
+- Guidance provided (raised, lowered, maintained, introduced?)
+- Any surprises or unexpected commentary
+
+## Phase 2: Analysis (2-3 hours)
+
+### Step 5: Beat/Miss Analysis
+
+For EACH key metric that beat or missed, explain:
+
+**If BEAT:**
+- What drove the outperformance?
+- Was it one-time or sustainable?
+- Did management guide higher going forward?
+- How does this impact our thesis?
+
+**If MISS:**
+- What went wrong?
+- Was it company-specific or industry-wide?
+- Is management taking corrective action?
+- How does this impact our thesis?
+
+**Example Format:**
+```
+■ **Revenue Beat by 3% Driven by Strong DTC Performance**
+
+Revenue of $13.5B exceeded our estimate of $13.1B by $400M (3%) and consensus
+of $13.2B by $300M (2%). The outperformance was driven primarily by Direct-to-
+Consumer channels, which grew 18% YoY (vs. our 12% estimate), offsetting
+weaker-than-expected wholesale (-5% vs. flat estimate). Management cited strong
+digital demand and successful product launches (Pegasus 40 running shoe, new
+Jordan colorways) as key drivers. DTC now represents 42% of total revenue vs.
+38% a year ago, demonstrating successful channel shift strategy.
+```
+
+### Step 6: Segment/Geographic/Product Analysis
+
+Analyze performance by:
+- Business segment (if multi-segment company)
+- Geography (North America, Europe, China, etc.)
+- Product category
+- Channel (retail, wholesale, e-commerce)
+
+Identify:
+- What outperformed expectations?
+- What underperformed?
+- Trends vs. prior quarters
+- Management commentary on outlook for each area
+
+### Step 7: Margin Analysis
+
+Analyze profitability:
+- Gross margin: up or down? why?
+- Operating margin: up or down? why?
+- Key drivers (pricing, mix, costs, leverage)
+- Outlook going forward
+
+### Step 8: Guidance Analysis
+
+If company provided guidance:
+- Compare new guidance to prior guidance
+- Compare to internal estimates and Street estimates
+- Assess credibility (does company have track record of sandbagging? beating?)
+- Identify key assumptions behind guidance
+
+If company did NOT provide guidance:
+- Note this explicitly
+- Provide independent outlook based on results and commentary
+
+### Step 9: Update Financial Model
+
+Update estimates for:
+- Current year (remaining quarters)
+- Next year
+- Potentially year after
+
+**Show clearly:**
+```
+UPDATED ESTIMATES:
+─────────────────────────────────────────────────
+ Old Est New Est Change Reason
+FY2024E Revenue $XX.XB $XX.XB +X.X% [Brief reason]
+FY2024E EBITDA $X.XB $X.XB +X.X% [Brief reason]
+FY2024E EPS $X.XX $X.XX +X.X% [Brief reason]
+
+FY2025E Revenue $XX.XB $XX.XB +X.X% [Brief reason]
+FY2025E EBITDA $X.XB $X.XB +X.X% [Brief reason]
+FY2025E EPS $X.XX $X.XX +X.X% [Brief reason]
+```
+
+### Step 10: Update Valuation & Price Target
+
+Based on updated estimates:
+- Recalculate DCF (use updated cash flows)
+- Update comparable company multiples (if peer group has reported)
+- Determine new fair value
+- Decide if price target changes
+
+**Price Target Decision:**
+- If estimates changed significantly (>5%) → Usually change price target
+- If estimates changed marginally (<5%) → May maintain price target
+- If thesis strengthened/weakened → May change even without estimate change
+
+### Step 11: Assess Rating Impact
+
+Decide whether to change rating:
+- If results significantly better than expected + guidance raised → Consider upgrade
+- If results significantly worse + guidance cut → Consider downgrade
+- If inline or mixed → Usually maintain rating
+
+**Consider:**
+- Stock reaction (up/down/flat?)
+- Valuation (expensive/cheap relative to new estimates?)
+- Risk/reward (asymmetry shifted?)
+
+## Phase 3: Chart Generation (1-2 hours)
+
+### Step 12: Generate 8-12 Charts
+
+Create charts focusing on QUARTERLY TRENDS and WHAT'S NEW.
+
+**REQUIRED CHARTS (8-12 total):**
+
+1. **Quarterly Revenue Progression** (Bar chart)
+ - Last 8-12 quarters
+ - Show beat/miss vs. estimates each quarter
+ - Highlight current quarter
+
+2. **Quarterly EPS Progression** (Bar chart)
+ - Last 8-12 quarters
+ - Show beat/miss vs. estimates
+ - Adjusted and GAAP
+
+3. **Quarterly Margin Trend** (Line chart)
+ - Gross margin, EBIT margin, net margin
+ - Last 8-12 quarters
+ - Show trajectory
+
+4. **Revenue by Segment/Geography** (Stacked bar OR table)
+ - Current quarter vs. YoY
+ - Growth rates by segment
+
+5. **Key Operating Metrics** (Multi-line chart)
+ - Customer count, ARPU, units sold, etc. (whatever is relevant)
+ - Last 8-12 quarters
+
+6. **Beat/Miss Summary** (Waterfall or table)
+ - Show components of beat/miss
+ - What drove variance from estimates
+
+7. **Estimate Revision Chart** (Before/after comparison)
+ - Old FY estimates vs. new FY estimates
+ - Bar chart showing change
+
+8. **Valuation Chart** (P/E or EV/EBITDA multiple)
+ - Historical multiple range
+ - Current multiple
+ - Fair value multiple
+
+**OPTIONAL CHARTS (if space allows):**
+- Peer comparison (if peers have reported)
+- Guidance vs. Street comparison
+- Cash flow metrics
+- Balance sheet highlights (if notable)
+
+**Chart Style Guidelines:**
+- Focus on TRENDS (quarterly progression)
+- Highlight CHANGES (beat/miss, estimate revisions)
+- Keep simple and clear (this is a fast-turnaround report)
+
+## Phase 4: Report Creation (2-3 hours)
+
+### Step 13: Create DOCX Report
+
+Use DOCX skill to create 8-12 page report.
+
+See [report-structure.md](report-structure.md) for complete page-by-page templates and formatting requirements.
+
+**Key Steps:**
+1. Create Page 1 with earnings summary and quick takeaways
+2. Add detailed results analysis (Pages 2-3)
+3. Include key metrics and guidance (Pages 4-5)
+4. Update investment thesis (Pages 6-7)
+5. Provide valuation and estimates (Pages 8-10)
+6. Add appendix if needed (Pages 11-12)
+7. Embed all 8-12 charts throughout
+8. Add 1-3 summary tables
+9. Include complete sources section with clickable hyperlinks
+
+### Step 14: Optional - Update XLS Model
+
+If a full financial model exists for this company (from initiation), update it with:
+- Actual Q[X] results
+- Revised estimates for future quarters
+- Updated valuation
+
+**Note**: For earnings updates, a full XLS file is OPTIONAL (not required like in initiation reports). The DOCX report is the primary deliverable.
+
+If creating XLS, include:
+- Quarterly model tab
+- Updated annual projections
+- Revised DCF
+- Updated comps analysis
+
+## Phase 5: Quality Check & Delivery (30 minutes)
+
+### Step 15: Quality Checklist
+
+Before publishing, verify:
+
+**Content:**
+- [ ] Beat/miss clearly stated and quantified
+- [ ] Key drivers explained (not just "strong performance")
+- [ ] Updated estimates provided (old vs. new shown)
+- [ ] Price target updated or explicitly maintained
+- [ ] Rating confirmed or changed with rationale
+- [ ] Guidance analyzed (if provided)
+- [ ] Thesis impact assessed
+
+**Formatting:**
+- [ ] Page 1 has summary box and key bullets
+- [ ] All tables have source lines
+- [ ] All figures numbered and captioned
+- [ ] Estimates table shows old vs. new
+- [ ] 8-12 charts embedded throughout
+- [ ] Report is 8-12 pages (not too long, not too short)
+
+**Accuracy:**
+- [ ] Numbers match company's reported results exactly
+- [ ] Math checks out (estimates, valuation)
+- [ ] No typos in ticker, company name, numbers
+- [ ] Charts match text descriptions
+- [ ] Date is current
+
+**Citations:** ⭐ MANDATORY
+- [ ] Every figure has specific source with document and date
+- [ ] Every table has specific source with document reference
+- [ ] Beat/miss analysis cites consensus source with date
+- [ ] Guidance changes cite current and prior guidance sources
+- [ ] Key statistics have footnotes with specific page/slide references
+- [ ] Sources section lists all materials with URLs
+- [ ] ALL URLs are CLICKABLE HYPERLINKS (not plain text)
+- [ ] Hyperlinks tested and working (Ctrl+Click opens correct page)
+- [ ] All SEC filings hyperlinked to EDGAR viewer
+- [ ] All earnings materials hyperlinked (release, transcript, presentation)
+- [ ] Prior guidance hyperlinked to prior quarter's materials
+- [ ] No raw URLs displayed - all formatted as clickable links
+- [ ] Earnings call quotes cite specific speaker and approximate timestamp
+
+**Timeliness:**
+- [ ] Report published within 24-48 hours of earnings release
+- [ ] All data is from LATEST quarter
+- [ ] Consensus estimates are pre-earnings (not post-earnings)
+
+### Step 16: Deliver Report
+
+Provide user with:
+
+1. **DOCX file**: `[Company]_Q[X]_[Year]_Earnings_Update.docx`
+2. **Chart files**: All PNG/JPG charts (for reference)
+3. **Optional XLS**: Updated financial model if maintained
+
+**Brief summary for user:**
+```
+[Company] Q[X] [Year] Earnings Update Complete
+
+Results: [BEAT / INLINE / MISS]
+- Revenue: $X.XB ([beat/missed] by $XXM or X%)
+- EPS: $X.XX ([beat/missed] by $X.XX)
+
+Key Takeaways:
+■ [Takeaway 1]
+■ [Takeaway 2]
+■ [Takeaway 3]
+
+Updated Estimates:
+- FY[Year]E Revenue: $XX.XB (prior: $XX.XB, [+/-]X%)
+- FY[Year]E EPS: $X.XX (prior: $X.XX, [+/-]X%)
+
+Rating: [MAINTAINED / RAISED / LOWERED] [RATING]
+Price Target: $XXX (prior: $XXX) - [+/-]XX% upside
+
+Deliverable: 8-12 page earnings update report with updated estimates and valuation.
+```
diff --git a/ib-check-deck/SKILL.md b/ib-check-deck/SKILL.md
new file mode 100644
index 0000000..a9a1b59
--- /dev/null
+++ b/ib-check-deck/SKILL.md
@@ -0,0 +1,78 @@
+---
+name: ib-check-deck
+description: Investment banking presentation quality checker. Reviews a pitch deck or client-ready presentation for (1) number consistency across slides, (2) data-narrative alignment, (3) language polish against IB standards, (4) visual and formatting QC. Use whenever the user asks to review, check, QC, proof, or do a final pass on a deck, pitch, or client materials — including requests like "check my numbers", "reconcile figures across slides", "is this client-ready", or "what am I missing before I send this out".
+---
+
+# IB Deck Checker
+
+Perform comprehensive QC on the presentation across four dimensions. Read every slide, then report findings.
+
+## Environment check
+
+This skill works in both the PowerPoint add-in and chat. Identify which you're in before starting:
+
+- **Add-in** — read from the live open deck.
+- **Chat** — read from the uploaded `.pptx` file.
+
+This is read-and-report only — no edits — so the workflow is identical in both.
+
+## Workflow
+
+### Read the deck
+
+Pull text from every slide, keeping track of which slide each line came from. You'll need slide-level attribution for every finding ("$500M appears on slides 3 and 8, but slide 15 shows $485M"). A deck with 30 slides is too much to hold in working memory reliably — write the extracted text to a file so the number-checking script can process it.
+
+The script expects markdown-ish input with slide markers. Format as:
+
+```
+## Slide 1
+[slide 1 text content]
+
+## Slide 2
+[slide 2 text content]
+```
+
+### 1. Number consistency
+
+Run the extraction script on what you collected:
+
+```bash
+python scripts/extract_numbers.py /tmp/deck_content.md --check
+```
+
+It normalizes units ($500M vs $500MM vs $500,000,000 → same number), categorizes values (revenue, EBITDA, multiples, margins), and flags when the same metric category shows conflicting values on different slides. This is the part most likely to catch something a human missed on the fifth read-through.
+
+Beyond what the script flags, verify:
+- Calculations are correct (totals sum, percentages add up, growth rates match the endpoints)
+- Unit style is consistent — the deck should pick one of $M or $MM and stick with it
+- Time periods are aligned — FY vs LTM vs quarterly, explicitly labeled
+
+### 2. Data-narrative alignment
+
+Map claims to the data that's supposed to support them. This is where decks go wrong quietly — someone edits the chart on slide 7 and forgets the narrative on slide 4.
+
+- Trend statements ("declining margins") → does the chart actually go that direction?
+- Market position claims ("#1 player") → revenue and share data support it?
+- Plausibility — "#1 in a $100B market" with $200M revenue is 0.2% share; that's not #1
+
+### 3. Language polish
+
+IB decks have a register. Scan for anything that breaks it: casual phrasing ("pretty good", "a lot of"), contractions, exclamation points, vague quantifiers without numbers, inconsistent terminology for the same concept.
+
+See `references/ib-terminology.md` for replacement patterns.
+
+### 4. Visual and formatting QC
+
+Run standard visual verification checks on each slide. You're looking for: missing chart source citations, missing axis labels, typography inconsistencies, number formatting drift (1,000 vs 1K within the same deck), date format drift, footnote and disclaimer gaps.
+
+Visual verification catches overlaps, overflow, and contrast issues that don't show up in text extraction. Don't skip it — a chart with no source citation looks the same as a properly sourced one in the text dump.
+
+## Output
+
+Use `references/report-format.md` as the structure. Categorize by severity:
+
+- **Critical** — number mismatches, factual errors, data contradicting narrative. These block client delivery.
+- **Important** — language, missing sources, terminology drift. Should fix.
+- **Minor** — font sizes, spacing, date formats. Polish.
+
+Lead with criticals. If there aren't any, say so explicitly — "no number inconsistencies found" is a finding, not an absence of one.
diff --git a/ib-check-deck/references/ib-terminology.md b/ib-check-deck/references/ib-terminology.md
new file mode 100644
index 0000000..9d50318
--- /dev/null
+++ b/ib-check-deck/references/ib-terminology.md
@@ -0,0 +1,49 @@
+# IB Terminology Reference
+
+## Casual to Professional Replacements
+
+| Casual/Informal | IB Standard |
+|-----------------|-------------|
+| "a lot of growth" | "significant growth" or "X% growth" |
+| "pretty good margins" | "attractive margins" or "margins of X%" |
+| "they bought the company" | "the company was acquired" |
+| "big deal" | "transformative transaction" |
+| "cheap valuation" | "attractive valuation" or "valuation discount" |
+| "expensive" | "premium valuation" |
+| "make more money" | "enhance profitability" or "drive margin expansion" |
+| "getting bigger" | "pursuing growth" or "expanding operations" |
+| "cut costs" | "implement cost optimization" or "drive operational efficiencies" |
+| "good fit" | "strategic fit" or "compelling strategic rationale" |
+| "help with" | "support" or "facilitate" |
+| "a bunch of" | "multiple" or "numerous" |
+| "kind of" / "sort of" | [remove or be specific] |
+| "really" / "very" | [remove or quantify] |
+| "tons of" | "substantial" or quantify |
+| "huge" | "significant" or quantify |
+| "pretty much" | [remove or be precise] |
+| "basically" | [remove or clarify] |
+
+## Language Patterns to Avoid
+
+- **Contractions**: Don't → Do not, won't → will not
+- **Exclamation points**: Generally inappropriate for IB materials
+- **First-person**: "We think..." → "Management believes..." or passive voice
+- **Superlatives without evidence**: "best-in-class" requires supporting data
+- **Vague quantifiers**: "some", "many", "several" → specific numbers
+
+## Preferred Phrasing Patterns
+
+**Growth narratives**:
+- "Demonstrated track record of X% revenue CAGR"
+- "Consistent margin expansion over [period]"
+- "Proven ability to generate organic growth"
+
+**Market position**:
+- "#X player in [specific segment]"
+- "Leading provider of [specific offering]"
+- "Differentiated positioning through [specific attribute]"
+
+**Strategic rationale**:
+- "Compelling strategic fit driven by..."
+- "Attractive value creation opportunity through..."
+- "Synergy potential of $Xm from [specific sources]"
diff --git a/ib-check-deck/references/report-format.md b/ib-check-deck/references/report-format.md
new file mode 100644
index 0000000..4321623
--- /dev/null
+++ b/ib-check-deck/references/report-format.md
@@ -0,0 +1,67 @@
+# Deck Check Report Format
+
+## Report Template
+
+```markdown
+# Deck Check Report: [Presentation Name]
+
+## Summary
+- Total issues: X
+- Critical: X (number mismatches, factual errors)
+- Important: X (narrative-data alignment, language)
+- Minor: X (formatting)
+
+## Critical Issues
+
+### Number Consistency
+1. **[Issue name]** (Slides X, Y)
+ - Slide X: [value]
+ - Slide Y: [value]
+ - Action: [recommendation]
+
+### Data-Narrative Alignment
+1. **[Issue name]** (Slides X, Y)
+ - Claim: "[quoted text]"
+ - Data shows: [contradiction]
+ - Action: [recommendation]
+
+## Important Issues
+
+### Language Polish
+1. **[Issue type]** (Slide X)
+ - Current: "[quoted text]"
+ - Suggested: "[replacement]"
+
+## Minor Issues
+
+### Formatting
+1. **[Issue type]** (Slide X)
+ - [Description and fix]
+
+## Final Checklist
+- [ ] Numbers reconciled
+- [ ] Narrative matches data
+- [ ] Language meets IB standards
+- [ ] Charts sourced
+- [ ] Formatting consistent
+```
+
+## Issue Severity Classification
+
+**Critical** (must fix before client delivery):
+- Number mismatches across slides
+- Calculation errors
+- Factual inaccuracies (names, titles, dates)
+- Data contradicting narrative
+
+**Important** (should fix):
+- Casual/informal language
+- Vague claims without specificity
+- Terminology inconsistency
+- Missing chart sources
+
+**Minor** (polish items):
+- Font/color inconsistencies
+- Date format variations
+- Spacing/alignment issues
+- Orphaned text
diff --git a/ib-check-deck/scripts/extract_numbers.py b/ib-check-deck/scripts/extract_numbers.py
new file mode 100644
index 0000000..e4c490a
--- /dev/null
+++ b/ib-check-deck/scripts/extract_numbers.py
@@ -0,0 +1,305 @@
+#!/usr/bin/env python3
+"""
+Extract numerical values from presentation content for consistency checking.
+
+Usage:
+ python extract_numbers.py presentation-content.md
+ python extract_numbers.py presentation-content.md --output numbers.json
+
+This script parses markdown-formatted presentation content (from markitdown)
+and extracts all numerical values with their context and slide references.
+"""
+
+import argparse
+import json
+import re
+import sys
+from collections import defaultdict
+from dataclasses import dataclass, asdict
+from pathlib import Path
+from typing import Optional
+
+
+@dataclass
+class NumberInstance:
+ """A numerical value found in the presentation."""
+ value: str # Original string representation
+ normalized: float # Normalized numeric value
+ unit: str # Detected unit (M, B, K, %, bps, x, etc.)
+ slide: int # Slide number (0 if unknown)
+ context: str # Surrounding text for context
+ line_number: int # Line number in source file
+ category: str # Detected category (revenue, margin, multiple, etc.)
+
+
+def normalize_number(value_str: str, unit: str) -> float:
+ """Convert a number string with unit to a normalized float value."""
+ # Remove commas and spaces
+ clean = re.sub(r'[,\s]', '', value_str)
+
+ try:
+ base_value = float(clean)
+ except ValueError:
+ return 0.0
+
+ # Apply unit multipliers
+ multipliers = {
+ 'T': 1e12,
+ 'B': 1e9,
+ 'bn': 1e9,
+ 'billion': 1e9,
+ 'M': 1e6,
+ 'mm': 1e6,
+ 'mn': 1e6,
+ 'million': 1e6,
+ 'K': 1e3,
+ 'k': 1e3,
+ 'thousand': 1e3,
+ }
+
+ for unit_key in sorted(multipliers.keys(), key=len, reverse=True):
+ if unit_key.lower() in unit.lower():
+ return base_value * multipliers[unit_key]
+
+ return base_value
+
+
+def detect_category(context: str, unit: str) -> str:
+ """Detect the category of a number based on context and unit."""
+ context_lower = context.lower()
+
+ # Revenue-related
+ if any(term in context_lower for term in ['revenue', 'sales', 'top line', 'topline']):
+ return 'revenue'
+
+ # EBITDA-related
+ if 'ebitda' in context_lower:
+ if any(term in context_lower for term in ['margin', '%', 'percent']):
+ return 'ebitda_margin'
+ return 'ebitda'
+
+ # Margin-related
+ if any(term in context_lower for term in ['margin', 'profit']):
+ return 'margin'
+
+ # Growth-related
+ if any(term in context_lower for term in ['growth', 'cagr', 'yoy', 'y/y']):
+ return 'growth'
+
+ # Valuation multiples
+ if any(term in context_lower for term in ['multiple', 'ev/', 'p/e', 'ev/ebitda', 'ev/revenue']):
+ return 'multiple'
+
+ # Enterprise value / market cap
+ if any(term in context_lower for term in ['enterprise value', 'ev ', 'market cap']):
+ return 'valuation'
+
+ # Percentage (generic)
+ if unit in ['%', 'bps', 'percent']:
+ return 'percentage'
+
+ # Multiple indicator
+ if unit == 'x':
+ return 'multiple'
+
+ return 'other'
+
+
+def extract_numbers(content: str) -> list[NumberInstance]:
+ """Extract all numbers from presentation content."""
+ numbers = []
+ current_slide = 0
+
+ # Pattern for slide markers (from markitdown format)
+ slide_pattern = re.compile(r'^#+\s*Slide\s*(\d+)|^
+
+
+
+
+
+
+```
+
+### Table Row with Cells
+
+```xml
+
+
+
+
+
+
+
+
+
+ Grand View Research
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 22.1
+
+
+
+
+
+
+
+```
+
+### Header Row Styling
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Source
+
+
+
+
+
+
+
+
+
+
+
+```
+
+---
+
+## Arrow Shapes
+
+### Right Arrow Shape
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+### Down Arrow Shape
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+### Chevron Shape
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+---
+
+## Text Boxes
+
+### Basic Text Box
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Text content here
+
+
+
+
+```
+
+### Text Box with Bullet Points
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+ First bullet point
+
+
+
+
+
+
+
+
+
+ Second bullet point
+
+
+
+```
+
+### Text with White Color (for dark backgrounds)
+
+```xml
+
+
+
+
+
+
+ White text on colored background
+
+```
+
+---
+
+## Shapes with Fill
+
+### Rectangle with Solid Fill
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Label Text
+
+
+
+
+```
+
+---
+
+## Image Insertion
+
+### Adding Image to Slide
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+### Adding Image Relationship
+
+In `ppt/slides/_rels/slideN.xml.rels`:
+
+```xml
+
+```
+
+---
+
+## Connector Lines
+
+### Straight Connector
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+### Dashed Line
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+---
+
+## Unit Conversions
+
+| Unit | EMUs per unit |
+|------|---------------|
+| 1 inch | 914400 |
+| 1 cm | 360000 |
+| 1 point | 12700 |
+| 1 pixel (96 DPI) | 9525 |
+
+### Common Slide Dimensions (16:9)
+
+- Width: 12192000 EMUs (13.333 inches)
+- Height: 6858000 EMUs (7.5 inches)
+
+### Typical Element Positions
+
+| Element | X Position | Y Position |
+|---------|------------|------------|
+| Logo (top-right) | 10800000 | 200000 |
+| Title | 342583 | 286603 |
+| Subtitle | 402591 | 1767390 |
+| Footer | 342583 | 6435334 |
diff --git a/pptx-author/SKILL.md b/pptx-author/SKILL.md
new file mode 100644
index 0000000..8d84786
--- /dev/null
+++ b/pptx-author/SKILL.md
@@ -0,0 +1,43 @@
+---
+name: pptx-author
+description: Produce a .pptx file on disk (headless) instead of driving a live PowerPoint document — for managed-agent sessions with no open Office app.
+---
+
+# pptx-author
+
+Use this skill when running **headless** (managed-agent / CMA mode) and you need to deliver a PowerPoint deck as a **file artifact** rather than editing a live document via `mcp__office__powerpoint_*`.
+
+## Output contract
+
+- Write to `./out/.pptx`. Create `./out/` if it does not exist.
+- Return the relative path in your final message so the orchestration layer can collect it.
+
+## How to build the deck
+
+Write a short Python script and run it with Bash. Use `python-pptx`:
+
+```python
+from pptx import Presentation
+from pptx.util import Inches, Pt
+
+prs = Presentation("./templates/firm-template.pptx") # if a template is provided
+# or: prs = Presentation()
+
+slide = prs.slides.add_slide(prs.slide_layouts[5]) # title-only
+slide.shapes.title.text = "Valuation Summary"
+# ... add tables / charts / text boxes ...
+
+prs.save("./out/pitch-.pptx")
+```
+
+## Conventions (mirror the live-Office `pitch-deck` skill)
+
+- **One idea per slide.** Title states the takeaway; body supports it.
+- **Every number traces to the model.** If a figure comes from `./out/model.xlsx`, footnote the sheet and cell.
+- **Use the firm template** when one is mounted at `./templates/`; otherwise default layouts.
+- **Charts**: prefer embedding a PNG rendered from the model over native pptx charts when fidelity matters.
+- **No external sends.** This skill writes a file; it never emails or uploads.
+
+## When NOT to use
+
+If `mcp__office__powerpoint_*` tools are available (Cowork plugin mode), use those instead — they drive the user's live document with review checkpoints. This skill is the file-producing fallback for headless runs.
diff --git a/process-letter/SKILL.md b/process-letter/SKILL.md
new file mode 100644
index 0000000..4710c1f
--- /dev/null
+++ b/process-letter/SKILL.md
@@ -0,0 +1,75 @@
+---
+name: process-letter
+description: Draft process letters and bid instructions for sell-side M&A processes. Covers initial indication of interest (IOI) instructions, final bid procedures, and management meeting logistics. Triggers on "process letter", "bid instructions", "IOI letter", "bid procedures", "final round letter", or "management meeting invite".
+---
+
+# Process Letter
+
+## Workflow
+
+### Step 1: Determine Letter Type
+
+- **Initial process letter**: Sent with teaser/CIM to outline the process and IOI requirements
+- **IOI instructions**: Specific requirements for first-round indications of interest
+- **Second round / final bid letter**: Instructions for submitting binding offers after diligence
+- **Management meeting invitation**: Logistics for in-person management presentations
+
+### Step 2: Initial Process Letter / IOI Instructions
+
+**Header:**
+- Date, deal code name
+- "Confidential"
+- Addressed to prospective buyer
+
+**Sections:**
+
+1. **Introduction**: Brief overview of the opportunity and the seller's objectives
+2. **Process Overview**: Timeline, key dates, expected number of rounds
+3. **IOI Requirements**: What to include in the initial indication:
+ - Proposed valuation range (enterprise value)
+ - Consideration form (cash, stock, earnout, rollover)
+ - Financing sources and certainty
+ - Key due diligence requirements
+ - Indicative timeline to close
+ - Any conditions or contingencies
+ - Brief description of the buyer and strategic rationale
+4. **Submission Details**: Where to send, deadline (date and time), format
+5. **Confidentiality Reminder**: Reference to NDA, data room access
+6. **Contact Information**: Banker contacts for questions
+
+### Step 3: Final Bid / Second Round Letter
+
+Additional requirements beyond IOI:
+
+1. **Markup of purchase agreement**: Provide the draft SPA/APA and request markup
+2. **Detailed financing commitments**: Committed financing letters required
+3. **Remaining diligence items**: Specify what confirmatory diligence is expected
+4. **Exclusivity terms**: Duration and conditions of any exclusivity period
+5. **Regulatory analysis**: Antitrust filing requirements and timeline
+6. **Key personnel terms**: Employment agreements, compensation, rollover equity
+7. **Binding vs. non-binding**: Clarify what is binding at this stage
+8. **Evaluation criteria**: How bids will be evaluated (price, certainty, speed, fit)
+
+### Step 4: Management Meeting Invitation
+
+1. **Logistics**: Date, time, location (or video link), duration
+2. **Attendees**: Who from the company will present, who from the buyer should attend
+3. **Agenda**: Typical management presentation agenda (overview, financials, operations, growth, Q&A)
+4. **Ground rules**: No recording, confidentiality, questions format
+5. **Materials**: What will be distributed (presentation deck, data room access)
+6. **Follow-up**: Process for submitting additional questions after the meeting
+
+### Step 5: Output
+
+- Word document (.docx) with professional letter formatting
+- Firm letterhead placeholder
+- Track changes version for client review
+
+## Important Notes
+
+- Process letters set the tone for the entire deal — be clear, professional, and organized
+- Deadlines should be firm but reasonable — typically 2-3 weeks for IOIs, 3-4 weeks for final bids
+- Always include the evaluation criteria — buyers want to know how they'll be judged
+- Coordinate with legal on any representations or commitments in the letter
+- Client should review and approve before sending — they may want to adjust tone or terms
+- Keep a log of who received each letter and when — this becomes the process tracker
diff --git a/returns-analysis/SKILL.md b/returns-analysis/SKILL.md
new file mode 100644
index 0000000..1c24090
--- /dev/null
+++ b/returns-analysis/SKILL.md
@@ -0,0 +1,119 @@
+---
+name: returns-analysis
+description: Build quick IRR/MOIC sensitivity tables for PE deal evaluation. Models returns across entry multiple, leverage, exit multiple, growth, and hold period scenarios. Use when sizing up a deal, stress-testing assumptions, or preparing IC returns exhibits. Triggers on "returns analysis", "IRR sensitivity", "MOIC table", "what's the return at", "model the returns", or "back of the envelope".
+---
+
+# Returns Analysis
+
+## Workflow
+
+### Step 1: Gather Deal Inputs
+
+Ask for (or extract from prior analysis):
+
+**Entry:**
+- Entry EBITDA (LTM or NTM)
+- Entry multiple (EV / EBITDA)
+- Enterprise value
+- Net debt at close
+- Equity check size
+- Transaction fees & expenses
+
+**Financing:**
+- Senior debt (x EBITDA, rate, amortization)
+- Subordinated debt / mezzanine (if any)
+- Total leverage at entry (x EBITDA)
+- Equity contribution
+
+**Operating Assumptions:**
+- Revenue growth rate (annual)
+- EBITDA margin trajectory
+- Capex as % of revenue
+- Working capital changes
+- Debt paydown schedule
+
+**Exit:**
+- Hold period (years)
+- Exit multiple (EV / EBITDA)
+- Exit EBITDA (calculated from growth assumptions)
+
+### Step 2: Base Case Returns
+
+Calculate:
+
+| Metric | Value |
+|--------|-------|
+| Entry EV | |
+| Equity invested | |
+| Exit EBITDA | |
+| Exit EV | |
+| Net debt at exit | |
+| Exit equity value | |
+| **MOIC** | |
+| **IRR** | |
+| Cash-on-cash | |
+
+Show the returns waterfall:
+- EBITDA growth contribution
+- Multiple expansion/contraction contribution
+- Debt paydown contribution
+- Fee/expense drag
+
+### Step 3: Sensitivity Tables
+
+Build 2-way sensitivity matrices:
+
+**Entry Multiple vs. Exit Multiple**
+| | Exit 6x | Exit 7x | Exit 8x | Exit 9x | Exit 10x |
+|---|---------|---------|---------|---------|----------|
+| Entry 7x | | | | | |
+| Entry 8x | | | | | |
+| Entry 9x | | | | | |
+| Entry 10x | | | | | |
+
+**EBITDA Growth vs. Exit Multiple** (at fixed entry)
+
+**Leverage vs. Exit Multiple** (at fixed entry and growth)
+
+**Hold Period vs. Exit Multiple**
+
+Show both IRR and MOIC in each cell (IRR / MOIC format).
+
+### Step 4: Scenario Analysis
+
+Build 3 scenarios:
+
+| | Bull | Base | Bear |
+|---|------|------|------|
+| Revenue CAGR | | | |
+| Exit EBITDA margin | | | |
+| Exit multiple | | | |
+| Exit EBITDA | | | |
+| MOIC | | | |
+| IRR | | | |
+
+### Step 5: Output
+
+- Excel workbook with:
+ - Assumptions tab
+ - Returns calculation
+ - Sensitivity tables (formatted with conditional coloring)
+ - Scenario summary
+- One-page returns summary suitable for IC deck
+
+## Key Formulas
+
+- **MOIC** = Exit Equity Value / Equity Invested
+- **IRR** = solve for r: Equity Invested × (1 + r)^n = Exit Equity Value (adjust for interim cash flows)
+- **Returns attribution**:
+ - Growth: (Exit EBITDA - Entry EBITDA) × Exit Multiple / Equity
+ - Multiple: (Exit Multiple - Entry Multiple) × Entry EBITDA / Equity
+ - Leverage: Debt paydown over hold period / Equity
+
+## Important Notes
+
+- Always show returns both gross and net of fees/carry where applicable
+- Management rollover and co-invest change the equity check — ask if relevant
+- Dividend recaps or interim distributions affect IRR significantly — include if planned
+- Don't forget transaction costs (typically 2-4% of EV) — they reduce Day 1 equity value
+- Tax considerations (asset vs. stock deal, 338(h)(10) election) can materially affect after-tax returns
diff --git a/sector-overview/SKILL.md b/sector-overview/SKILL.md
new file mode 100644
index 0000000..fa6829c
--- /dev/null
+++ b/sector-overview/SKILL.md
@@ -0,0 +1,98 @@
+---
+name: sector-overview
+description: Create comprehensive industry and sector landscape reports covering market dynamics, competitive positioning, key players, and thematic trends. Use for client requests, sector initiations, thematic research pieces, or internal knowledge building. Triggers on "sector overview", "industry report", "market landscape", "sector analysis", "industry deep dive", or "thematic research".
+---
+
+# Sector Overview
+
+## Workflow
+
+### Step 1: Define Scope
+
+- **Sector / subsector**: What industry and how narrowly defined?
+- **Purpose**: Client report, internal research, pitch material, idea generation
+- **Depth**: High-level overview (5-10 pages) or deep dive (20-30 pages)
+- **Angle**: Neutral landscape vs. thematic thesis (e.g., "AI infrastructure buildout")
+- **Universe**: Public companies only, or include private?
+
+### Step 2: Market Overview
+
+**Market Size & Growth**
+- Total addressable market (TAM) with source
+- Historical growth rate (5-year CAGR)
+- Forecast growth rate and key assumptions
+- Market segmentation (by product, geography, end market, customer type)
+
+**Industry Structure**
+- Fragmented vs. consolidated — top 5 market share
+- Value chain map — where does value accrue?
+- Business model types (subscription, transaction, licensing, services)
+- Barriers to entry (capital, regulatory, technical, network effects)
+
+**Key Trends & Drivers**
+- Secular tailwinds (3-5 major trends)
+- Headwinds and risks
+- Technology disruption vectors
+- Regulatory developments
+- M&A activity and consolidation trends
+
+### Step 3: Competitive Landscape
+
+**Company Profiles** (for top 5-10 players):
+
+| Company | Revenue | Growth | EBITDA Margin | Market Share | Key Differentiator |
+|---------|---------|--------|--------------|-------------|-------------------|
+| | | | | | |
+
+For each company, brief profile:
+- Business description (2-3 sentences)
+- Strategic positioning and moat
+- Recent developments (earnings, M&A, product launches)
+- Valuation snapshot (P/E, EV/EBITDA, EV/Revenue)
+
+**Competitive Dynamics**
+- How do companies compete? (price, product, service, distribution)
+- Who is gaining/losing share and why?
+- Disruption risk from new entrants or adjacent players
+
+### Step 4: Valuation Context
+
+- Sector trading multiples (current and historical range)
+- Premium/discount drivers (growth, margins, market position)
+- Recent M&A transaction multiples
+- How does the sector compare to the broader market?
+
+### Step 5: Investment Implications
+
+- Where are the best risk/reward opportunities?
+- What thematic bets can be expressed through this sector?
+- Key debates in the sector (bull vs. bear arguments)
+- Catalysts that could change the sector narrative
+
+### Step 6: Output
+
+- Word document or PowerPoint with:
+ - Market overview and sizing
+ - Competitive landscape map
+ - Company comparison table
+ - Valuation summary
+ - Key charts: market growth, share trends, valuation history
+- Excel appendix with detailed company data
+
+## Important Notes
+
+- Source all market size data — cite the research firm or methodology
+- Distinguish between TAM hype and realistic addressable market
+- Sector overviews age fast — note the date and flag data that may be stale
+- Charts are essential — market size waterfall, competitive positioning matrix, valuation scatter plot
+- If for a client, tailor the "so what" to their specific situation (M&A target identification, competitive positioning, market entry)
+
+## Data sources (Rebyte)
+
+This deployment is wired to the Rebyte Financial Data Service (see the sibling `data` skill for auth and query mechanics).
+
+- **Company comparison table** — `us.fundamentals` (revenue, growth, EBITDA margin) via `financial/sql` + `us.eod` / `stocks/details` for multiples. Market share proxied as revenue share within the defined universe.
+- **Sector multiple history charts** — `us.eod` + trailing `us.fundamentals`.
+- **Universe construction** — US: seed manually, then expand via `stocks/related` + `stocks/search` (no index/sector membership feed). CN is easier: `cn-stocks/universe` carries industry labels; metrics from `cn.daily_basic` + `cn.fina_indicator`.
+- **Trends / M&A activity / regulatory narrative** — `financial/search` semantic search over `us.news`; CN: `cn-stocks/news`.
+- **Not available** (user-supply or web): TAM / market-size estimates, M&A precedent-transaction multiples.
diff --git a/strip-profile/SKILL.md b/strip-profile/SKILL.md
new file mode 100644
index 0000000..1afa7bd
--- /dev/null
+++ b/strip-profile/SKILL.md
@@ -0,0 +1,396 @@
+---
+name: fsi-strip-profile
+description: |
+ Creates professional investment banking strip profiles (company profiles) for pitch books, deal materials, and client presentations. Generates 1-4 information-dense slides with quadrant layouts, charts, and tables.
+---
+
+## Workflow
+
+### 1. Clarify Requirements
+- **Ask the user**: Single-slide or multi-slide (3-4 slides)?
+- **Ask the user**: Any specific focus areas or topics to emphasize?
+- **Only after user confirms**, proceed to research
+
+### 2. Research & Planning
+**Data Sources:**
+- **Primary**: Company filings (BamSEC, SEC EDGAR - "Item 1. Business", MD&A), investor presentations, corporate website
+- **Market data**: Bloomberg, FactSet, CapIQ (price, shares, market cap, net debt, EV, ownership)
+- **Estimates**: FactSet/CapIQ consensus for NTM revenue, EBITDA, EPS
+- **News**: Press releases from last 90 days, M&A activity, guidance changes
+
+**Required Metrics:**
+- **Financials**: Revenue, EBITDA, margins (%), EPS, FCF for ±3 years
+- **Valuation**: Market Cap, EV, EV/Revenue, EV/EBITDA, P/E multiples
+- **Growth**: YoY growth rates (%)
+- **Ownership**: Top 5 shareholders with % ownership
+- **Segments**: Product mix and/or geographic mix (% breakdown)
+
+**Normalization:**
+- Convert all amounts to consistent currency
+- Scale consistently ($mm or $bn throughout, not mixed)
+
+**Before Building:**
+- Print outline to chat with 4-5 bullet points per item (actual numbers, no placeholders)
+- Print style choices: fonts, colors (hex codes), chart types for each data set
+- Get user alignment: "Does this outline and visual strategy align with your vision?"
+
+### 3. Slide-by-Slide Creation
+**CRITICAL: You MUST create ONE slide at a time and get user approval before proceeding to the next slide.**
+
+**For EACH slide:**
+1. Create ONLY this one slide with PptxGenJS
+2. **MANDATORY: Convert to image for review** - You MUST convert slides to images so you can visually verify them:
+ ```bash
+ soffice --headless --convert-to pdf presentation.pptx
+ pdftoppm -jpeg -r 150 -f 1 -l 1 presentation.pdf slide
+ ```
+3. **MANDATORY VISUAL REVIEW**: You MUST carefully examine the rendered slide image before proceeding:
+ - **Text overlap check**: Scan every text element - do any labels, bullets, or titles collide with each other?
+ - **Text cutoff check**: Is any text truncated at boundaries? Are all words fully visible?
+ - **Chart boundary check**: Do charts stay within their containers? Are ALL axis labels fully visible?
+ - **Quadrant integrity**: Does content in one quadrant bleed into adjacent quadrants?
+4. **If ANY overlap or cutoff is detected**: Fix immediately using these strategies in order:
+ - **First**: Reduce font size (go down 1-2pt)
+ - **Second**: Shorten text (abbreviate, remove less critical info)
+ - **Third**: Adjust element positions or container sizes
+ - **Re-render and verify again** - do not proceed until all text fits cleanly
+5. Show slide image to user with download link
+6. **STOP and wait for explicit user approval** before creating the next slide. Do NOT proceed until user confirms.
+
+**YOU MUST CHECK FOR THESE SPECIFIC ISSUES ON EVERY PAGE:**
+- Table rows colliding with text below them
+- Chart x-axis labels cut off at bottom
+- Long bullet points wrapping into adjacent content
+- Quadrant content bleeding into adjacent quadrants
+- Title text overlapping with content below
+- Legend text overlapping with chart elements
+- Footer/source text colliding with main content
+
+---
+
+## Slide Format Requirements
+
+### Information Density is Critical
+
+**The #1 goal is MAXIMUM information density.** A busy executive should understand the entire company story in 30 seconds. Fill every quadrant to capacity.
+
+**Per quadrant targets:**
+- **Company Overview**: 6-8 bullets minimum (HQ, founded, employees, CEO/CFO, market cap, ticker, industry, key stat)
+- **Business & Positioning**: 6-8 bullets (revenue drivers, products, market share %, competitive moat, customer count, geographic mix)
+- **Key Financials**: Table with 8-10 rows OR chart + 4-5 key metrics (Revenue, EBITDA, margins, EPS, FCF, growth rates, valuation multiples)
+- **Fourth quadrant**: 5-7 bullets (ownership %, recent M&A, developments, catalysts)
+
+**Information packing techniques:**
+- Combine related facts: "HQ: Austin, TX; Founded: 2003; 140K employees"
+- Always include numbers: "$50B revenue" not "large revenue"
+- Add context: "EBITDA margin: 25% (vs. 18% industry avg)"
+- Include YoY changes: "Revenue: $125M (+28% YoY)"
+- Use percentages: "Enterprise: 62% of revenue"
+
+**If a quadrant looks sparse, add more:**
+- Segment breakdowns with %
+- Geographic revenue splits
+- Customer concentration (top 10 = X%)
+- Recent contract wins with $ values
+- Guidance vs. consensus
+- Insider ownership %
+
+**Line spacing - use single textbox per section:**
+```python
+def add_section(slide, x, y, w, header_text, bullets, header_size=10, bullet_size=8):
+ """Header + bullets in single textbox with natural spacing"""
+ tb = slide.shapes.add_textbox(x, y, w, Inches(len(bullets) * 0.18 + 0.3))
+ tf = tb.text_frame
+ tf.word_wrap = True
+
+ # Header paragraph
+ p = tf.paragraphs[0]
+ p.text = header_text
+ p.font.bold = True
+ p.font.size = Pt(header_size)
+ p.font.color.rgb = RGBColor(0, 51, 102)
+ p.space_after = Pt(6) # Small gap after header
+
+ # Bullet paragraphs
+ for bullet in bullets:
+ p = tf.add_paragraph()
+ p.text = bullet
+ p.font.size = Pt(bullet_size)
+ p.space_after = Pt(3)
+ return tb
+```
+
+**Key spacing principles:**
+- Put header + bullets in SAME textbox (no separate header textbox)
+- Use `space_after = Pt(6)` after header, `Pt(3)` between bullets
+- Don't hardcode gaps - let paragraph spacing handle it naturally
+- If content overflows, reduce font by 1pt rather than removing content
+
+---
+
+- **3-4 dense slides** - use quadrants, columns, tables, charts
+- **Bullets for ALL body text** - NEVER paragraphs. **Use ONE textbox per section with all bullets inside** - do NOT create separate textboxes for each bullet point. Use PptxGenJS bullet formatting:
+ ```javascript
+ // CORRECT: Single textbox with bullet list - each array item becomes a bullet
+ // Position in top-left quadrant (Company Overview) - after header with accent bar
+ slide.addText(
+ [
+ { text: 'Headquarters: Austin, Texas; Founded 2003', options: { bullet: { indent: 10 }, breakLine: true } },
+ { text: 'Employees: 140,000+ globally across 6 continents', options: { bullet: { indent: 10 }, breakLine: true } },
+ { text: 'CEO: Elon Musk; CFO: Vaibhav Taneja', options: { bullet: { indent: 10 }, breakLine: true } },
+ { text: 'Market Cap: $850B (#6 globally by market cap)', options: { bullet: { indent: 10 }, breakLine: true } },
+ { text: 'Segments: Automotive (85%), Energy (10%), Services (5%)', options: { bullet: { indent: 10 } } }
+ ],
+ { x: 0.45, y: 0.95, w: 4.5, h: 2.6, fontSize: 11, fontFace: 'Arial', valign: 'top', paraSpaceAfter: 6 }
+ );
+
+ // WRONG: Multiple separate textboxes for each bullet - causes alignment issues
+ // slide.addText('Headquarters: Austin', { x: 0.5, y: 1.0, bullet: true });
+ ```
+
+ **Bullet formatting tips:**
+ - `bullet: { indent: 10 }` - controls bullet indentation (smaller = tighter)
+ - `paraSpaceAfter: 6` - space after each paragraph in points
+ - Pack multiple related facts into each bullet (e.g., "HQ: Austin; Founded: 2003")
+ - Include specific numbers and percentages for information density
+- **Title case** for titles (not ALL CAPS), left-aligned
+- **Consistent fonts** everywhere including tables
+- **Company's brand colors** - YOU MUST research actual brand colors via web search before creating slides. Do not guess or assume colors.
+- **Follow brand guidelines if provided**
+
+### Visual Reference
+No example deck is bundled in this deployment — follow the layout specs above. Adapt colors to each company's brand.
+
+---
+
+## First Page Layout
+
+Must pass "30-second comprehension test" for a busy executive.
+
+### Slide Setup (CRITICAL)
+**Use 4:3 aspect ratio** (standard IB pitch book format):
+```javascript
+const pptx = new pptxgen();
+pptx.layout = 'LAYOUT_4x3'; // 10" wide × 7.5" tall - MUST USE THIS
+```
+
+### Slide Coordinate System
+PptxGenJS uses inches. 4:3 slide = **10" wide × 7.5" tall**.
+- **x**: horizontal position from left edge (0 = left, 10 = right)
+- **y**: vertical position from top edge (0 = top, 7.5 = bottom)
+- **Content must stay within bounds** - leave 0.3" margin on all sides
+
+### First Page Positioning (in inches)
+```
+┌─────────────────────────────────────────────────────────────────┐
+│ y=0.2 Title: Company Name (Ticker) │
+├────────────────────────────┬────────────────────────────────────┤
+│ y=0.6 Company Overview │ y=0.6 Business & Positioning │
+│ x=0.3, w=4.7 │ x=5.0, w=4.7 │
+│ h=3.0 │ h=3.0 │
+├────────────────────────────┼────────────────────────────────────┤
+│ y=3.7 Key Financials │ y=3.7 Stock/Recent Developments │
+│ x=0.3, w=4.7 │ x=5.0, w=4.7 │
+│ h=3.5 │ h=3.5 │
+└────────────────────────────┴────────────────────────────────────┘
+ y=7.5
+```
+
+### Title Section (y=0.2)
+**Company Name (Ticker)** - Example: `Tesla, Inc. (TSLA)`
+```javascript
+slide.addText('Tesla, Inc. (TSLA)', { x: 0.3, y: 0.2, w: 9.4, h: 0.35, fontSize: 18, bold: true });
+```
+
+### 4-Quadrant Layout (y=0.6 to y=7.2)
+
+| Quadrant | Position | Content |
+|----------|----------|---------|
+| **1** | x=0.3, y=0.6, w=4.7, h=3.0 | **Company Overview**: HQ, founded, key stats, business summary (4-5 bullets) |
+| **2** | x=5.0, y=0.6, w=4.7, h=3.0 | **Business & Positioning**: revenue drivers, products/services, competitive position, growth drivers (4-5 bullets) |
+| **3** | x=0.3, y=3.7, w=4.7, h=3.5 | **Key Financials**: Revenue, EBITDA, margins, EPS, FCF + Valuation (Mkt Cap, EV, multiples) — **table OR chart, not both** |
+| **4** | x=5.0, y=3.7, w=4.7, h=3.5 | **For public companies**: 1Y stock price chart + top shareholders. **For private**: Recent developments or Ownership/M&A history |
+
+### Font Sizes - USE THESE EXACT VALUES
+| Element | Size | Notes |
+|---------|------|-------|
+| Slide title | 24pt | Bold, company brand color |
+| Quadrant headers | 14pt | Bold, with accent bar |
+| Body/bullet text | 11pt | Regular weight |
+| Table text | 10pt | Use 9pt for dense tables |
+| Chart labels | 9pt | Keep labels short |
+| Source/footer | 8pt | Bottom of slide |
+
+**CRITICAL: If text overflows, REDUCE font size by 1pt and re-render.**
+
+### Visual Accents (REQUIRED)
+Each quadrant header MUST have a colored accent bar to the left:
+```javascript
+// Add accent bar for quadrant header
+slide.addShape(pptx.shapes.RECTANGLE, {
+ x: 0.3, y: 0.6, w: 0.08, h: 0.25,
+ fill: { color: 'E31937' } // Use company brand color
+});
+slide.addText('Company Overview', {
+ x: 0.45, y: 0.6, w: 4.5, h: 0.3, fontSize: 14, bold: true, fontFace: 'Arial'
+});
+```
+
+**Visual elements to include:**
+- Accent bars next to all section headers (brand color)
+- Thin horizontal divider line between top and bottom quadrants
+- Company logo in top-right corner if available
+- Subtle gridlines in tables (light gray #CCCCCC)
+
+### First Page Formatting
+- **Font: Arial** (or as specified by user/brand guidelines)
+- **Quadrant titles**: Title Case (not ALL CAPS), e.g., "Company Overview" not "COMPANY OVERVIEW"
+- **Bullets**: Bold key terms at start, e.g., "**Market Position:** Leading global manufacturer..."
+- White background only — no boxes, fills, or shading
+- Section headers: bold text, follow brand guidelines for styling
+- All quadrants equally sized and aligned
+
+---
+
+## Subsequent Pages: Free-Form Layouts
+
+- Two-column (40/60 or 50/50), full-slide charts, or sidebar layouts
+- Each page elaborates on first page content
+- Maintain consistent typography and color scheme
+- Suggested flow: Products/Market → Financial Analysis → Leadership
+
+---
+
+## Charts (Multi-Slide Profiles)
+
+**For multi-slide profiles**: Include 2-3 actual PptxGenJS charts. Never use placeholder divs or static images.
+
+**For single-slide profiles**: Use tables for financials (more space-efficient). Only add a chart if it replaces the table, not in addition to it.
+
+| Data Type | Chart Type |
+|-----------|------------|
+| Revenue trends | Line or column (multi-year) |
+| Geographic breakdown | Horizontal bar |
+| Product mix | Pie with percentages |
+| Financial comparison | Column |
+| Stock price (1Y daily) | Line |
+
+### Chart Code Examples
+
+**Horizontal Bar (fits in bottom-right quadrant for 4:3 slide):**
+```javascript
+slide.addChart(pptx.charts.BAR, [{
+ name: 'FY2024 Revenue by Region',
+ labels: ['North America', 'EMEA', 'China', 'APLA'],
+ values: [21.4, 13.6, 7.6, 6.7]
+}], {
+ x: 5.0, y: 4.1, w: 4.5, h: 3.0, // Fits in bottom-right quadrant (4:3)
+ barDir: 'bar', chartColors: ['FF6B35'], showValue: true,
+ dataLabelFontSize: 10, catAxisLabelFontSize: 10, valAxisLabelFontSize: 10,
+ dataLabelFormatCode: '$#,##0.0B',
+ title: 'Revenue by Geography', titleFontSize: 12, titleBold: true
+});
+```
+
+**Pie Chart (fits in bottom-right quadrant for 4:3 slide):**
+```javascript
+slide.addChart(pptx.charts.PIE, [{
+ name: 'Product Mix',
+ labels: ['Footwear', 'Apparel', 'Equipment'],
+ values: [68, 29, 3]
+}], {
+ x: 5.0, y: 4.1, w: 4.5, h: 3.0, // Fits in bottom-right quadrant (4:3)
+ showPercent: true, showLegend: true, legendPos: 'r',
+ dataLabelFontSize: 10, legendFontSize: 10,
+ chartColors: ['FF6B35', '2C2C2C', '4A4A4A'],
+ title: 'Revenue Mix FY24', titleFontSize: 12, titleBold: true
+});
+```
+
+**Line Chart (full width for subsequent slides):**
+```javascript
+slide.addChart(pptx.charts.LINE, [{
+ name: 'Revenue ($B)',
+ labels: ['FY21', 'FY22', 'FY23', 'FY24', 'FY25E'],
+ values: [44.5, 46.7, 48.5, 51.4, 54.2]
+}], {
+ x: 0.3, y: 1.2, w: 9.4, h: 5.5, // Full width for 4:3 slide
+ chartColors: ['FF6B35'], showValue: true, lineSmooth: true,
+ dataLabelFontSize: 11, catAxisLabelFontSize: 11, valAxisLabelFontSize: 11,
+ title: 'Revenue Trend & Forecast', titleFontSize: 14, titleBold: true
+});
+```
+
+---
+
+## Financial Data Formatting
+
+**Always use native PptxGenJS tables or charts - NEVER plain text prose or HTML tables.**
+
+Use `slide.addTable()` for financial data (fits in bottom-left quadrant for 4:3 slide):
+```javascript
+// Add header with accent bar first
+slide.addShape(pptx.shapes.RECTANGLE, {
+ x: 0.3, y: 3.7, w: 0.08, h: 0.25, fill: { color: 'E31937' }
+});
+slide.addText('Key Financials & Valuation', {
+ x: 0.45, y: 3.7, w: 4.5, h: 0.3, fontSize: 14, bold: true, fontFace: 'Arial'
+});
+
+// Financial data table
+slide.addTable([
+ [{ text: 'Metric', options: { bold: true, fill: '003366', color: 'FFFFFF' } },
+ { text: 'FY24', options: { bold: true, fill: '003366', color: 'FFFFFF' } },
+ { text: 'FY25E', options: { bold: true, fill: '003366', color: 'FFFFFF' } }],
+ ['Revenue', '$51.4B', '$54.2B'],
+ ['YoY Growth', '+6.0%', '+5.5%'],
+ ['EBITDA', '$8.9B', '$9.5B'],
+ ['EBITDA Margin', '17.3%', '17.5%'],
+ ['EPS', '$3.42', '$3.75'],
+ ['Market Cap', '$185B', '—'],
+ ['EV/EBITDA', '12.5x', '11.7x']
+], {
+ x: 0.45, y: 4.1, w: 4.3, h: 3.0, // Below header in bottom-left quadrant
+ fontFace: 'Arial', fontSize: 10,
+ border: { pt: 0.5, color: 'CCCCCC' },
+ valign: 'middle',
+ colW: [1.8, 1.25, 1.25] // Column widths
+});
+```
+
+❌ **Incorrect:** Plain text like `Note: FY2024 revenue growth +1.0%, Net Income $5.1B...`
+❌ **Incorrect:** HTML tables that don't convert properly to PowerPoint
+
+For projections, use Bear/Base/Bull case scenarios in structured tables.
+
+---
+
+## Quality Checklist
+
+### First Page
+- [ ] Title section with company name, ticker, industry
+- [ ] Exactly 4 equal quadrants below title
+- [ ] All bullets, no paragraphs, 1 line max each
+- [ ] Financials in table or chart (not both)
+
+### All Slides
+- [ ] No text overflow or cutoff
+- [ ] Consistent fonts and colors throughout
+- [ ] Charts render correctly
+- [ ] No placeholder text - all actual data
+- [ ] Consistent scaling ($mm or $bn, not mixed)
+- [ ] Sources cited
+- [ ] Investment banking quality (GS/MS/JPM standard)
+
+**Note:** Reference the **PPTX skill** for PowerPoint file creation.
+
+## Data sources (Rebyte)
+
+This deployment is wired to the Rebyte Financial Data Service (see the sibling `data` skill for auth and query mechanics) instead of FactSet/CapIQ.
+
+- **Company Overview quadrant** — `stocks/details` (name, HQ, employees, market cap, industry) + `stocks/search` / `stocks/related`.
+- **Key Financials table** (±3y revenue/EBITDA/margins/EPS/FCF) — `us.fundamentals` via `financial/sql` or `stocks/financials`; EV = market cap (`stocks/details`) + net debt (balance-sheet columns). Multiples computed from these.
+- **1Y stock price chart** — `us.eod` or `stocks/bars` (daily).
+- **Recent Developments quadrant** — `financial/search` semantic search over `us.news` (90-day window) or `stocks/news`.
+- **Dividends / splits context** — `stocks/dividends`, `stocks/splits`.
+- **Not available** (drop the column/section or user-supply): forward "FY-E" consensus columns, top-shareholder/ownership bullets (no 13F), segment/geographic revenue mix.
diff --git a/teaser/SKILL.md b/teaser/SKILL.md
new file mode 100644
index 0000000..cd89f45
--- /dev/null
+++ b/teaser/SKILL.md
@@ -0,0 +1,80 @@
+---
+name: teaser
+description: Draft anonymous one-page company teasers for sell-side M&A processes. Creates a compelling summary without revealing the company's identity, designed to gauge buyer interest before NDA execution. Triggers on "teaser", "blind teaser", "anonymous profile", "one-pager for process", or "draft teaser for sell-side".
+---
+
+# Teaser
+
+## Workflow
+
+### Step 1: Gather Inputs
+
+- Company description (what they do, how they make money)
+- Sector / industry
+- Key financial metrics: revenue, EBITDA, growth rate, margins
+- Geographic footprint
+- Key selling points (3-5 highlights)
+- What to anonymize vs. disclose
+- Target buyer audience (strategic, financial, or both)
+
+### Step 2: Teaser Structure
+
+One page, professionally formatted:
+
+**Header**
+- Deal code name (e.g., "Project [Name]")
+- Sector descriptor (e.g., "Leading Specialty Industrial Services Platform")
+- "Confidential — For Discussion Purposes Only"
+
+**Company Description** (2-3 sentences)
+- What the company does, without naming it
+- Market position (e.g., "a leading provider of...", "a top-3 player in...")
+- Geography (region-level, not city-specific)
+
+**Investment Highlights** (4-6 bullet points)
+- Market leadership / positioning
+- Revenue quality (recurring %, retention, diversification)
+- Growth profile and trajectory
+- Margin profile and expansion opportunity
+- Management team strength
+- Strategic value / synergy potential
+
+**Financial Summary** (table or key metrics)
+
+| Metric | Value |
+|--------|-------|
+| Revenue | $XXM |
+| Revenue Growth | XX% CAGR |
+| EBITDA | $XXM |
+| EBITDA Margin | XX% |
+| Employees | XXX |
+
+**Transaction Overview** (2-3 sentences)
+- What's being offered (100% sale, majority stake, growth equity)
+- Indicative timeline
+- Contact information for expressions of interest
+
+### Step 3: Anonymization Check
+
+Ensure the teaser doesn't inadvertently identify the company:
+- No company name, brand names, or product names
+- No specific city (use region: "Southeast US", "Midwest")
+- No named customers or partners
+- No employee count if it's too distinctive
+- Revenue ranges instead of exact figures if the sector is small
+- No logos, screenshots, or identifiable imagery
+
+### Step 4: Output
+
+- Word document (.docx) — one page, clean formatting
+- PDF version for distribution
+- Optional PowerPoint version (single slide)
+
+## Important Notes
+
+- The teaser's job is to generate interest, not close a deal — keep it tight and compelling
+- Less is more — a good teaser makes buyers want to sign the NDA to learn more
+- Use aspirational but accurate language — "leading", "differentiated", "high-growth" are fine if true
+- Include enough financial detail to qualify serious buyers but not so much that tire-kickers waste your time
+- Always have the client and legal review before distribution
+- Track who receives the teaser — it becomes the outreach log for the process
diff --git a/thesis-tracker/SKILL.md b/thesis-tracker/SKILL.md
new file mode 100644
index 0000000..58fb286
--- /dev/null
+++ b/thesis-tracker/SKILL.md
@@ -0,0 +1,76 @@
+---
+name: thesis-tracker
+description: Maintain and update investment theses for portfolio positions and watchlist names. Track key data points, catalysts, and thesis milestones over time. Use when updating a thesis with new information, reviewing position rationale, or checking if a thesis is still intact. Triggers on "update thesis for [company]", "is my thesis still intact", "thesis check", "add data point to [company]", or "review my positions".
+---
+
+# Thesis Tracker
+
+## Workflow
+
+### Step 1: Define or Load Thesis
+
+If creating a new thesis:
+- **Company**: Name and ticker
+- **Position**: Long or Short
+- **Thesis statement**: 1-2 sentence core thesis (e.g., "Long ACME — margin expansion from pricing power + operating leverage as mix shifts to software")
+- **Key pillars**: 3-5 supporting arguments
+- **Key risks**: 3-5 risks that would invalidate the thesis
+- **Catalysts**: Upcoming events that could prove/disprove the thesis (earnings, product launches, regulatory decisions)
+- **Target price / valuation**: What's it worth if the thesis plays out
+- **Stop-loss trigger**: What would make you exit
+
+If updating an existing thesis, ask the user for the new data point or development.
+
+### Step 2: Update Log
+
+For each new data point or development:
+
+- **Date**: When this happened
+- **Data point**: What changed (earnings beat, management departure, competitor move, etc.)
+- **Thesis impact**: Does this strengthen, weaken, or neutralize a specific pillar?
+- **Action**: No change / Increase position / Trim / Exit
+- **Updated conviction**: High / Medium / Low
+
+### Step 3: Thesis Scorecard
+
+Maintain a running scorecard:
+
+| Pillar | Original Expectation | Current Status | Trend |
+|--------|---------------------|----------------|-------|
+| Revenue growth >20% | On track | Q3 was 22% | Stable |
+| Margin expansion | Behind | Margins flat YoY | Concerning |
+| New product launch | Pending | Delayed to Q2 | Watch |
+
+### Step 4: Catalyst Calendar
+
+Track upcoming catalysts:
+
+| Date | Event | Expected Impact | Notes |
+|------|-------|-----------------|-------|
+| | | | |
+
+### Step 5: Output
+
+Thesis summary suitable for:
+- Morning meeting discussion
+- Portfolio review
+- Risk committee presentation
+
+Format: Concise markdown or Word doc with the scorecard, recent updates, and current conviction level.
+
+## Important Notes
+
+- A thesis should be falsifiable — if nothing could disprove it, it's not a thesis
+- Track disconfirming evidence as rigorously as confirming evidence
+- Review theses at least quarterly, even when nothing dramatic has happened
+- If the user manages multiple positions, offer to do a full portfolio thesis review
+- Store thesis data in a structured format so it can be referenced across sessions
+
+## Data sources (Rebyte)
+
+This deployment verifies thesis pillars against the Rebyte Financial Data Service (see the sibling `data` skill for auth and query mechanics).
+
+- **Pillar scorecard checks** ("was Q3 revenue growth >20%? are margins expanding?") — `us.fundamentals` via `financial/sql`; CN positions: `cn.fina_indicator`.
+- **Price vs target / stop-loss triggers** — `us.eod` or `stocks/bars`; keep targets split-adjusted with `stocks/splits` / `stocks/dividends`.
+- **New data points / disconfirming evidence** — `financial/search` semantic search over `us.news` per ticker (management departures, competitor moves); `stocks/news` for ticker-tagged flow.
+- **Not available**: forward catalyst dates (no earnings calendar) — source catalyst timing from announced dates in news or from the user.
diff --git a/unit-economics/SKILL.md b/unit-economics/SKILL.md
new file mode 100644
index 0000000..52a3ed8
--- /dev/null
+++ b/unit-economics/SKILL.md
@@ -0,0 +1,95 @@
+---
+name: unit-economics
+description: Analyze unit economics for PE targets — ARR cohorts, LTV/CAC, net retention, payback periods, revenue quality, and margin waterfall. Essential for software/SaaS, recurring revenue, and subscription businesses. Use when evaluating revenue quality, building a cohort analysis, or assessing customer economics. Triggers on "unit economics", "cohort analysis", "ARR analysis", "LTV CAC", "net retention", "revenue quality", or "customer economics".
+---
+
+# Unit Economics Analysis
+
+## Workflow
+
+### Step 1: Identify Business Model
+
+Determine the revenue model to tailor the analysis:
+- **SaaS / Subscription**: ARR, net retention, cohorts
+- **Recurring services**: Contract value, renewal rates, upsell
+- **Transaction / usage-based**: Revenue per transaction, volume trends, take rate
+- **Hybrid**: Break down by revenue stream
+
+### Step 2: Core Metrics
+
+#### ARR / Revenue Quality
+- **ARR bridge**: Beginning ARR → New → Expansion → Contraction → Churn → Ending ARR
+- **ARR by cohort**: Vintage analysis — how does each annual cohort retain and grow?
+- **Revenue concentration**: Top 10/20/50 customers as % of total
+- **Revenue by type**: Recurring vs. non-recurring vs. professional services
+- **Contract structure**: ACV distribution, multi-year %, auto-renewal %
+
+#### Customer Economics
+- **CAC (Customer Acquisition Cost)**: Total S&M spend / new customers acquired
+- **LTV (Lifetime Value)**: (ARPU × Gross Margin) / Churn Rate
+- **LTV:CAC ratio**: Target >3x for healthy businesses
+- **CAC payback period**: Months to recover acquisition cost
+- **Blended vs. segmented**: Break down by customer segment (enterprise vs. SMB vs. mid-market)
+
+#### Retention & Expansion
+- **Gross retention**: % of beginning ARR retained (excludes expansion)
+- **Net retention (NDR)**: % of beginning ARR retained including expansion
+- **Logo churn**: % of customers lost
+- **Dollar churn**: % of revenue lost (often different from logo churn)
+- **Expansion rate**: Upsell + cross-sell as % of beginning ARR
+
+#### Cohort Analysis
+Build a cohort matrix showing:
+
+| Cohort | Year 0 | Year 1 | Year 2 | Year 3 | Year 4 |
+|--------|--------|--------|--------|--------|--------|
+| 2020 | $1.0M | $1.1M | $1.2M | $1.1M | |
+| 2021 | $1.5M | $1.7M | $1.8M | | |
+| 2022 | $2.0M | $2.3M | | | |
+| 2023 | $3.0M | | | | |
+
+Show both absolute $ and indexed (Year 0 = 100%) views.
+
+#### Margin Waterfall
+- Revenue → Gross Profit → Contribution Margin → EBITDA
+- Fully loaded unit economics: what does it cost to acquire, serve, and retain a customer?
+- Gross margin by revenue stream (subscription vs. services vs. other)
+
+### Step 3: Benchmarking
+
+Compare unit economics to relevant benchmarks:
+- **SaaS Rule of 40**: Growth rate + EBITDA margin > 40%
+- **SaaS Magic Number**: Net new ARR / prior period S&M spend > 0.75x
+- **NDR benchmarks**: Best-in-class >120%, good >110%, concerning <100%
+- **LTV:CAC**: Best-in-class >5x, good >3x, concerning <2x
+- **Gross retention**: Best-in-class >95%, good >90%, concerning <85%
+- **CAC payback**: Best-in-class <12mo, good <18mo, concerning >24mo
+
+### Step 4: Revenue Quality Score
+
+Synthesize into a revenue quality assessment:
+
+| Factor | Score (1-5) | Notes |
+|--------|-------------|-------|
+| Recurring % | | |
+| Net retention | | |
+| Customer concentration | | |
+| Cohort stability | | |
+| Growth durability | | |
+| Margin profile | | |
+| **Overall** | | |
+
+### Step 5: Output
+
+- Excel workbook with ARR bridge, cohort matrix, unit economics dashboard
+- Summary slide with key metrics and benchmarks
+- Red flags and areas for further diligence
+
+## Important Notes
+
+- Always ask for raw customer-level data if available — aggregate metrics can hide problems
+- NDR above 100% can mask high gross churn if expansion is strong enough — always show both
+- Cohort analysis is the single most important view for revenue quality — push for this data
+- Differentiate between contracted ARR and actual recognized revenue
+- For usage-based models, focus on consumption trends and expansion patterns rather than traditional ARR metrics
+- Professional services revenue should be evaluated separately — it's not recurring and margins are typically lower
diff --git a/xlsx-author/SKILL.md b/xlsx-author/SKILL.md
new file mode 100644
index 0000000..0d75786
--- /dev/null
+++ b/xlsx-author/SKILL.md
@@ -0,0 +1,42 @@
+---
+name: xlsx-author
+description: Produce a .xlsx file on disk (headless) instead of driving a live Excel workbook — for managed-agent sessions with no open Office app.
+---
+
+# xlsx-author
+
+Use this skill when running **headless** (managed-agent / CMA mode) and you need to deliver an Excel workbook as a **file artifact** rather than editing a live workbook via `mcp__office__excel_*`.
+
+## Output contract
+
+- Write to `./out/.xlsx`. Create `./out/` if it does not exist.
+- Return the relative path in your final message so the orchestration layer can collect it.
+
+## How to build the workbook
+
+Write a short Python script and run it with Bash. Use `openpyxl`:
+
+```python
+from openpyxl import Workbook
+from openpyxl.styles import Font, PatternFill
+
+wb = Workbook()
+ws = wb.active; ws.title = "Inputs"
+ws["B2"] = "Revenue"; ws["C2"] = 1_250_000_000
+ws["C2"].font = Font(color="0000FF") # blue = hardcoded input
+calc = wb.create_sheet("DCF")
+calc["C5"] = "=Inputs!C2*(1+Inputs!C3)" # black = formula
+wb.save("./out/model.xlsx")
+```
+
+## Conventions (mirror `audit-xls`)
+
+- **Blue / black / green.** Blue = hardcoded input, black = formula, green = link to another sheet/file.
+- **No hardcodes in calc cells.** Every calculation cell is a formula; every input lives on an Inputs tab.
+- **Named ranges** for any value referenced from a deck or memo.
+- **Balance checks.** Include a Checks tab that ties (BS balances, CF ties to cash, etc.) and surfaces TRUE/FALSE.
+- **One model per file.** Do not append to an existing workbook unless explicitly asked.
+
+## When NOT to use
+
+If `mcp__office__excel_*` tools are available (Cowork plugin mode), use those instead — they drive the user's live workbook with review checkpoints. This skill is the file-producing fallback for headless runs.