8-k-scanner
Scan SEC 8-K disclosures across a single ticker or a watchlist using Massive's pre-parsed disclosure taxonomy. Groups the underlying rows by filing (one 8-K…
VaR (historical + parametric), Expected Shortfall, max drawdown, beta, tracking error, position variance contributions, concentration metrics, and worst-N historical stress scenarios for a portfolio. Pairs with portfolio-mark (which marks the book — risk-report tells you what
$ npx -y skills add rgourley/quant-garage --skill risk-report --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/risk-reportContext preview
The summary Claude sees to decide when to auto-load this skill.
VaR (historical + parametric), Expected Shortfall, max drawdown, beta, tracking error, position variance contributions, concentration metrics, and worst-N historical stress scenarios for a portfolio. Pairs with portfolio-mark (which marks the book — risk-report tells you what
name: risk-report description: VaR (historical + parametric), Expected Shortfall, max drawdown, beta, tracking error, position variance contributions, concentration metrics, and worst-N historical stress scenarios for a portfolio. Pairs with portfolio-mark (which marks the book — risk-report tells you what could happen to those marks). Use when a PM, risk officer, or quant needs the full risk picture on a current book.
You hand over a book — either inline weights or a positions JSON — and the skill returns the empirical risk picture: how volatile this book has been, how it co-moves with the benchmark, how bad the tail gets (VaR + Expected Shortfall), how deep the recent drawdown was, which historical days hurt most and which names did the damage, and which positions are doing the heavy lifting in the variance budget.
This is descriptive risk math on a current book. The script does NOT predict future returns. It tells you what the last N days of history say about how a book like the one you have just handed over has behaved.
what could it lose?"
(see [`examples/sample-book.json`](./examples/sample-book.json))
Optional:
configurable λ, default 0.94, that responds faster to recent regime shifts)
Two output layers from one analysis.
**Layer 1: canonical JSON** matching [`output-schema.json`](./output-schema.json). Per-book stats (vol, return, Sharpe, beta, alpha, tracking error, correlation, R²). A full VaR block keyed by each requested confidence level with historical VaR, parametric VaR, historical ES, parametric ES. Max drawdown with peak/trough/duration/recovery. Worst-N stress days with per-name loss attribution. Per-position variance contribution and per-position beta to the benchmark. Concentration: top-1/3/5 weights, Herfindahl, effective N. `tier_caveats` for excluded names and the always-on methodology warnings.
**Layer 2: rendered PM report.** Header line with the book and lookback, a Portfolio statistics block, a VaR table (rows: historical, parametric, ES — columns: each confidence), one-liner max drawdown, the worst-N stress days with per-name attribution and the benchmark's return on the same date, a Position contribution table sorted by variance share, a Concentration line, then the adaptive Take. The Take reads what's actually true about the book (high beta, concentrated, big drawdown, low tracking error) and surfaces 2-3 of the most striking facts in plain English. See [`references/`](./references/) for the full methodology.
1. **Parse the book.** Inline `--positions` (weights sum to ≤ 1.0; the residual is implicit cash) or `--book` JSON. The JSON format supports either `weight` per position or `shares` + `price`, in which case weights are computed from the value share. 2. **Pull daily aggs** per position and per benchmark over `--lookback-days` (default 252). Massive's `/v2/aggs/ticker/{T}/range/1/day/{from}/{to}?adjusted=true` so dividends and splits don't contaminate the vol estimate. 3. **Compute log returns** close-to-close. Align all series to the intersection of date indices so every metric reads from the same panel. 4. **Drop short series.** A position with fewer than 60 aligned trading days is excluded (surfaced in `tier_caveats` and `positions_excluded`); the equivalent weight folds into the cash bucket so the math stays consistent. 5. **Per-name annualized vol** via `np.std(daily_returns, ddof=1) * sqrt(252)`. 6. **Pairwise Pearson correlation matrix**, 5%-shrunk toward identity for numerical safety (same pattern as `position-sizer`). Covariance from per-name vols × the shrunk correlation. 7. **Portfolio daily returns** as the weighted sum across names per day. This is the single time series every metric reads from. 8. **Stats:** annualized vol, annualized mean return, naïve Sharpe; beta + alpha + tracking error + correlation + R² vs the benchmark. 9. **VaR + ES at each confidence:**
See [`references/var-and-es.md`](./references/var-and-es.md). 10. **Max drawdown** on the cumulative NAV (reconstructed from log returns). Returns peak, trough, duration, and whether the series recovered to the peak. See [`references/max-drawdown.md`](./references/max-drawdown.md). 11. **Worst-N stress** picks the N most-negative days in the portfolio return series and attributes each day's loss to individual names via `w_i × r_i_on_that_day`. See [`references/stress-scenarios.md`](./references/stress-scenarios.md). 12. **Position variance contributions** via the `MRC_i = w_i × (Σw)_i` decomposition normalized to sum to 1. 13. **Concentration** stats: top-1/3/5, Herfindahl (Σw²), effective N (1 / HHI). See [`references/concentration.md`](./references/concentration.md). 14. **Adaptive Take.** Reads beta, top variance contributor share, Herfindahl, drawdown, and tracking error. Surfaces the 2-3 that actually matter for this book, in plain English.
Trade like a pro. Without the terminal. View the full landing page → Quant and equity research tools that run inside Claude, or behind your own UI.
Scan SEC 8-K disclosures across a single ticker or a watchlist using Massive's pre-parsed disclosure taxonomy. Groups the underlying rows by filing (one 8-K…
Track sell-side analyst positioning on a name via Benzinga Analyst Ratings. Pulls every rating event over the lookback window, classifies each as upgrade /…
Build a clean, point-in-time, ready-to-backtest OHLCV dataset for a US equity universe across an arbitrary date window. Emits parquet plus a manifest plus an…
Bayesian Online Change-Point Detection (BOCPD) on a ticker's daily log returns. Detects points in time where the return-generating distribution changed (regime…
Single-commodity macro read. Answers "is this commodity in a winning or losing macro setup right now" and names the macro driver that dominates it. Pulls one…
Reconcile a position file against splits, dividends, and spinoffs to catch breaks before they hit P&L or T+1 settlement. Use when an operator hands over a CSV…