Skip to content
Agentmart
Submit a tool

risk-model-config

Invoke before analyze_portfolio_risk when the portfolio contains illiquid, private, or real estate holdings that lack yfinance market data.

Skill by hvkshetry

IndexedMIT★ 16
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/hvkshetry-risk-model-config

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Invoke before analyze_portfolio_risk when the portfolio contains illiquid, private, or real estate holdings that lack yfinance market data. Queries finance-graph for asset metadata and valuation history, then assembles the illiquid_overrides parameter for portfolio-analytics risk analysis.

Use cases: data, finance

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/risk-model-config

What's inside

Skill name
risk-model-config
Description
Invoke before analyze_portfolio_risk when the portfolio contains illiquid, private, or real estate holdings that lack yfinance market data. Queries finance-graph for asset metadata and valuation history, then assembles the illiquid_overrides parameter for portfolio-analytics risk analysis.
License
MIT
Instructions
144 lines in SKILL.md · view on GitHub

Files (1)

  • SKILL.md

SKILL.md (first lines)

# risk-model-config — Illiquid Risk Overlay Configuration

This skill runs **before** `portfolio-analytics.analyze_portfolio_risk` when the portfolio contains illiquid or private holdings that lack yfinance market data.

## Purpose

The portfolio-analytics risk engine drops symbols without yfinance data and renormalizes weights, causing risk to be computed on only the liquid slice. This skill bridges the gap by:

1. Querying finance-graph for illiquid asset metadata (PE, real estate, private holdings)
2. Estimating volatility and equity correlation for each illiquid position
3. Assembling the `illiquid_overrides` parameter for `analyze_portfolio_risk`

## MCP Tool Map

- Asset metadata: `finance-graph.list_assets`
- Valuation history: `finance-graph.list_valuation_observations`
- Portfolio context (liquid weights): `portfolio-analytics.get_condensed_portfolio_state`
- Risk analysis target: `portfolio-analytics.analyze_portfolio_risk`

## Execution Workflow

### 1. Identify Illiquid Positions

Query finance-graph for positions that will not have yfinance data:

```
finance-graph.list_assets(asset_class_code="securities")
finance-graph.list_assets(asset_class_code="real_estate")
```

Filter to positions with `data_source="MANUAL"` or no yfinance-compatible ticker.

### 2. Gather Valuation History

For each illiquid position, check for valuation time series:

```
finance-graph.list_valuation_observations(asset_id=<id>)
```

If a position has >= 8 quarterly observations, compute realized annual volatility from the observation series.

### 3. Check Valuation Staleness

For each illiquid position, after querying `finance-graph.list_valuation_observations(asset_id=...)`:

- Compute `days_since_valuation = (today - most_recent_observation.valuation_date).days`
- Classify with asset-class-specific thresholds:

| Asset Class    | Current       | Stale Mark     | Very Stale Mark |
|----------------|---------------|----------------|-----------------|
| Real Estate    | < 365 days    | 365–730 days   | > 730 days      |
| Private Equity | < 180 days    | 180–365 days   | > 365 days      |
| Other Illiquid | < 180 days    | 180–365 days   | > 365 days      |

- Vol uplift: `stale_mark` → +5pp to annual_vol, `very_stale_mark` → +10pp
- Include in override: `"valuation_age_days": N, "mark_staleness": "stale_mark"` or `"very_stale_mark"`
- The risk engine passes these fields through to output and generates alerts for `very_stale_mark`

### 4. Apply Category Defaults

For positions without sufficient valuation history, use these defaults:

| Asset Category | Annual Vol | ρ (equity) | Liquidity Discount |
|----------------|-----------|------------|-------------------|
| Private Equity (US) | 30% | 0.65 | 15% |
| Private Equity (India) | 35% | 0.50 | 20% |
| Real Estate (US) | 12% | 0.30 | 10% |
| Real Estate (India) | 15% | 0.20 | 15% |
| Venture / Early Stage | 40% | 0.40 | 25% |

These are conservative estimates. Override with realized data when available.

### 5. Compute Position Weights

For each illiquid position, compute its weight relative to total portfolio value (including liquid positions). Use `portfolio-analytics.get_condensed_portfolio_state` or `ghostfolio.portfolio(operation="summary")` to obtain total portfolio value.

### 6. Assemble illiquid_overrides

Build the list of override dicts:

```json
[
  {
    "symbol": "PVTCO",
    "weight": 0.10,
    "annual_vol": 0.30,
    "rho_equity": 0.65,
    "liquidity_discount": 0.15,
    "valuation_age_days": 200,
    "mark_staleness": "stale_mark"
  }
]
```

The `valuation_age_days` and `mark_staleness` fields are optional. When present, the risk engine passes them through to the overlay output and generates alerts for `very_stale_mark` positions.

### 7. Pass to Risk Analysis (First Pass)

Call `portfolio-analytics.analyze_portfolio_risk` with the assembled overrides, passing through any scope parameters from the calling skill:

```
portfolio-analytics.analyze_portfolio_risk(
  risk_model="auto",
  illiquid_overrides=<assembled list>,
  include_fx_risk=true
)
```

### 8. Regime-Conditional Adjustments (Second Pass)

After the first `analyze_portfolio_risk` call, check `vol_regime.current_regime`:

| Regime     | ρ Multiplier      | Vol Adjustment (India PE)               | Action                            |
|------------|-------------------|-----------------------------------------|-----------------------------------|
| low/normal | 1.0×              | none                                    | Use base overrides                |
| elevated   | 1.25× (cap 0.95)  | max(USDINR, NIFTY) vol ratio if > 1.0   | Re-run with stressed overrides    |
| crisis     | 1.50× (cap 0.95)  | max(USDINR, NIFTY) vol ratio if > 1.0   | Re-run with stressed overrides    |

From hvkshetry/StewardOS, MIT.

More from hvkshetry/StewardOS

Signals

Stars
16
Forks
7
Open issues
2
Last commit (this folder)
Mar 4, 2026 (7 months ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from hvkshetry

Cite this page

risk-model-config skill. Agent Mart. https://agentmart.dev/skills/hvkshetry-risk-model-config (last updated 2026-10-24)