LP Position Snapshot (Claude Skill)
Last updated: July 6, 2026
This Claude Skill teaches Claude to build a snapshot of any investor's position across your funds: committed, called, paid, distributed, NAV, unfunded, and optional fund metrics, pulled live (read-only) from your Hanover Park account.
How to set it up (one time)
Download the attached file just above.
In Claude, go to Settings > Capabilities > Skills and upload the file.
Done. There is nothing to configure.
How to use it
Just ask Claude, for example:
"Where does [LP] stand?"
"What does [investor] have with us across our funds?"
"Pull [LP]'s position as of 3/31 with TVPI and IRR"
What's inside the skill (reference only)
You don't need to read anything below to use the skill. It's the full instruction set packaged in the attached file, shown here for reference.
Produce a clean, accurate snapshot of one investor's position across all of their funds at a firm, from live Hanover Park platform data. The audience is fund CFOs, GPs, and IR teams answering "where does this LP stand?" — often minutes before an LP call — so accuracy and clarity beat volume. Never estimate or fill gaps: every number must come from a tool response.
Workflow
1. Resolve the firm and investor
Call get_user_context once (no arguments). Clients have access to a single firm — use it without asking. If the user named a firm, match it against the accessible firm and proceed.
2. Ask the two setup questions (one prompt, not two)
Before pulling numbers, ask the user — using the AskUserQuestion tool if available, otherwise a short plain-text question:
Reporting date — "As of what date?" Offer: latest available (today), most recent quarter-end, or a custom date.
Fund metrics — "Include fund-level performance metrics (DPI, TVPI, MOIC, net IRR) for each fund?"
Skip any question the user already answered in their request (e.g. "as of 3/31" or "with TVPI and IRR" means don't re-ask that part). If you cannot ask (non-interactive context), default to the latest available data, exclude metrics, and say so in the output — then offer metrics at the end.
3. Pull the data
With firmId from step 1 and the chosen as-of date:
get_investor (investorName or investorId) → per-fund capitalCommitment, capitalCalled, capitalContributed, capitalDistributed, capitalDistributedRecallable, plus investorType and feeClass. If the name fuzzy-matches more than one investor, list the candidates and ask — never guess.
Note: these are current booked lifetime totals; they are not recomputed as of a past date. If the user chose a historical date, get the dated per-fund called/distributed totals from get_capital_activity (view 'actions', groupBy: 'investor', investorIds, endDate) and use summary.byDirection per fund rather than summing rows. For historical dates, Paid (contributed) as-of-date isn't directly available — drop the Paid column from the table and footnote why (see step 4). Called and paid rarely differ by much; the gap is in-flight calls, worth a note if material.
get_capital_activity with view: 'balances', investorIds: [the investor's id], and endDate set to the as-of date (omit for today) → each fund's balances[].capitalBalanceTotal is the LP's NAV in that fund. Ignore totalNav here — it is the whole fund, not the LP.
Only if the user opted into metrics: get_fund_performance with vehicleIds for the LP's funds and asOfDate → fund-level dpi, tvpi, moic, irr. These are fund-level figures from reporting data, not the LP's own multiples — label them that way. The returned asOfDate is the snapshot date actually used; disclose it if it differs from the requested date.
4. Present the snapshot in chat
The table mirrors the platform's "Investments by Fund" view so clients see the same shape they know from the app. Currency rounded to whole dollars with thousands separators; show "–" (not $0 or blank) for zero or unavailable values, as the app does.
## [Investor Name] — Position Snapshot
[Firm name] · As of [date] · [investor type, if not an LP]
| Fund | Committed | Called | Paid | Distributed | NAV | Unfunded | Net IRR | DPI | Net TVPI | MOIC | Closed Date |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Fund A | $100,000,000 | $60,000,000 | $58,000,000 | – | $65,000,000 | $40,000,000 | 12.30% | – | 1.10x | 1.15x | Mar 3, 2025 |
| ... |
| **Total** | **$250,000,000** | **$150,000,000** | **$145,000,000** | **–** | **$170,000,000** | **$100,000,000** | | | | | |
Column mapping: Committed = capitalCommitment, Called = capitalCalled, Paid = capitalContributed ("Paid" is the platform's label for contributed capital), Distributed = capitalDistributed, NAV = the LP's capitalBalanceTotal, Unfunded = Committed − Called, Closed Date = joinedDate (formatted like "Mar 3, 2025").
The four metric columns (Net IRR, DPI, Net TVPI, MOIC — in that order, matching the app) appear only when the user opted into metrics; otherwise omit them entirely. IRR as a percentage to 2 decimals (negative IRRs shown as-is, e.g. -12.34%); multiples to 2 decimals with an "x" suffix. When metrics are shown, add "Metrics as of [snapshot date]" under the header line.
Leave the Total row blank for the metric columns and Closed Date. Fund-level multiples and IRRs must never be summed or averaged across funds; if the user wants a blended figure, explain it would require a combined cashflow-level computation the snapshot doesn't do.
For a historical as-of date, Called and Distributed come from dated activity; Paid-as-of-date isn't directly available, so drop the Paid column and footnote why.
If any fund has no performance snapshot, show "n/a" rather than a computed substitute.
Footnote recallable distributions if capitalDistributedRecallable is nonzero for any fund ("includes $X recallable").
After the table, add at most 2-3 sentences of orientation (e.g. largest position, anything notable like an unfunded balance concentrated in the newest fund). No padding.
5. Offer the Excel export
End by offering a formatted Excel workbook of the same snapshot. If accepted, build it with the xlsx skill and style it with the excel-formatting skill (report recipe: title block with investor, firm, as-of date; the same columns; bold total row; currency formats). Name the file <Investor> - Position Snapshot - <YYYY-MM-DD>.xlsx and save it to the user's folder.
Accuracy rules
Report tool figures verbatim (rounding for display only). If a tool returns no data or omits a figure, say so plainly — never approximate.
Keep every call scoped to one firm. For a cross-firm question, run the whole workflow once per firm and present separate tables — never merge firms into one total.
Aggregate row: sum committed, called, paid, distributed, NAV, and unfunded across funds. These are safe to sum; ratios and IRRs are not.
If the investor is a GP or affiliate (from investorType), still produce the snapshot but flag it — GP economics include carried interest, so their NAV is not comparable to an LP's.
Never show internal IDs, slugs, tool names, or field names to the user..