Vol Desk measures the chain you paste, exactly as you paste it. It has no market connection and no view on direction — a volatility surface prices uncertainty, not a move. It is not investment advice, a quote it cannot read is named and excluded rather than quietly dropped, and a number it cannot compute honestly is refused rather than approximated.
How it works
Nothing to hand? Load the , three expiries of a large-cap index with a pronounced put skew, where the quote holding up the front-month at-the-money reading is not the one nearest the money. Or the , the same name a fortnight after a drop, where realized volatility has overtaken implied in the front month and the term structure has inverted — a different verdict on every axis. Or the , a paste with a crossed market, a call under its discounted intrinsic, an expiry already gone, a wing that never reaches 25 delta and a price history too short for the 90-day window, so most of the readout is refusals with their reasons. to watch the export refuse itself. All three replay a saved run for free.
1. The chain is read, not assumed
Comma, tab, pipe and markdown all parse. A header token proposes a role and the column's own contents confirm or veto it: a column labelled “strike” whose cells are not numbers is not a strike column, and a headerless paste is classified from content alone. Each test reads only its own column, because a call/put classifier that peeks at the strike beside it is a classifier that will eventually be decided by the wrong data.
2. Every volatility is solved, and the solve is reported
The price is checked against the no-arbitrage bounds first, then bracketed between 0.01% and 500% and bisected. Newton would be faster and is not guaranteed to stay inside the bracket, and the quotes where it wanders are the deep wings where a confident wrong number is hardest to spot. The iteration count and the residual in price terms come back with every solved quote, so you are reading a solve that converged rather than a claim that it did.
3. The smile is fitted out-of-the-money only
Puts below the forward, calls above it. An in-the-money quote carries a much wider spread, and folding it into the fit imports that spread as if it were volatility information. The claim that a call and a put at one strike share a volatility is the parity condition being checked elsewhere on this page, so it cannot be assumed here. The at-the-money level is interpolated at the forward, and a tenor whose quotes all sit on one side of it is refused rather than extrapolated.
4. Rich and cheap have to clear the band
Realized volatility from n returns carries a standard error of about itself over the square root of 2n, so a 20-day window on a 20% name is worth roughly three vol points at 95%. A gap smaller than that is not evidence, and the only word the page — and the AI pass — may use for it is “fairly priced”. The mismatch in calendar days between the realized window and the expiry it was matched to is printed too, because 20 trading days is about 28 calendar days.
5. The decisive quote is simulated, not spotted
Each solved quote in a tenor is removed in turn, the curve is refitted, and the at-the-money volatility is measured again. The decisive one is whichever removal moves the reading furthest, printed in vol points. That is a different question from which quote sits nearest the money or carries the most vega, and it routinely has a different answer, because influence depends on where the gap in the strike ladder falls. When no single removal leaves a reading behind, the engine says so instead of naming one.
6. The shortcut is shown with its error
Brenner-Subrahmanyam puts the at-the-money volatility at the square root of two pi over the time to expiry times the premium over spot — mental arithmetic a desk actually uses — and it is printed beside the bisected answer with the signed vol points between them. Square-root-of-time scaling is printed the same way, and there the error IS the term structure restated, which is why the page says the two cannot corroborate each other. Neither can the risk reversal and the butterfly: they are one fitted smile described twice.
7. Four causes, and each one has to fit
A crossed market or an absent price is a missing input. A call under its discounted intrinsic is a quote outside the no-arbitrage bounds — a broken quote, not a low volatility. An option that has already expired is a period the metric is not defined on. A bracket that will not close, or a vega that has collapsed, is a solve that does not converge. Nothing is forced into a cause that does not fit it, because a refusal filed under the wrong reason states something untrue.
8. The pass may only say what the numbers admit
Before the model runs, the engine computes the set of words each tenor's measurement supports — rich, cheap or fairly priced; put skew, call skew or symmetric; contango, backwardation or flat — and the prompt forbids everything else. Afterwards the checker compares the reply against that set and names every inadmissible characterisation by its tenor id, counts the coverage against the measurable tenors, and traces every figure in the prose back to the measurement. A figure that is not in the measurement is reported as invented.
Derived from the option-vol-analysis agent skill by Anthropic (anthropics/financial-services-plugins). The source routes market-data tools into a volatility assessment; Vol Desk keeps the method and measures the chain you paste, in your browser. Drive it from your own code · Manage your token
Questions
The answers below are the page's own words for what the engine does. Every one of them is also published as structured data, and nothing is claimed here that the app does not do.
Why bisection rather than Newton for the implied volatility?
Because Newton is faster but is not guaranteed to stay inside the bracket, and the quotes where it wanders are exactly the ones where a wrong answer is hardest to notice: a deep wing whose vega has nearly collapsed. Vol Desk brackets the volatility between 0.01% and 500%, checks that the quoted price actually lies between the prices at those two bounds, and bisects. If the price is outside the bracket, or the bracket does not close, or vega collapses below the point where the price carries any volatility information at all, the quote is refused with the reason and the residual rather than given a confident number. The iteration count and the residual in price terms are printed for every solved quote, so you are reading a solve that converged rather than a claim that it did.
How is the at-the-money volatility decided?
From the out-of-the-money curve only: puts below the forward, calls above it. Mixing an in-the-money quote into the fit imports its much wider bid-ask spread as though it were volatility information, and the claim that a call and a put at the same strike carry the same volatility is exactly the parity condition being measured elsewhere, so it cannot be assumed here. The surviving quotes are placed by log-moneyness against the forward and the volatility is interpolated at the forward itself. If every out-of-the-money quote in a tenor sits on one side of the forward, the at-the-money volatility would have to be extrapolated, so it is refused instead.
Why is the risk reversal sometimes refused?
Because a 25-delta reading needs two quotes on that wing whose deltas straddle 0.25, and reaching for the nearest available quote and calling it the 25-delta is how a skew number ends up describing a 0.12-delta option. Each wing is interpolated in delta space, which is the space the quotes are actually organised in, and a wing that does not straddle 0.25 is refused with the span it does cover. The butterfly needs both wings and the at-the-money level, so it inherits every refusal either of them carries.
What makes something rich or cheap?
A gap that clears its own sampling band. Realized volatility from n daily returns has a standard error of about the volatility divided by the square root of 2n, so a 20-day window on a 20% stock carries a band of roughly three vol points at 95%. Vol Desk calls a tenor rich only when the implied minus realized gap exceeds that band, cheap only when it falls below the negative of it, and fairly priced otherwise - and the AI pass is only permitted the word the band admits. It also prints the mismatch in calendar days between the realized window and the expiry it was matched to, because 20 trading days is about 28 calendar days and pretending a 45-day option matches it exactly attributes a premium to the wrong tenor.
How is the decisive quote in a tenor found?
By simulation. Each solved quote in the tenor is removed in turn, the out-of-the-money curve is refitted without it, and the at-the-money volatility is measured again. The decisive quote is whichever removal moves the reading furthest, and the move is printed in vol points. That is a different question from which quote sits nearest the money or which carries the most vega, and it routinely has a different answer, because a quote's influence depends on where the gap in the strike ladder falls, not on its size. If removing any one quote leaves too few points to refit, the engine says so rather than naming one.
Why print an approximation you say is wrong?
Because desks use it, so the useful thing is not to hide it but to show what it costs. The Brenner-Subrahmanyam formula puts the at-the-money volatility at the square root of two pi over the time to expiry, times the premium over the spot - arithmetic you can do in your head - and Vol Desk prints it next to the bisected answer with the signed vol points between them. The square-root-of-time projection is printed the same way, and there the error is the point: under a flat surface it would predict the same volatility at every horizon, so the vol points by which it misses ARE the term structure, restated. The page says that plainly, because a term structure and its own square-root-of-time error are one observation and cannot corroborate each other.
What happens to a quote it cannot solve?
It is refused with one of exactly four causes, chosen because it fits and never because it is convenient. A crossed market, an absent price or a wing with nothing to interpolate between is a missing input. A call trading below its discounted intrinsic or above the spot is a quote outside the no-arbitrage bounds - a broken quote, not a strange volatility. An option that expired before the as-of date, or expires on it, is a period the metric is not defined on, because there is no time for a volatility to act over. A bracket that does not close, or a vega that has collapsed, is a solve that does not converge. Every refusal names the quote, the cause and the arithmetic.
Do I have to sign in?
No. Parsing the chain, solving every implied volatility, the Greeks, the smile fit, the term structure, realized volatility and its band, the Parkinson estimator, the parity, convexity and calendar checks, the driver simulation, the refusals, the whole desk note, both CSVs, the measurement JSON and every check run in this tab with no account and nothing charged. Only the commentary sentences are metered, and the three bundled surfaces replay a saved run for free.
Why can the download be refused?
Because the thing that must never change silently between the measurement and the file you send round the desk is which quotes were on the surface and what each one solved to. Before any export the rendered note is read back, the quote and tenor ids are collected, and the download is blocked if a quote has been lost, listed twice, moved to a different expiry, or had its implied volatility edited. A warning would be cheaper and would also be ignored.
Is this investment advice?
No. Vol Desk measures the chain you paste, exactly as you paste it. It has no market connection, no live quotes and no view on direction - a volatility surface prices uncertainty, not a move. It cannot see anything outside the text you give it, and a quote it cannot read is named and excluded rather than quietly dropped.