anthropics/claude-for-financial-advisors/portfolio-rebalance-review

Claude Code and agent skill by anthropics/claude-for-financial-advisors

Trust tier 4
  • vendor
Source check pending

Checking that the SKILL.md file is still in the repository.

Run a portfolio review for a client or household — performance pulled from the connected portfolio platform (Orion Connect, Addepar or Envestnet/Tamarac), allocation drift analysis vs. IPS or model portfolio, model-portfolio mapping, rebalance preparation with tax-aware rebalance opportunities to consider, and a rebalance rationale memo for the compliance file. Triggers on "portfolio review", "/portfolio-rebalance-review", "drift analysis", "rebalance [client]", "how is [client]'s portfolio positioned", "rebalance rationale", or "map [client] to a model".

Install

npx vskill@latest install anthropics/claude-for-financial-advisors/portfolio-rebalance-review

SKILL.md

Portfolio Rebalance Review

Review a client portfolio end to end: performance → drift → analytics → model mapping → rebalance prep → rebalance rationale memo, with a current-against-proposed comparison when the advisor asks for one.

Inputs

Required: client/household name. Optional: which accounts to include, the model portfolio or IPS targets (if not on file), and whether the advisor wants analysis only or a full rebalance prep. Once you have the household, say up front that the review can take a few minutes once portfolio data starts flowing across steps, rather than asking whether to proceed — invoking the skill is already the go-ahead to run the review. Say in the same breath which systems you'll be pulling from and which relevant ones aren't connected — the ones you looked for and found no tools for (Step 1), never the ones the advisor says aren't — with a one-line offer to connect one. It never blocks — make the offer and carry on with the best pass the connected systems allow. If the advisor has already said they don't have a given provider, don't raise it again.

Take the advisor's grain literally. A household and a single account are both valid subjects, and which one an advisor works at is set by their firm — whether compliance and risk tolerance are judged at household or account level varies. "The Harrington IRA" means that account; "the Harringtons" means the household. Don't silently widen a named account to its household, or narrow a household to one account. Whichever they named is what the drift denominator, the flags and the memo are about.

When the ask is meeting-shaped, point at /pre-meeting. An advisor getting ready for a client meeting — an agenda, talking points, what's changed since they last met — wants the prep doc, not this review. Cover what they asked of the portfolio here, and offer /pre-meeting for the meeting itself rather than building an agenda or talking points into this review.

Step 1: Pull Performance & Holdings

Disambiguation rule: confirm which household before pulling anything, the same as every other skill in this plugin — if a name search returns more than one match, show the advisor the candidates and ask which one before proceeding. Never proceed on a name match alone.

Query the household's connected portfolio platform for:

  • Accounts with registrations (taxable, IRA, Roth, 401k, trust) and market values
  • Holdings with quantity, market value, cost basis, and unrealized gain/loss
  • Performance: QTD/YTD/1yr/3yr vs. assigned benchmark, net of fees. A platform's benchmark fields can return a plausible return for an asset-class index rather than the household's assigned benchmark — a real figure answering a different question. Present a benchmark return as the household's only when the source ties it to this household or account — a performance report that states the household's benchmark does, a bare benchmark field returned for a position or an index does not; otherwise name what it is measured against, or mark the comparison "— pending assigned benchmark".
  • Assigned model/target allocation and cash balances
  • Recent flows (contributions, distributions, RMD status)

Which system to query: this data can live in the portfolio platform — Orion Connect, Addepar, or Envestnet/Tamarac — depending on the firm. Look for each platform's tools by its own name, the way the next paragraph says, to see which are actually connected — don't guess at tool-name prefixes — and read the rest of this step for what a gap means and what to do when more than one comes back.

