# Carry Desk > An FX carry sheet that runs in the browser - annualised carry and the side that earns it at > every tenor, carry-to-vol, breakeven spots, the carry cushion and loss probability at the > implied vol, the covered interest parity check, the risk-reversal read, the sweet-spot tenor > and the spot-history context - followed by a paid review that reads the sheet like an FX > strategist and names the carry trade and tenor the numbers support, or none. Every number the > review writes is checked against the sheet. https://carry-desk.skillsafe.ai/ Carry Desk is a web app on SkillSafe derived from the agent skill @anthropics/fx-carry-trade (anthropics/financial-services-plugins, Apache-2.0). It runs on gpt-terra and is metered per review; the sheet itself is free and needs no account. The source skill pulls spot, forwards, vol surfaces and history from market-data tools; this app takes them as a paste instead. ## Input One currency pair (six letters, base then quote, e.g. USD/JPY), the spot mid (optionally bid and ask), a notional in the base currency, a target tenor (1M, 3M, 6M or 1Y), and the forward curve: one tenor per line (1W, 1M, 3M, 1Y ...) with forward points in pips (or outright forwards), optionally the ATM implied vol, the 25-delta risk reversal and butterfly in vol points, both deposit rates in percent and a days column. A header row names the columns in any order (multi-word names such as "Fwd Points" or "ATM Vol" work; bid and ask columns are averaged to the mid); the two currency codes name the deposit-rate columns; ON, TN and SN lines are skipped. Optionally a daily close history, one close per line with a date (2026-10-07, 10/07/2026, 07-Oct-2026 or 20261007) or oldest first; a header picks the Close or PX_LAST column. The pip size is 0.01 when the quote currency is JPY and 0.0001 otherwise, unless set. The page keeps one snapshot of the free sheet per pair per day in the browser (per signed-in person, cleared on sign-out) and says what moved since the last day's sheet: spot, the target tenor's carry and carry-to-vol, the assessment, the skew read, the sweet spot and the flags. The tenor table copies as tab-separated cells for a spreadsheet. A sheet that hit the 16-tenor or 800-close limit says so on the page, in the Markdown and with "-partial" in download names. ## What the free sheet computes - The outright forward (spot plus points times pip), the annualised forward premium, and annualised carry = |forward - spot| / spot x 365 / days, with the currency that earns it (the one at a forward discount). - Carry over the tenor, the P&L on the notional in both currencies if spot is unchanged, and the breakeven spot (the forward) in price and pips. - Carry-to-vol (annualised carry / ATM vol); the cushion, |ln(F/S)| / (vol x sqrt(days/365)), in standard deviations; and the loss probability under a driftless normal log return. - Covered interest parity from the deposit rates on each currency's money-market basis (ACT/365 for GBP, AUD, NZD, CAD and others, ACT/360 otherwise): the CIP forward, the forward vs CIP in pips, the FX-implied base-currency yield and its basis to the quoted rate. - The skew read: the 25-delta risk reversal (base calls minus base puts) is supportive, neutral (under 0.25 vol) or against the side that earns carry; the butterfly as tail pricing. - The assessment at the target tenor from carry-to-vol: attractive at 0.40 or more, moderate from 0.20, unattractive below; the sweet spot is the tenor of a month or longer with the best carry-to-vol. - From the history: 52-week (252-close) range and where spot sits in it, realised vol (3M and range window, 252-day annualised), the 63-close return, MA50 and MA200, and the worst drawdown for the carry side. - Flags: forward points on the wrong scale, a kinked forward curve (both make the signals untrusted), a carry sign flip along the curve, a wide CIP basis, an inverted vol curve, skew against the carry, fat tails, no vol at the target, realised vol above implied, a trend against the carry, spot at the edge of its range, a history that does not match spot (untrusted), a short history, a wide bid-ask against the carry, and a sparse curve. ## What the review returns One JSON object: `assessment` and `skew_signal` (copied from the sheet), `stance` (one of the priced trade ids such as long_usd_3m, or no_trade - required when the signals are untrusted), `conviction` (high, medium, low, or none for no_trade; high only when the assessment is attractive and no medium or high flag is raised), `headline`, `carry_read`, `vol_read`, `history_read`, `trade` (construction, tenor_choice, sizing, exit), `alternatives` (id, why), `risks` (risk, severity, tenors, watch), `flag_responses` (one per flag), `checks`, `summary`. ## Limits It does not know market levels, positioning, the policy path or any history you did not paste. The loss probability is a model figure, not a forecast. It ignores value dates and holidays (standard day counts unless a days column is given), the bid-ask on forward points and the cost of rolling. It is analysis, not investment advice. ## Links - App: https://carry-desk.skillsafe.ai/ - API tutorial: https://carry-desk.skillsafe.ai/api.html - Source skill: https://skillsafe.ai/skill/@anthropics/fx-carry-trade