Borrowing it
Nothing to install: this file belongs to heurist-network/heurist-finance. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/heurist-network/heurist-finance/main/.claude/skills/portfolio-review/SKILL.mdgit clone --depth 1 https://github.com/heurist-network/heurist-financeWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/heurist-network/heurist-finance/portfolio-review)<a href="https://agentmods.dev/skills/heurist-network/heurist-finance/portfolio-review"><img src="https://agentmods.dev/badge/skills/heurist-network/heurist-finance/portfolio-review/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/heurist-network/heurist-finance/portfolio-review"><img src="https://agentmods.dev/badge/skills/heurist-network/heurist-finance/portfolio-review.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00082 | $0.01269 |
| Opus 5.5 | $0.00033 | $0.00508 |
| Sonnet 5.5 | $0.00016 | $0.00254 |
| Haiku 4.5 | $0.00008 | $0.00127 |
Grade A, and why
portfolio-review scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 13d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 32 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Portfolio Review
Shared plumbing and output contract: ../_shared/analyst-core.md. Positions are sized one at a time (position-sizing), but ruin happens at the book level — usually because ten "different" positions turn out to be one bet. This skill audits the book the way a risk desk would: not "are the picks good?" but "what is this portfolio actually one big bet on, and what happens when that bet has its worst month?"
Input: the user's holdings (tickers, sizes, cost basis if offered, open options positions with strikes/expiries). Ask for them if not provided — there is no useful portfolio review without the actual book.
The audit, in order of how often it finds the problem
- Effective number of bets (the headline finding, usually). Cluster holdings by shared driver, not by sector label: four AI-adjacent names + QQQ + a semis ETF = one trade with six tickers. Method: pull 1–2y of prices for all holdings (
prices ... --out FILE), compute the pairwise correlation matrix in Python, cluster at |ρ| > ~0.6, and — because calm-period correlation understates it — re-cluster using each name's behavior in the last genuine stress window (2022 for rates, 2020 for growth-shock). Look-through ETFs withfund_snapshotbefore clustering: overlapping top holdings across "diversified" ETFs is the most common hidden concentration. Report: N tickers, ~K effective bets, largest cluster = X% of book. - Concentration + liquidity. Top position and top cluster as % of book (top single > ~15% or top cluster > ~35% deserves an explicit conviction justification, not a drift explanation — most concentration is unrebalanced winners, which is a decision being made by default). Days-to-exit per position at ~20% of ADV; a book that takes two weeks to unwind owns a risk the P&L doesn't show (
small-cap-scoutmath, book-wide). - Factor and macro tilts. Estimate book beta (position-weighted, from the price file); eyeball the style skew (growth/value, size, momentum-crowding overlap) and translate to macro exposure in plain terms: "this book is long duration + long AI capex + short energy — it has a rates view whether you meant one or not." Cross-check against the user's stated views — the coherence test at book level: a user predicting a correction while running a 1.3-beta, zero-cash book is fighting themselves (same logic as
trading-plan's conflict flagging). Stock-bond correlation flips sign with the inflation regime (macro-regime), so "stocks + bonds = diversified" is regime-dependent — check which regime is live before crediting the hedge. - Options-adjusted truth. Sum short-put assignment obligations in dollars (that's shadow equity exposure at exactly the prices where it hurts); covered calls = sold right tail (the book's best names are the ones capped — say it); count net short-vol exposure across positions that all sell premium (one vol spike hits them simultaneously — that's a cluster too). Beta-weight option deltas into the book beta.
- Stress scenarios (dollars, not percentages). Three concrete scenarios keyed to the book's actual tilts — e.g. rates +100bps, index −15% growth-led, the largest cluster's specific thesis breaking — and the estimated dollar drawdown of each, using stress correlations (→1 within risk assets; Longin & Solnik). Then the behavioral check: is the worst number one the user can sit through without panic-liquidating at the low? If not, the book fails the 11pm test at portfolio scale and the fix is pre-emptive trimming, not resolve (
trading-planfield-card logic). - Cash and dry powder. Cash % vs the current
market-healthgate: zero cash in REDUCE_ONLY regimes means every new idea forces a sale (decision coupling); large cash in NEW_ENTRY_ALLOWED regimes is a position too — an implicit market-timing bet that should be owned as a decision.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 13d ago First seen · 32 lines · 82 tokens per session scan A 86f63319f62b
portfolio-review is a skill published in the GitHub repository heurist-network/heurist-finance (11 stars, last pushed 14d ago), licensed MIT. It adds 82 tokens to every session and 1,269 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-24.
portfolio-review compared with skills from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| portfolio-reviewheurist-network/heurist-finance | Skill | 11 | 14d ago | MIT | A | 82 | Claude Code |
| sector-rotationHKUDS/Vibe-Trading | Skill | 38k | yesterday | MIT | A | 39 | Claude Code, Codex |
| twitter-readerhimself65/finance-skills | Skill | 3.5k | 2d ago | MIT | A | 110 | Claude Code |
| strategy-pivot-designertradermonty/claude-trading-skills | Skill | 3.7k | 2d ago | MIT | A | 28 | Claude Code, Codex |
| energy-procurementhashgraph-online/awesome-codex-plugins | Skill | 1.5k | yesterday | Apache-2.0 | A | 93 | Claude Code, Codex |
| airdrop-hunting-guidenirholas/three.ws | Skill | 269 | yesterday | Apache-2.0 | A | 54 | Claude Code, Codex |
| multi-expert-analyzerdigoal/blog | Skill | 8.6k | 2d ago | GPL-2.0 | A | 292 | Codex |