Skip to content
Development
Skill

/portfolio-review

Use when reviewing a portfolio's construction and exposure. Covers concentration, correlation, factor and sector exposure, hidden bets, and whether the portfolio expresses the intended view. Trigger on "review my portfolio", "am i actually diversified", "is too much of my money

From plugin
claude-skills-collection
34137 skills

Claude Code

$ npx -y skills add nimadorostkar/Claude-Skills-collection --skill portfolio-review --agent claude-code

SKILL.md

portfolio-review.SKILL.md
name: portfolio-review
description: Use when reviewing a portfolio's construction and exposure. Covers concentration, correlation, factor and sector exposure, hidden bets, and whether the portfolio expresses the intended view. Trigger on "review my portfolio", "am i actually diversified", "is too much of my money in tech". Do not use for setting drawdown limits or stop rules — see the risk-management skill.
metadata:
  category: finance
  version: 1.0.0
  tags: [portfolio, correlation, exposure, diversification, factors]

Portfolio Review

Purpose

Determine what a portfolio is actually betting on, which is frequently not what its owner thinks. A portfolio of twenty names can be a single concentrated bet, and the position list will not tell you that.

When to Use

  • Periodic review of holdings and exposure.
  • After a drawdown, to understand what actually drove it.
  • Before adding a position, to see what it does to the whole.
  • Assessing whether diversification is real or nominal.

Capabilities

  • Concentration analysis: position, sector, factor.
  • Correlation and effective number of positions.
  • Factor exposure: size, value, momentum, quality, volatility.
  • Hidden-bet identification.
  • Attribution: what actually drove the return.

Inputs

  • Holdings, weights, and cost basis.
  • Return history for correlation and factor analysis.
  • The stated investment thesis, so the portfolio can be checked against it.

Outputs

  • What the portfolio is actually exposed to.
  • Divergences between the intended and the actual bet.
  • Concentration risks that are not visible in the position list.

Workflow

1. **Compute the effective number of positions** — Twenty names with a 0.85 average correlation is not twenty bets. The effective number tells you how many independent bets you actually hold, and it is usually far lower than the count. 2. **Aggregate by sector and by factor** — Sector exposure is visible. Factor exposure — a portfolio that is entirely long-duration growth, whatever the sector labels say — usually is not. 3. **Find the hidden bet** — Ten names in different sectors that all depend on the same input (interest rates, the price of oil, one customer) is one bet. This is what a correlation matrix reveals and a position list conceals. 4. **Attribute the return** — What actually drove performance? If the portfolio is up 12% and 11 points came from one position, the strategy has not been validated; one position has. 5. **Compare with the thesis** — Does the portfolio express the intended view? A portfolio built on a "value" thesis whose factor exposure is momentum has drifted. 6. **Stress it** — What does this portfolio do in a 20% market decline, a 200bp rate move, or a sector rotation?

Best Practices

  • Correlation rises in a crisis. A portfolio that appears diversified in normal conditions can become a single position at the worst possible moment, and that is when it matters.
  • The effective number of bets is the honest diversification measure. Position count is not.
  • Attribution matters more than the total return. A profitable quarter driven entirely by one position tells you nothing about whether the process works.
  • Factor exposure is the most common hidden bet. Every high-growth name is a bet on rates, regardless of what sector it is classified in.
  • A position you have not reviewed in a year is a position you have forgotten why you own. Re-derive the thesis or exit.
  • Compare against a relevant benchmark. Beating the market by taking three times its risk is not skill.

Examples

**What a portfolio is actually betting on:**

def review(portfolio: Portfolio, returns: pd.DataFrame) -> PortfolioReview:
    weights = portfolio.weights
    corr = returns[portfolio.symbols].corr()

    # The effective number of independent bets. A position count is a fiction
    # when correlations are high.
    w = weights.values
    portfolio_variance = w @ returns[portfolio.symbols].cov().values @ w
    weighted_avg_variance = (w**2 @ returns[portfolio.symbols].var().values)
    effective_n = float(weighted_avg_variance / portfolio_variance) if portfolio_variance else 0

    # Groups of positions that move together: these are ONE bet, not several.
    clusters = cluster_by_correlation(corr, threshold=0.70)

    # Factor exposure via regression against factor returns.
    factor_betas = regress(portfolio.returns, FACTORS[["mkt", "size", "value", "momentum", "quality"]])

    return PortfolioReview(
        position_count=len(weights),
        effective_positions=effective_n,
        clusters=clusters,
        factor_betas=factor_betas,
        top_5_weight=float(weights.nlargest(5).sum()),
        sector_exposure=portfolio.by_sector(),
    )

**A review that finds the bet nobody placed deliberately:**

Portfolio: 22 positions, "diversified across sectors".

Position count            : 22
Effective positions       : 3.4     <- this is the real number

Correlation clusters (rho > 0.70):
  Cluster 1 (58% of book): NVDA, AMD, AVGO, TSM, ASML, MU, ARM, MRVL
      Labelled: Technology, Semiconductors
      Actual bet: AI capital expenditure. One bet, eight ways.

  Cluster 2 (21%): PLTR, SNOW, DDOG, NET, CRWD
      Labelled: Software, Technology
      Actual bet: also AI capital expenditure, plus long-duration growth.
      Correlation with cluster 1: 0.74. It is not a separate bet.

  Cluster 3 (14%): JPM, BAC
  Cluster 4 (7%):  XOM, CVX

Factor exposure:
  Market beta   : 1.42    <- 42% more market risk than the index
  Momentum      : +0.71   <- a large, unintended momentum bet
  Value         : -0.58   <- short value
  Quality       : +0.12

Attribution, trailing 12 months (+31%):
  NVDA alone    : +19 points
  Everything else: +12 points across 21 positions

Findings:
  1. This is a leveraged bet on AI capex, wearing the costume of a diversified
     22-position portfolio. 79% of the book is in two clusters that correlate
     at 0.74 with each other.
  2. B
Read more
@nimadorostkar
Ships withclaude-skills-collection

A curated library of 137 production-grade skills for Claude and other AI coding agents. Every skill follows one structure, speaks with one voice, and earns its place by changing what the agent does.

Stars on GitHub

Momentum

stars in total
34
Star history of nimadorostkar/Claude-Skills-collection on GitHub, a chart by star-history.com

Other skills on claude-skills-collection.

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills12d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc13d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react2d252k
@facebook@facebookInstall Skill

Questions about portfolio-review.

Which coding agents can use portfolio-review?
portfolio-review installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.