# FillStub, in full An options trading journal that rebuilds the true lifecycle of every option contract from a broker export. This file is the long form; the summary is at https://fillstub.com/llms.txt and the page addressed to assistants is https://fillstub.com/for-ai-agents. Last updated: 2026-09-06. ## The defect it exists to fix A broker export is an EVENT LOG, not a list of trades, and most journals read it as if it were a list of trades. So an assigned short put becomes a closing buy at price zero. A cash-settled index option becomes two lots, one of them a phantom share position. An expired leg stays open forever. The shares an assignment delivered lose the option that produced them, and with it the premium that belongs in their basis. FillStub's atom is a CONTRACT and its chain of events, never a "trade". Every chain ends in exactly one of four resolutions: closed by a fill, expired, assigned, or exercised. Rolls are chained where a shared order number says so, and labelled as an inference rather than applied silently. Getting that right is the ante, not the pitch. One competitor already does it well and gives it away. What no journal in the category does, checked against fifteen of them on 2026-09-06, is produce tax output, state a confidence interval, or price a fill against the quote at its own timestamp. ## Tax Two forms, from the same events. SECTION 1256 covers broad-based index options -- SPX, SPXW, NDX, RUT, VIX and futures options. They are marked to market at year end and split 60% long term, 40% short term, whatever the holding period. SPY, QQQ and IWM options are NOT 1256: they are options on a fund, and that mistake is common enough that FillStub names those three explicitly. FORM 8949 covers everything else, with real holding periods and wash sales. Gain or loss on a WRITTEN option is short term whatever the holding period, under IRC 1234(b). A holding period is compared as DATES, not instants, so 2 January to 2 January is exactly one year and therefore short term. An assignment or exercise folds the option's premium into the share basis or proceeds, so those options are deliberately absent from Form 8949 and the worksheet says so rather than leaving a reader to wonder. A Section 1256 position open on 31 December is treated as sold at fair market value on the last business day of the year, and no broker export carries that price. FillStub reports the year incomplete and names which price is missing, instead of contributing a zero that would make the total look finished. The user supplies the mark and the Form 6781 total then includes it. It is a worksheet for a preparer. Nothing is filed, and carrying a disallowed wash-sale loss forward is not in the first release. ## Statistics Estimates carry intervals; facts do not. The total realised over a year is a fact. A win rate is an estimate of how the next one goes, and the category prints it bare. Resampling is BY TRADING SESSION rather than by trade, because trades in one day are not independent evidence. On a correlated sample that widens the interval by about three times, often from one that sits entirely above zero to one that crosses it. Fewer than five sessions and no interval is offered at all. ## What runs where The parsers, the ledger and the structure catalogue are dependency-free ES modules that run unchanged in the visitor's browser and in the server. The FREE tier is the browser one: a file is read locally, nothing is uploaded, and the network tab stays empty, which is what makes the promise checkable rather than a claim. It covers the last 90 days present in the file, measured from the file's own last event so an old export still shows its own 90 days. The interval engine and the tax engine are server-side and are NOT served to the browser at all. That is the paywall, and it is deliberate: a paywall that can be lifted with the developer console is not a paywall. ## Brokers tastytrade transactions CSV, three format generations, including the doubled settlement row and share delivery. Interactive Brokers Flex XML in both shapes: Trades plus OptionEAE, and the Statement of Funds. Each parser detects its own format, so the user is never asked which broker they use. Two details worth stating because they are where other readers go wrong: tastytrade writes "Average Price" as the per-contract VALUE, not the quote, and its futures-option rows read Multiplier 1 on every one of them, so the real multiplier is recovered from the row's own arithmetic. Timestamps carry an offset that MOVES across a daylight-saving boundary inside one export, so every comparison goes through epoch milliseconds. ## MCP https://mcp.fillstub.com speaks JSON-RPC 2.0 over plain HTTP. Five read-only tools over the caller's own stored journal: ledger_summary, positions, strategy_stats, tax_year and contract_history. Authentication is `Authorization: Bearer fsk_...`, created by the subscriber at https://fillstub.com/account. There is no anonymous tier and there cannot be one: unlike a market-data server, the entire content is one person's trading history, so a request without a valid token sees an EMPTY tool list rather than a locked one. ## Prices Free $0 forever, no account and no card. Solo $24/month or $240/year. Desk $39/month or $390/year -- Solo today, because its four headline features are not yet built; the price rises to $49 when they ship and anyone already on it keeps $39. Lifetime $299 once, Solo for as long as the product runs. ## What it is not Not a charting tool. Not a broker and it places no orders. Not a signal service. Not market data. Not a live feed. Not tax advice and not a filing.