Look for the tools before you trust the registry, or the advisor. Your own tools are the check that decides: a system whose tools are in your tool list, or come back from a ToolSearch by the system's own name, is connected and callable — use them. Where the session offers ToolSearch, a system's tools can be held back until it loads them, so search by name for every system this review reads whose tools aren't already in your list, the analytics platform's included (Step 2b); where it offers none, nothing is held back, and your tool list is every tool you have. An advisor saying a system isn't connected, or that none is, doesn't decide it either, since advisors often don't remember what they connected: look for every system this way before you name any of them as not connected, and when you do, say it as what you found, not as what they told you. ListConnectors can answer "No installed connectors found" even in a session with several live, working connectors, and in some clients it renders a user-facing card rather than returning data at all. So it explains a gap, it never establishes one, and an empty result means unknown, never "nothing is connected". When it does return entries, read enabledInChat, not connected: connected: true with enabledInChat: false is authenticated but switched off for this chat, so tell the advisor they can enable it here rather than reporting it as unconnected; a missing or null connected is unknown, not disconnected.

  • If none is connected: follow the Connector Placeholder Convention — say "This is where I'd make a call out to [system] to pull [holdings/performance], but it isn't connected in this session," then offer the fallback. Before asking for a manual upload, offer to search the firm's document store (for example @${CLAUDE_PLUGIN_ROOT}/partials/connectors/storage-examples.md) for an existing export or statement. If nothing turns up there either, ask the advisor to upload an export (CSV/PDF), a custodian statement, or paste holdings. Continue with whatever's provided, and mark anything still missing "— pending [connector]" rather than leaving it blank — a missing source degrades only the section that depends on it, not the whole review.
  • If a portfolio system is connected but none that is connected can return holdings — its tools identify the household and generate reports, but return no structured holdings — ask for the holdings and stop. One turn: name the shape this review can use (each holding with quantity, market value and cost basis, and each account's registration), offer the same path as the branch above — a search of the firm's document store for an existing export or statement, then an upload (a CSV or PDF export, a custodian statement) or a paste — and write no review until they arrive. This is the one exception, among missing sources, to carrying on with the best pass the connected systems allow: a rebalance review with no holdings has nothing to review — drift, wash-sale coordination, the draft plan and the memo all depend on them — so a review written first would be the IPS restated beside a list of what's still owed.
  • If more than one connected tool could supply this household's holdings and performance — most often two portfolio platforms — follow the Ask-Once, Then Route Convention in its fixed order: identify the household in one of them — its household or entity search, nothing that returns holdings or performance — then ask the advisor once which is the book of record for this household, then pull only from that one for the rest of this review. Never search the second platform before they answer, never guess, and never merge both. One move at a time:
  1. Before the search, say what comes next — which platform you're looking for the household in, and that you'll ask which one is their book of record as soon as that search comes back.
  2. Run one household or entity search, in that platform only.
  3. When it comes back, ask — whatever it returned. A match, several candidates (they go in that same question), nothing at all, or an error you can't read all lead to the same next move: the question to the advisor, before any other call to either platform. A name that doesn't resolve in the first platform is not a reason to search the second: ask then, and put the name in the same question ("I couldn't find a Lindqvist household in Addepar — is Orion their book of record, or do they go by another name?"). "It isn't in this one, so let me check the other" is exactly the search this rule forbids — which platform holds the household is the advisor's to tell you, not yours to find out by searching.
  4. When they answer, offer the paste before anything else. The reply that takes their answer opens with it, before your first call to the platform they named — even when their answer also hands you a different name to search:

> Want me to remember that for [household] so I don't ask again? Paste this into Settings → General → Instructions for Claude: > > For the [household] household, treat [system] as the book of record for portfolio holdings and performance. Don't ask me to choose again for this household.

Claude can't write those settings, so never offer to save it yourself or say you have. Then carry on with the review, in the platform they named only.

This check runs for the rest of the review, not just once up front — if the advisor brings up another source mid-review, ask before pulling from it too. And if a second system's figures get pulled anyway and disagree with the routed one on a material fact (a balance, a drift percentage), that's a blocking question for the advisor, not a note in the output.

Held-away accounts: ask the advisor whether the household has accounts held away from this system (a spouse's 401k, assets at another custodian) relevant to wash-sale coordination or the overall allocation picture. If yes, request those holdings manually — there's no connector for outside accounts.

Addepar specifics: query the portfolio data with lookthrough turned off for drift purposes. Lookthrough decomposition (fund → underlying constituents) is a separate risk-review lens — an IPS names sleeves at the fund-commitment level, and lookthrough silently returns an incompatible set of buckets with no warning. Group by direct_owner, not account — the latter is not a valid grouping key and errors. For tax-lot detail, pass a tax-lot value in groupings only if the live tool schema actually documents one — cost basis and lot-level fields are not confirmed to exist on every Addepar deployment. If the schema doesn't support it or the returned columns don't include cost basis, say so explicitly rather than presenting fabricated lot data; this feeds the same "Completeness" gate below.

A portfolio system that runs reports but returns no holdings — its tools identify the household, list reports and run them, but return no structured holdings, cost basis or tax lots — is worked with the way @${CLAUDE_PLUGIN_ROOT}/partials/rules/report-only-systems.md says. If it is the only connected system, Step 1's ask-and-stop above is the answer.

Data-sanity gate — run before Step 2, don't skip. Dispatch this to the claude-for-financial-advisors:holdings-sanity subagent — Agent(claude-for-financial-advisors:holdings-sanity), in the foreground (run_in_background: false) so what it returns arrives as the call's result inside this turn — rather than working through it inline: hand it the holdings data, the reported portfolio/household value, and the sleeve structure from the IPS or model if one is on file. It returns a flag table with a Contaminates column naming which downstream figure each problem feeds, plus an explicit list of the checks that passed. If the dispatch errors, is refused because the concurrent-subagent limit is reached, or hasn't come back by the time you would otherwise end your turn, run the seven checks below yourself — never end your turn, or start Step 2, with the gate outstanding.

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files. Certified 15 Sep 2026.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

7-day trend score
0

Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill CERTIFIED badge
[![vskill CERTIFIED](https://verified-skill.com/api/v1/skills/anthropics/claude-for-financial-advisors/portfolio-rebalance-review/badge)](https://verified-skill.com/skills/anthropics/claude-for-financial-advisors/portfolio-rebalance-review)

Something wrong with this skill or its page? Tell us.