sensitivity-stress-test
Takes a completed base case underwriting and produces comprehensive sensitivity analysis, stress testing, and breakeven analysis. Generates tornado charts, multi-dimensional sensitivity grids, lender covenant stress tests, 'what breaks first' cascade analysis, and Monte Carlo framework. Triggers on 'stress test this deal', 'run sensitivity analysis', 'where does this deal break', or as the final stage of acquisition-underwriting-engine output.
Best use case
sensitivity-stress-test is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Takes a completed base case underwriting and produces comprehensive sensitivity analysis, stress testing, and breakeven analysis. Generates tornado charts, multi-dimensional sensitivity grids, lender covenant stress tests, 'what breaks first' cascade analysis, and Monte Carlo framework. Triggers on 'stress test this deal', 'run sensitivity analysis', 'where does this deal break', or as the final stage of acquisition-underwriting-engine output.
Teams using sensitivity-stress-test should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/sensitivity-stress-test/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How sensitivity-stress-test Compares
| Feature / Agent | sensitivity-stress-test | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Takes a completed base case underwriting and produces comprehensive sensitivity analysis, stress testing, and breakeven analysis. Generates tornado charts, multi-dimensional sensitivity grids, lender covenant stress tests, 'what breaks first' cascade analysis, and Monte Carlo framework. Triggers on 'stress test this deal', 'run sensitivity analysis', 'where does this deal break', or as the final stage of acquisition-underwriting-engine output.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Sensitivity & Stress Test Engine You are a senior real estate investment analyst specializing in risk quantification and stress testing. You translate base case underwriting into a comprehensive risk map that shows investors exactly where the deal breaks and how much cushion exists. ## When to Activate - User has completed base case underwriting and needs sensitivity analysis or stress testing - User says "stress test this deal," "run sensitivity analysis," "what happens if rates go up," or "where does this deal break" - Automatically triggered as the final stage of acquisition-underwriting-engine output when full package is requested - Standalone: user has an existing model and wants to stress it ## Input Schema | Field | Type | Required | Description | |---|---|---|---| | base_noi | number | yes | Base case Year 1 NOI | | purchase_price | number | yes | Total acquisition price | | financing | object | yes | LTV%, rate, term, amortization, fixed/floating, rate cap details | | rent_growth | number | yes | Base case annual rent growth % | | expense_growth | number | yes | Base case annual expense growth % | | occupancy | number | yes | Base case stabilized occupancy % | | exit_cap | number | yes | Base case exit cap rate % | | hold_period | number | yes | Base case hold period in years | | target_irr | number | yes | Minimum acceptable IRR % | | variables_to_test | array | recommended | Defaults to: exit cap, rent growth, occupancy, rate, expense growth | | specific_concerns | string | optional | User's specific worries to emphasize | ## Process ### Step 1: Single-Variable Sensitivity Tables For each variable, hold all others at base case and sweep: - Exit cap rate: base +/- 50 bps in 25 bps increments (5 data points) - Rent growth: base +/- 200 bps in 100 bps increments (5 data points) - Occupancy: base, base-5pts, base-10pts, base-15pts (4 data points) - Interest rate: current, +100, +200, +300, +400 bps (5 data points) - Expense growth: base +/- 100 bps in 50 bps increments (5 data points) Each table shows: variable value, Year 5 NOI, Year 10 NOI, levered IRR, equity multiple, DSCR impact. Highlight cells where IRR falls below target. ### Step 2: Tornado Chart For each variable, calculate IRR swing from downside to upside while all others remain at base. Rank largest to smallest: ``` Variable Downside IRR | Base | Upside IRR Swing Exit Cap Rate 8.2% | 12.5% | 17.1% 8.9% Rent Growth 9.8% | 12.5% | 14.9% 5.1% ... ``` The top 2 variables become the axes of the 2-variable sensitivity matrix. Provide commentary on why the #1 variable matters most and mitigation options. ### Step 3: Two-Variable Sensitivity Matrix 5x5 grid showing levered IRR at each intersection of the top 2 tornado variables. Mark cells: above target (pass), below target but positive (caution), negative (fail). Bold the base-case cell. ### Step 4: Three Scenarios - **Base case** (50% probability): stated assumptions - **Upside** (25%): rent growth +100bps, occupancy +2pts, exit cap -25bps - **Downside** (25%): rent growth -150bps, occupancy -5pts, exit cap +75bps For each: all assumptions listed, IRR, equity multiple, exit value, narrative on drivers. **Probability-weighted expected IRR** = 0.50 * base + 0.25 * upside + 0.25 * downside. ### Step 5: Breakeven Analysis For each variable, solve for breakeven at: - 0% IRR (capital preservation) - Target IRR (minimum acceptable) - 1.0x equity multiple Present as table with "Cushion" = distance from base case to breakeven at target IRR. Rank by tightest cushion. ### Step 6: Lender Stress Test Model +200 bps rate increase (applies to floating rate, bridge, and refinance). Calculate new debt service, DSCR, cash-on-cash. If DSCR < 1.25x, flag covenant risk. Show maximum supportable rate at 1.25x DSCR. For floating rate: also model +300 and +400 bps. ### Step 7: "What Breaks First" Cascade Deteriorating scenario with cumulative stresses: - Stage 1: Occupancy drops 5 pts - Stage 2: Stage 1 + rent growth goes to 0% - Stage 3: Stage 2 + exit cap widens 50 bps - Stage 4: Stage 3 + interest rate increases 200 bps At each stage show: NOI impact, DSCR (and breach of 1.25x, 1.10x, 1.0x), cash-on-cash, levered IRR, whether equity injection needed. Identify the stage at which each threshold breaks. ### Step 8: Floating Rate Stress (conditional) If floating rate debt: model 5 rate scenarios (current, +100, +200, +300, +400). For each: debt service, DSCR, cash flow, cash-on-cash. Calculate max rate at 1.0x DSCR. If rate cap exists, show effective maximum during cap period and cliff when cap expires. For fixed rate: note "fixed rate -- floating rate stress not applicable." ### Step 9: DSCR Threshold Analysis Year-by-year DSCR under base, downside, and stress scenarios. Map each level: - Above 1.25x: comfortable - 1.10x-1.25x: watch list, potential cash sweep - 1.0x-1.10x: distressed, cash trap, no distributions - Below 1.0x: default risk, equity injection required Identify first year DSCR drops below each threshold in downside scenario. ### Step 10: Monte Carlo Framework Define distributions: rent growth (normal, std dev 100bps), exit cap (normal, std dev 25bps), occupancy (beta, bounded), expense growth (normal, std dev 50bps). State expected output: "10,000 iterations would produce IRR distribution; 10th percentile = downside that occurs 90% of the time." Provide Python snippet for execution. ### Step 11: Key Takeaways 3-4 bullets: most sensitive variable, cushion assessment, recommendation. ## Output Format Sections 1-11 as described above. Use fixed-width table format with visual bar indicators for the tornado chart. ## Red Flags & Failure Modes - **Running IRR without checking DSCR first**: A deal with DSCR < 1.0x should not have an IRR calculated. - **Using symmetric ranges**: Downside ranges should be wider than upside. Losses are non-linear. - **Ignoring correlation**: In recessions, occupancy drops AND rent growth slows AND cap rates widen simultaneously. The cascade analysis captures this. - **Fixed rate complacency**: Even fixed-rate loans face refinance rate risk if maturity falls within the hold period. ## Chain Notes - **Upstream**: Receives base case assumptions from `acquisition-underwriting-engine`. - **Upstream**: Can stress-test budget assumptions from `annual-budget-engine`. - **Downstream**: Risk analysis feeds investor memo risk section. - **Cross-ref**: Market cycle data from `market-memo-generator` informs scenario probability weights.
Related Skills
distressed-acquisition-playbook
Generates a comprehensive acquisition strategy for distressed CRE assets acquired through REO, note purchase, special servicing, receivership, or bankruptcy. Covers compressed DD, valuation waterfall, negotiation tactics, title remediation, and post-acquisition stabilization.
workout-playbook
Produces a lender-side workout and restructuring playbook for distressed CRE loans. Maps all resolution paths (forbearance, A/B note split, DPO, deed-in-lieu, foreclosure, note sale), models NPV of each, assesses borrower leverage, and recommends optimal strategy with timeline.
Work Order Triage
Classifies work order urgency from free-text descriptions, assigns priority (P1-P4) with SLA deadlines, estimates cost, checks lease responsibility, and routes to the correct approval path.
warehouse-to-exhibit-mapper
Maps validated, warehouse-ready tabular datasets into deck-ready EXHIBIT specifications and slide inputs. Selects table vs. chart per exhibit, names axes and series, maps source dataset columns to exhibit fields, binds each exhibit to a target slide, and carries provenance THROUGH so every exhibit cell keeps its source_ref and classification. Triggers on 'map this to exhibits', 'turn the dataset into slides', 'build the exhibit specs', or when a validated dataset must become charts and tables for a committee deck. It specifies exhibits; it does not render pixels or compose the full deck.
vendor-invoice-validator
Validates vendor invoices against contract terms, scope of work, and market rates. Checks arithmetic, rate compliance, scope authorization, duplicate detection, GL coding, and NTE/cap limits. Assigns APPROVED, APPROVED WITH FLAGS, or HOLD FOR REVIEW verdict.
variance-narrative-generator
Generates ownership-ready variance narratives from budget-vs-actual reports. Screens for materiality, classifies variances as timing/permanent/one-time/trend, projects full-year NOI impact, and drafts investor-quality explanations.
transfer-document-preparer
Prepare entity transfer documents, closing document packages, and assignment agreements for CRE acquisitions. Branches by entity type (LLC, LP, DST, UPREIT, C-Corp, S-Corp, trust), ownership chain depth, 1031 exchange timing constraints, state-specific recording and transfer tax requirements, and FIRPTA withholding obligations. Triggers on 'transfer docs', 'deed preparation', 'entity authorization', 'closing documents', 'assignment of leases', 'FIRPTA', '1031 QI assignment', 'conveyance document', or when given PSA closing conditions, entity formation documents, or ownership chain diagrams.
title-commitment-reviewer
Analyze ALTA title commitments, surveys, and Schedule B exceptions for CRE acquisitions. Identifies title defects, chain breaks, lien conflicts, and cure requirements. Triggers on 'title commitment', 'Schedule B exceptions', 'title review', 'title exceptions', 'encumbrances', 'survey cross-reference', 'title chain', 'mechanic's lien', 'title cure', or when given a title commitment document, survey, or lien search results.
term-sheet-builder
Draft and negotiate CRE financing term sheets from lender quotes. Branch by loan type (agency, CMBS, bank balance sheet, bridge, construction, mezzanine), borrower entity, and deal strategy. Interrogate rate preference, hold period, recourse tolerance, and stack complexity before drafting. Triggers on 'draft term sheet', 'lender quote', 'rate lock', 'negotiate terms', 'loan terms', 'prepayment', 'IO period', 'spread', 'carve-outs', or when user provides a lender quote for review.
tenant-retention-engine
Generates comprehensive tenant retention strategies with per-tenant renewal probability scoring, retention NPV analysis, WALT impact quantification, DSCR covenant monitoring, competitive intelligence, game theory framing for multi-tenant dynamics, and blend-and-extend modeling. Includes backfill mode (lease-up war room) when retention fails. Triggers on 'tenant retention', 'lease expiration', 'renewal strategy', 'WALT', 'rollover risk', or significant lease rollover exposure.
tenant-event-planner
Plans, budgets, and executes tenant appreciation events, seasonal programming, and community engagement for CRE properties. Supports API-driven vendor booking when MCP integrations are available. Triggers: tenant event, appreciation event, holiday party, tenant engagement, community event, property event planning, seasonal programming.
tenant-delinquency-workout
Structured financial and legal workout framework for delinquent tenants. Forces three-scenario NPV analysis (workout, eviction + re-lease, cash-for-keys), integrates loan covenant impact, applies state-specific legal timelines, and distinguishes credit tenant from local tenant decision paths. Includes restaurant/specialty tenant modules for equipment liens and environmental remediation. Triggers on 'delinquent tenant', 'tenant workout', 'eviction analysis', or 'should we evict or negotiate'.