advisor_argue_as
Get the strongest honest case one specific stance would make, so you can voice that side of a debate. Stances are 'growth' (assumes 13% returns, treats cheap debt as leverage) and 'preservation' (assumes 7%, prices…
stance: string, amount: number, horizonMonths: number?
advisor_assumptions
List every planning assumption the app uses -- expected returns and volatility per asset class, and the user's assumed portfolio return. Call this when the user asks why a number is what it is, or before presenting…
advisor_begin_whatif
Open a sandboxed what-if branch. While a branch is open, every write tool changes only the sandbox, never the user's real profile, so you can explore freely -- apply prepayments, rebalance, reprice holdings -- and…
name: string
advisor_create_handoff_link
Package the user's entire financial position into a shareable link so another person's AI agent can pick it up and continue the analysis in their own browser session. Use when the user wants a second opinion from a…
from: string, note: string?
advisor_explain_number
Explain how a specific headline figure was derived, showing the inputs and the formula. Supported figures: net_worth, surplus, emi_burden, risk_score, emergency_runway. Use when the user challenges or asks about a…
figure: string
advisor_horizon_projection
Project net worth forward over a horizon, showing how debt runs down and investments compound under current behaviour. Use to make a recommendation concrete.
horizonMonths: number?
advisor_list_stances
List the advisor stances available for a second opinion and the assumptions each one holds. Call this if you need to know what positions can be argued before staging a debate.
advisor_load_handoff_link
Load a financial position that someone else shared with you as a handoff link. Paste the whole URL. This replaces the profile currently on screen with theirs, so you can analyse their numbers instead of your own.
url: string
advisor_net_position
Give the whole balance sheet at once: investable portfolio, non-investable real assets such as a home, cash, total debt, net worth, debt-to-assets, monthly EMI and monthly surplus. The fastest way to orient yourself…
advisor_prepay_vs_invest
THE cross-domain question: should a given amount of spare cash go towards prepaying a loan or into the portfolio? Compares every active loan against the assumed portfolio return by simulating both paths month by month…
amount: number, horizonMonths: number?
advisor_recommendations
Generate a prioritised action list synthesised across loans, portfolio and budget, each item citing which tools produced its evidence and what the impact would be. Use to answer 'what should I do' or to close out an…
advisor_risk_exposure
Score the user's overall financial fragility out of 100 by combining debt service burden, leverage, emergency runway, portfolio risk and savings rate. Reads loans, portfolio and budget together. Use when asked 'how…
advisor_save_scenario
Snapshot the current financial picture under a name so it can be compared against others later. Use to capture a branch worth remembering before discarding it.
name: string, note: string?
advisor_second_opinion
Run the same decision through two deliberately different advisors -- a growth stance assuming 13% returns and a capital-preservation stance assuming 7% -- and report where they agree, where they diverge, and the exact…
amount: number, horizonMonths: number?
advisor_shared_position_info
Report whether the position currently loaded came from someone else's handoff link, who shared it and what note they attached. Call this at the start of a session so you know whose finances you are actually looking at.
advisor_stress_test
Stress-test the entire financial picture against a combined shock: months without income, a named market event, and/or an interest rate rise, all at once. Reports whether the plan breaks and at what point. Use for…
jobLossMonths: number?, marketShock: string?, rateHikeBps: number?
budget_add_expense
Add a recurring monthly expense. Mark it essential if it cannot be cut in a crisis.
name: string, amount: number, essential: boolean?
budget_add_goal
Add a savings goal with a target amount and a deadline in months.
name: string, targetAmount: number, targetMonths: number, savedSoFar: number?
budget_goal_feasibility
Assess whether the user's savings goals are actually reachable given their current monthly surplus, and flag which ones collide. Use when the user asks whether they can afford a goal, or before recommending they…
budget_remove_expense
Remove a recurring expense by id or name. Use when the user stops paying for something, which frees up monthly surplus.
expenseId: string
budget_remove_goal
Remove a savings goal by id or name. Use when a goal has been met, abandoned, or was entered in error.
goalId: string
budget_set_cash_reserve
Set the liquid cash the user holds outside their investments. This is what funds prepayments and emergencies.
cashReserve: number
budget_set_expected_return
Set the assumed long-run annual portfolio return used by goal and prepay-vs-invest maths. Use when the user wants to test a more or less optimistic assumption.
expectedReturnPct: number
budget_set_income
Set the user's monthly take-home income. Everything downstream -- surplus, savings rate, debt-service ratio and goal feasibility -- is derived from this, so set it before giving cashflow advice.
monthlyIncome: number
budget_summary
Show monthly income, essential and discretionary spending, total EMI outflow, the resulting surplus, the savings rate and how many months of emergency runway the cash reserve buys. Call this for any question about…
loan_add
Add a new loan to the user's profile. Use this when the user describes a debt they hold. Returns the computed EMI and the new loan's id.
name: string, principal: number, annualRatePct: number, termMonths: number, kind: string?, monthsPaid: number?
loan_amortisation
Show the month-by-month interest/principal split for a loan already in the profile. Use to explain where the money is actually going.
loanId: string, months: number?, fromMonth: number?
loan_compare_offers
Compare two or more loan offers on total cost including processing fees, and identify the cheapest. Use when the user is shopping for a loan or considering a refinance.
offers: array
loan_emi_calculator
Compute the EMI, total interest and total repayment for hypothetical loan terms, without touching the user's profile. Use for 'what would the EMI be if...' questions.
principal: number, annualRatePct: number, termMonths: number
loan_list
List every loan in the user's profile with its EMI, outstanding balance, months remaining and interest still to be paid. Call this first whenever a question involves debt, and before calling any other loan_* tool, so…
loan_propose_prepayment
Propose actually applying a prepayment to the user's profile. This does NOT take effect immediately: it creates a proposal card the human must approve or reject in the app. Use this after loan_simulate_prepayment when…
loanId: string, lumpSum: number, reason: string?
loan_remove
Remove a loan from the profile by its id. Use when a loan was entered by mistake or has been closed.
loanId: string
loan_simulate_prepayment
Simulate paying a lump sum and/or a permanent extra monthly amount into a loan, holding the EMI constant. Returns months saved and interest saved. This only simulates -- it does not change anything. To actually apply…
loanId: string, lumpSum: number?, extraMonthly: number?
market_apply_conditions
Take what you found in your research and work out what it means for this specific person — every aspect of it. Give one entry per asset class with the percentage move you observed and a short note on why. Returns the…
conditions: array
market_last_read
Report the market conditions most recently applied in this session, if any — what was observed, when, and the resulting move. Use it to avoid re-researching something you already looked up a few minutes ago.
market_research_brief
Get a research brief telling you exactly what market news to go and look up for THIS user's holdings, ranked by how much each exposure actually matters to them. The page holds no market data and fetches nothing — use…
portfolio_add_holding
Add an investment holding to the portfolio. Use when the user tells you about something they own, so allocation and risk maths include it.
symbol: string, name: string, assetClass: string, units: number, price: number
portfolio_add_real_asset
Record a non-investable asset such as a self-occupied home. It counts towards net worth but is deliberately excluded from allocation, rebalancing and concentration risk, because you cannot sell a third of the house…
name: string, value: number
portfolio_allocation
Break the portfolio down by asset class, with the weight of each, the blended expected return, the volatility and a 0-100 risk score. Use this to answer 'how is my portfolio positioned' or before recommending a…
portfolio_list
List every investment holding with its units, price, current value and asset class. Call this before any other portfolio_* tool so you know which holding ids exist.
portfolio_plan_rebalance
Compute the buys and sells needed to move the portfolio to a target allocation by asset class. Targets are normalised, so they need not sum to 100. This only plans -- call portfolio_propose_rebalance to actually apply…
target: object
portfolio_propose_rebalance
Propose actually rebalancing the portfolio to a target allocation. This does NOT take effect immediately: it creates a proposal card the human must approve or reject. Use after portfolio_plan_rebalance when the user…
target: object, reason: string?
portfolio_remove_holding
Remove a holding from the portfolio by id or ticker symbol. Use when the user has sold a position or entered it in error.
holdingId: string
portfolio_simulate_market_event
Simulate a named market event (equity crash, rate spike, crypto winter, broad risk-off, gold rally) against the portfolio and report the damage per holding. Read-only.
event: string
portfolio_update_price
Update the current price of a holding, for example to reflect a live quote the user gives you.
holdingId: string, price: number