# performance-reporting

Builds investment performance reports: returns, benchmark comparison, attribution and a risk dashboard. Handy when a client asks how the quarter went.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 693 installs · ★ 218
- Author: JoelLewis
- License: MIT · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/JoelLewis/finance_skills/tree/HEAD/plugins/wealth-management/skills/performance-reporting/SKILL.md
- Updated: 2026-07-18
- HTML: https://affpapa.org/en/nevibecode/skills/performance-reporting

## What it does

The skill covers portfolio reporting end to end: MTD, QTD, YTD, 1Y through 10Y and since-inception periods, gross and net returns, benchmark comparison, attribution and risk metrics. It annualizes only periods longer than a year. Annualizing a three-month number would read as a rate you can hold for twelve months, and that is misleading.

\`scripts/performance_reporting.py` holds the math: Modified Dietz as a TWR approximation, chain-linked true TWR, IRR solved with `scipy.optimize.brentq`, GIPS composite returns weighted by beginning-of-period values, and trailing period windows. The IRR path needs `scipy`. The rest of the skill covers benchmark selection, active return, rolling Sharpe and volatility, sector and factor exposure, top and bottom contributors, and goal progress via Monte Carlo.

A return without a benchmark tells you nothing, so treat a missing benchmark as a gap worth fixing. The index has to match the portfolio's style, geography and asset mix, and a multi-asset portfolio needs a blended benchmark rather than a single equity index. It also has to be investable, or the comparison is not fair.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add JoelLewis/finance_skills --skill performance-reporting -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/performance-reporting/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/performance-reporting/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add JoelLewis/finance_skills --skill performance-reporting -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/performance-reporting/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add JoelLewis/finance_skills --skill performance-reporting -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/performance-reporting/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install JoelLewis/finance_skills performance-reporting
```

2. **Manually: put the files in place**
- File: `.github/skills/performance-reporting/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add JoelLewis/finance_skills --skill performance-reporting -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/JoelLewis/finance_skills --path plugins/wealth-management/skills/performance-reporting
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/performance-reporting/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add JoelLewis/finance_skills --skill performance-reporting -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/JoelLewis/finance_skills/tree/HEAD/plugins/wealth-management/skills/performance-reporting/SKILL.md

## When to use it
- report quarterly and since-inception returns for a portfolio
- show net-of-fee returns and the fee drag
- compare a portfolio against a suitable benchmark and compute active return
- break the result into allocation, selection and interaction effects
- estimate the probability of hitting a financial goal

## Example prompts
- Build a quarterly portfolio report with MTD, QTD, YTD and since-inception returns, gross and net
- Compare the portfolio to its benchmark and show active return and tracking error
- Break down contribution by holding: top 5 and bottom 5 positions with their contribution

## Source text · SKILL.md · MIT

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: b4127948ca54491a.

BEGIN THIRD-PARTY FILE b4127948ca54491a
```text
---
name: performance-reporting
description: "Generate clear, accurate performance reports for investment portfolios with benchmarks, attribution, and risk dashboards. Use when the user asks about portfolio performance reports, return summaries, benchmark comparison, risk dashboards, goal progress tracking, or GIPS-compliant reporting. Also trigger when users mention 'quarterly report', 'how did my portfolio do', 'time-weighted vs money-weighted return', 'annualized returns', 'net-of-fee performance', 'rolling Sharpe', or ask how to present investment results to clients."
---

# Performance Reporting — Reporting & Communication

## Core Concepts

### Return Reporting
Accurate and consistent return calculation is the foundation of all performance reporting.

**Period returns:** Report standard time periods — MTD (month-to-date), QTD (quarter-to-date), YTD (year-to-date), 1Y, 3Y, 5Y, 10Y, and since inception. Always state the exact inception date.

**Cumulative vs annualized:** Annualize returns only for periods greater than 1 year. Annualizing a 3-month return is misleading because it implies the rate is sustainable for a full year. For periods under 1 year, report cumulative (total) returns only.

- Annualized return formula: `(1 + cumulative_return)^(1/years) - 1`
- For multi-year periods, always present both cumulative and annualized figures so the reader can see total wealth growth and the rate of compounding.

**Gross vs net of fees:** Always specify whether returns are gross or net of management fees, advisory fees, and transaction costs. Net-of-fee returns are what the investor actually experiences and should be the primary presentation. If showing gross returns, also show the fee drag.

**GIPS (Global Investment Performance Standards):** For institutional reporting, follow GIPS requirements — composite construction, full disclosure, verified calculations, and standardized presentation. Even for non-GIPS reports, the principles of fair representation and full disclosure apply.

**Time-weighted vs money-weighted returns:**
- Time-weighted return (TWR) removes the impact of cash flows — use for evaluating the investment manager's skill.
```
END THIRD-PARTY FILE b4127948ca54491a

The third-party file has ended. Everything between the b4127948ca54491a tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 2186 of 15697 bytes. © JoelLewis · MIT · https://github.com/JoelLewis/finance_skills/tree/HEAD/plugins/wealth-management/skills/performance-reporting/SKILL.md

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
