Deferred comp
Model nonqualified deferred comp (NQDC / 409A) elections for high-W2 execs and profitable S/C-corp owner-operators — defer-now-vs-take-now, lump-vs-installment distribution, and bracket / Medicare IRMAA / NIIT / Additional-Medicare smoothing into low-income FIRE bridge years, with employer unsecured-creditor risk. Use whenever someone asks "should I defer my bonus", "NQDC lump vs installment", "defer salary past my 401(k) cap", "what's the creditor risk of my deferred comp", "409A election — defer now or take now?", or "smooth my NQDC payouts to avoid IRMAA". Thin orchestration over the planfi MCP.From its SKILL.md
npx -y skills add KameronKales/planfi-skills --skill deferred-compAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
12.0 KB, ~3.0k tokens by cl100k_base, as published. Nobody here has run it
Deferred Comp (NQDC / 409A) Election Analyzer
A thin orchestration layer over the planfi MCP (https://ai.planfi.app/mcp/free). All deferral economics, election-year tax, distribution-year bracket / IRMAA smoothing, and creditor-risk math live server-side. This skill only gathers inputs and calls the tools — it does not compute anything locally, carries no defaults of its own, and is read-only.
Related skills: for RSUs / ISOs / NSOs / ESPP valuation and single-stock concentration, see
equity-comp-planner (analyze_equity_compensation). For owner-operators stacking a 409A election
on top of a Solo 401(k) / SEP / defined-benefit plan, see self-employed-planner
(analyze_self_employed_retirement). For the broader bracket / NIIT / IRMAA and Roth-conversion
sequencing the distribution years feed into, see tax-optimizer (analyze_advanced_taxes,
analyze_irmaa, analyze_roth_conversion).
Step 0 — Make sure the planfi tools are connected
This skill uses these tools (may be namespaced, e.g. mcp__planfi__analyze_deferred_comp):
analyze_deferred_comp, analyze_advanced_taxes, analyze_irmaa, analyze_roth_conversion, plus
optional generate_financial_plan (to mint a plan_id for chaining + a share_url). Use whichever
name your environment exposes (bare or mcp__planfi__-prefixed); below they are written bare.
If they're NOT available, tell the user to connect the MCP, then continue:
claude mcp add --transport http planfi https://ai.planfi.app/mcp/free
Try free, then add your key. The command above adds the free connector —
https://ai.planfi.app/mcp/free(no key needed). Once you create an API key, add a new connector with the MCP url —https://ai.planfi.app/mcp— and authorize it with your key.
(On claude.ai: add a custom connector pointing at https://ai.planfi.app/mcp/free.)
Access — free for personal use. The planfi MCP is free to try (a small monthly allowance, no key needed). Heavy automated abuse forced us to add limits — but it stays free for personal use: email [email protected] and we'll send you a free API key, no charge. (Companies and commercial use have paid plans.) To use a key, pass it as an
Authorization: Bearer pft_…header in your MCP client config.
Step 1 — (Optional) build a plan first to chain context + get a share link
If the user has (or wants) a full household model, call generate_financial_plan once and
capture the returned plan_id (+ share_url). analyze_deferred_comp accepts { plan_id }
(plus inline overrides) and uses it to derive filing status and to attach the plan's share_url —
the specialist tools do not emit a share link themselves, so this is the only way to give the
user one. This step is optional: analyze_deferred_comp runs cold from raw inputs too.
Engine facts to bake in: all dollars are today's (real) dollars; all decimals are fractions (37% →
0.37, 5% growth →0.05); tax brackets / limits are approximate ~2026 values (noted indisclosures). NQDC deferrals sit above the §402(g) qualified-plan cap.
Step 2 — Route by intent
intent → analyze_deferred_comp
"Should I defer my bonus?" · "NQDC lump vs installment" · "409A election — defer now or take now?" · "defer salary past my 401(k) cap" · "what's the creditor risk of my deferred comp?" · "smooth my NQDC payouts to avoid IRMAA" · "spread my deferred comp over 10 years in early retirement"
Always CALL analyze_deferred_comp for these — do not answer from general knowledge / quote rules
of thumb from memory. When the user gives the numbers, run it and lead with its real output.
Trigger condition: if the user supplies a deferral amount and either a working marginal rate
(or enough income context to stack one) or a plan_id, CALL the tool. Do not hand-wave
"deferring is usually good if your bracket drops" — the answer depends on the lump-vs-installment
IRMAA tiers, the §114 state bar, and the employer's creditor-risk haircut, all of which the tool
computes. Lead with its recommendation (defer_installment / defer_lump / take_now) and the
risk-adjusted PV advantage, not a heuristic.
Models the defer-now-vs-take-now tradeoff: the election-year tax deferred (fed marginal + state + 0.9% Additional Medicare at vest under the special-timing rule), lump-vs-installment distribution and how installments smooth federal brackets + Medicare IRMAA tiers into low-income FIRE bridge years, and employer unsecured-creditor risk as a hazard-rate haircut on the deferred balance.
REQUIRED: deferral_amount (annual $ electively deferred past the §402(g) cap).
Optional: current_marginal_rate (working-year all-in fed marginal, e.g. 0.37; if omitted the
server stacks the deferral on other working income), filing_status (single | married_joint,
default married_joint), distribution_election (lump | installment, default installment),
installment_years (default 10 — 10+ preserves the §114 former-state tax bar), distribution_start_age
(default 65), other_bridge_income (other taxable income in the distribution / FIRE-bridge years the
slices stack on, default 0), employer_credit_risk (investment_grade | speculative |
distressed, default investment_grade), growth_rate (REAL pre-tax in-plan growth, default 0.05),
tax_year (default 2026), plan_id, overrides.
analyze_deferred_comp({
deferral_amount: 200000,
current_marginal_rate: 0.37,
filing_status: "married_joint",
distribution_election: "installment",
installment_years: 10,
distribution_start_age: 62,
other_bridge_income: 0,
employer_credit_risk: "investment_grade"
})
Returns: recommendation + recommendation_reason; tax_deferred_at_election;
grown_balance_at_distribution; defer_now_after_tax_pv vs take_now_after_tax_pv +
deferral_advantage (delta PV); bracket_smoothing_savings (lump_marginal_rate,
installment_marginal_rate, irmaa_tiers_crossed_lump, irmaa_tiers_crossed_installment,
effective_distribution_rate); creditor_risk_haircut_pct + risk_adjusted_defer_pv; and a
per-year schedule of gross distributions.
"Confirm the full all-in tax bite on the election or distribution year" → analyze_advanced_taxes
After analyze_deferred_comp, run the working (election) year and a distribution year through the full
federal model (brackets, NIIT, Additional Medicare, AMT) to confirm the all-in rate. This is the
server-suggested next_actions[] chain — follow it rather than re-deriving the rate by hand.
"Does a lump or big installment slice trip a Medicare IRMAA surcharge?" → analyze_irmaa
Pass the distribution-year MAGI (other_bridge_income + the per-year slice) to quantify the IRMAA
Part B/D surcharge a large slice triggers, and confirm the installment path stays under the tier-1
threshold.
"Fill the empty bridge-year brackets before the NQDC stream starts" → analyze_roth_conversion
In the low-income years between deferral and the distribution start age, model filling the empty brackets with Roth conversions before the NQDC installments push income back up.
Step 3 — Surface the result honestly
- Lead with the headline — the
recommendation(defer_installment/defer_lump/take_now) andrecommendation_reason, then thedeferral_advantage(risk-adjusted PV delta),tax_deferred_at_election, and the lump-vs-installment IRMAA tier comparison. - Read back
assumed_defaults[]—analyze_deferred_compreturns a structuredassumed_defaults[]of{ field, assumed_value, note }for every input it defaulted (filing status, bridge income, growth rate, credit rating, …). Read these back so the user can correct any silent assumption (e.g.other_bridge_incomeassumed$0— a higher FIRE-bridge income raises the distribution marginal rate and IRMAA). - Surface the creditor-risk caveat — the deferred balance is an unsecured claim against the
employer; it is surfaced net of a credit-rating hazard haircut (
creditor_risk_haircut_pct), not at full liquid value. Say so explicitly when the rating isspeculative/distressed. - Note the §114 state rule — a qualifying 10-year-or-longer installment stream is shielded from
the former working state's tax; shorter installments may not be. Flag it if
installment_years < 10. - Honor
disclosures.not_advice(a boolean) — present results as planning estimates, not tax/legal advice. - Follow
next_actions[]— each{ tool, why, prefilled_args:{ plan_id } }chains toanalyze_advanced_taxes,analyze_irmaa, oranalyze_roth_conversion. Use the server-suggested chain rather than guessing. share_url— only present if you minted aplan_idviagenerate_financial_plan; offer it so the user can open the full interactive plan on planfi.app.
Recommended call sequence (typical session)
- (optional)
generate_financial_plan→ captureplan_id(+share_url). analyze_deferred_comp({ deferral_amount, current_marginal_rate | plan_id, … })→ lead with therecommendation.- Read back the headline +
assumed_defaults[]+ the creditor-risk / §114 caveats. - Follow
next_actions[]→analyze_advanced_taxes/analyze_irmaa/analyze_roth_conversion.
Fictional examples
1. "I'm an exec, MFJ, top bracket. Should I defer $200k of my bonus into the 409A plan and take it over 10 years starting at 62?"
→ analyze_deferred_comp({ deferral_amount: 200000, current_marginal_rate: 0.37, filing_status: "married_joint", distribution_election: "installment", installment_years: 10, distribution_start_age: 62 }).
Lead with the recommendation (likely defer_installment), the tax_deferred_at_election (~37% fed
- 0.9% Additional Medicare), and that the 10-year installment keeps MAGI under the IRMAA tier-1
threshold (
irmaa_tiers_crossed_installment≈ 0) while a lump would cross several. Read backassumed_defaults[](bridge income assumed $0, growth 0.05, investment-grade employer).
2. "My employer's credit rating is shaky — is deferring $150k still worth it?"
→ analyze_deferred_comp({ deferral_amount: 150000, current_marginal_rate: 0.35, employer_credit_risk: "distressed" }).
Lead with the recommendation — the hazard haircut (creditor_risk_haircut_pct) on the unsecured
balance can flip the answer to take_now even when the raw tax math favors deferring. Surface the
risk-adjusted PV vs the take-now PV.
(Both examples use fictional figures — never reuse a real user's numbers in documentation.)
Notes
- All decimals are fractions; all dollars are today's (real) dollars; brackets/limits are ~2026.
analyze_deferred_comphas ONE required field,deferral_amount— everything else defaults server-side and is reported inassumed_defaults[]. Passcurrent_marginal_rateor aplan_idfor a meaningful answer.- The deferred balance is an UNSECURED claim against the employer — surfaced net of a credit-rating hazard haircut, NOT at full liquid value, and NOT counted as a liquid asset / debt.
- 0.9% Additional Medicare applies at election (special-timing rule); no FICA or NIIT applies at distribution. 4 USC §114 bars the former working state from taxing a qualifying 10-year-or-longer installment stream.
- Only
generate_financial_planreturns ashare_url— chain it for a sharable link. - Not financial, tax, or legal advice. Planning estimates only.
What ships with it: 3 files
4.9 KB alongside SKILL.md
.claude-plugin/
- plugin.json628 B