rsu_sell_vs_hold
Compare after-tax payout from selling RSUs at vest versus holding for long-term capital gains, incorporating federal and state income taxes, FICA, and supplemental withholding.
Instructions
After-tax payout on a Restricted Stock Unit (RSU) vest: federal ordinary income tax, state income tax, FICA (Social Security + Medicare + Additional Medicare), and the gap between mandatory 22% federal supplemental withholding and the user's marginal bracket. Use this tool for RSUs at vest; for ISO/AMT planning use amt_iso_optimize, for NSO use nso_calculate. Compares sell-at-vest vs hold-for-long-term-capital-gains (LTCG) across the chosen horizon, accounting for the 12-month short-term-vs-long-term holding threshold and the optional expected-growth assumption. Pure deterministic computation: no network access; tax tables and the 22% supplemental-withholding rate are compiled in. Returns a top-level object with keys: vest (vestValue, federal, state, socialSecurity, medicare, additionalMedicare, total, netCashAtVest, federalWithheldAtVest), hold (expectedGain at horizon, capGainFederal/State/Total including NIIT, isLongTerm), sellNowInvest (counterfactual: sell at vest and reinvest at expectedMarketReturn), holdMinusSell (dollar delta), and bracketJump (fromRate, toRate, thresholdAtJump on the vest amount). Example call: {shares: 1000, currentPrice: 100, ordinaryIncome: 200000, filingStatus: "single", stateCode: "CA", stillEmployed: true, holdYears: 2, volatility: 0.3, ticker: "MSFT"}. IMPORTANT: every field listed in required must come from the user's message OR be derivable from an optional ticker. The model invoking this tool MUST NOT invent a value for any required field. If the user did not supply it and no ticker resolves it, ask the user.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| shares | Yes | Restricted Stock Unit (RSU) shares vesting in this tranche. | |
| currentPrice | Yes | Fair market value per share at vest, USD. Also the cost basis on retained shares. | |
| ordinaryIncome | Yes | Annual W-2 ordinary income before this vest, USD. Baseline for the bracket walk on the vest amount. | |
| filingStatus | Yes | Federal filing status. | |
| stateCode | Yes | Two-letter US state code. | |
| stillEmployed | Yes | True if still employed at vest. Drives FICA applicability and whether the 22% supplemental withholding rule applies. | |
| holdYears | Yes | Years to hold after vest (0.25..5). Below 1 year triggers the short-term capital gains cliff (ordinary rates on appreciation). | |
| expectedSalePrice | No | Projected $/share at end of holdYears. Required unless `ticker` resolves it from currentPrice × (1 + trailing CAGR)^holdYears. | |
| volatility | No | Annualized volatility (sigma) of the stock as a decimal (0.72 = 72%). Pass the user-supplied volatility directly; the tool computes the horizon-cumulative drag internally. The model MUST NOT compute drag itself — the correct formula is horizon-dependent and most models get it wrong. If the user does not supply a volatility number, ASK them. | |
| expectedMarketReturn | No | Annual after-tax-proceeds reinvestment rate. Defaults to SPY trailing CAGR for holdYears if omitted. | |
| ticker | No | Optional public-stock symbol (e.g. "NVDA", "AAPL"). When set, the tool substitutes the ticker's trailing CAGR for any unsupplied expected-return / sale-price field instead of requiring the caller to invent one. ~90 symbols covered; unknown tickers fall through to "required field" errors so the model knows to ask the user. |