options-flow
You hand over a watchlist. The skill scans each name's options chain,
filters for unusual activity (high volume vs 30-day avg, volume above
open interest, premium thresholds), classifies each print as a sweep or
block, infers direction from where the trade printed in the NBBO, and
emits a Cheddar Flow / FlowAlgo-style stream of the top N most actionable
prints.
This is the "what's smart money doing right now" workflow. Unlike a chain
viewer or screener, options-flow ranks prints by signal quality rather
than raw volume, ships the methodology with the output, and emits both
JSON and human-readable formats from one analysis.
When to invoke
- A trader is starting their session and wants the day's unusual flow
- A PM is checking whether options activity confirms a thesis
- The user says "what's the flow on NVDA today", "any unusual options
activity in TSLA", or "scan flow on my watchlist"
- A discretionary trader is hunting for sympathy plays off a major print
What you need
- A watchlist of tickers (default: AAPL, NVDA, TSLA, AMD, SPY)
MASSIVE_API_KEY exported in the environment
- Options Developer plan minimum (Options Business for real-time)
The skill runs at three fidelity tiers. The chosen tier is flagged in
the output JSON as tier.
- Tier A (real-time): Options Business + Stocks Business. Tape is
live, sweeps detected within seconds, IV and OI fresh. The output
matches what Cheddar Flow / FlowAlgo show their subscribers.
- Tier B (15-min delayed): Options Developer + Stocks Starter. Same
methodology, same per-print fields, but the prints are at least 15
minutes old. Useful for end-of-day review or postmortems.
- Tier C (free Basic): Documented but not actively supported. Free
Basic doesn't include options snapshot or trades; the skill warns and
exits.
What you get back
The skill ships two output layers from one analysis.
Layer 1: canonical JSON matching output-schema.json.
Per-print fields include the OCC contract ID, kind (sweep/block/other),
premium, volume, volume vs 30-day avg, volume vs OI (signals
opening/closing), price vs NBBO (above_ask / at_mid / below_bid),
inferred direction (bullish/bearish/neutral), spot at print, IV at
print, and the contributing trades. UIs, alert pipelines, and downstream
agents consume this.
Layer 2: rendered stream in Cheddar Flow style. See
references/rendering.md for the format
rules. Three lines per print plus optional ↳ continuation lines for
context (clustering, prior prints, dealer notes). Compact, scanable,
key:value pairs. Claude Code users read this.
How it works
- For each ticker in the watchlist, pull the options chain snapshot
filtered to expiries within the next ~60 days and strikes within ±10%
of spot. This caps the chain at the slice where actionable flow lives.
- For each contract, compute the unusual activity score per
references/unusual-activity-detection.md:
volume / 30-day avg, volume / OI (signals opening vs closing interest),
premium dollar value, and percentage of chain volume.
- Pull recent trades for the top-ranked contracts. Classify each as
sweep or block per
references/sweep-vs-block.md:
the Massive trade conditions field carries condition 219
(Intermarket Sweep Order) when the print swept multiple exchanges.
- Infer direction per
references/directional-inference.md:
compare trade price to the NBBO at the time of print (above ask =
aggressive buy, below bid = aggressive sell, at mid = negotiated).
Apply the call/put overlay for bullish vs bearish read.
- Distinguish opening from closing per
references/opening-vs-closing.md:
trade volume materially above OI = new interest opening; under OI =
likely closing existing positions.
- Rank all qualifying prints by score and emit the top N (default 20).
Foundations used
Output mode: stream
Stream mode is the format Cheddar Flow / FlowAlgo / Unusual Whales use
for live flow. Each print is a self-contained block; the reader scans
top to bottom and stops when they see one they want to act on.
references/rendering.md is the canonical
format reference for any future stream-mode skill (news-scanner,
crypto-vol-scanner).
Endpoints used
GET /v3/snapshot/options/{ticker}: paginated options chain with
per-contract day volume, OI, IV, greeks, last quote (NBBO).
GET /v3/trades/{occ_ticker}?timestamp.gte={start_ns}×tamp.lte={end_ns}:
tick-level trades for a contract over today's session window. Returns
size, price, conditions array (219 = ISO sweep), and exchange. Used
to classify sweep vs block. Real-time on Options Business; 15-min
delayed on Options Developer.
GET /v3/quotes/{occ_ticker}?timestamp.lte={trade_ns}: NBBO at each
contributing trade's sip_timestamp, used for direction inference
per-trade rather than against a single most-recent quote.
GET /v2/aggs/ticker/{occ_ticker}/range/1/day/{from}/{to}: per-day
volume aggregates for the contract's recent history, used to compute
30-day average volume.
GET /v2/snapshot/locale/us/markets/stocks/tickers/{ticker}: spot
price snapshot, with the best-price fallback chain.
Doesn't handle (yet)
- Multi-leg detection (spreads, condors, butterflies). Massive's trade
feed marks them via conditions 232-245, which the script excludes
from sweep/block classification. Constructing the underlying strategy
requires linking the legs by
sequence_number, which the v1 skill
doesn't attempt.
- Dealer positioning / GEX. The skill documents the methodology in
references/dealer-positioning.md
but doesn't compute it. v2 candidate.
- Real-time WebSocket streaming. v1 is REST-polled. Use the
massive-websockets foundation for live stream interop in a future
variant of this skill.
- Dark pool prints on the underlying. Surfacing dark prints alongside
options flow is a known complement; left for a separate skill.
These are clean PR extensions and welcome contributions.
1---2name: options-flow3description: Surface unusual options activity across a watchlist as a Cheddar Flow / FlowAlgo-style stream. Each notable print rendered as a three-line block with kind (sweep vs block), premium, volume vs avg, volume vs OI (opening vs closing), price relative to NBBO, and inferred direction. Use when a trader is scanning for unusual flow, monitoring smart money, or hunting for actionable setups. Real-time on Options Business; ~15-min delayed on Options Developer.4---56# options-flow78You hand over a watchlist. The skill scans each name's options chain,9filters for unusual activity (high volume vs 30-day avg, volume above10open interest, premium thresholds), classifies each print as a sweep or11block, infers direction from where the trade printed in the NBBO, and12emits a Cheddar Flow / FlowAlgo-style stream of the top N most actionable13prints.1415This is the "what's smart money doing right now" workflow. Unlike a chain16viewer or screener, options-flow ranks prints by signal quality rather17than raw volume, ships the methodology with the output, and emits both18JSON and human-readable formats from one analysis.1920## When to invoke2122- A trader is starting their session and wants the day's unusual flow23- A PM is checking whether options activity confirms a thesis24- The user says "what's the flow on NVDA today", "any unusual options25 activity in TSLA", or "scan flow on my watchlist"26- A discretionary trader is hunting for sympathy plays off a major print2728## What you need2930- A watchlist of tickers (default: AAPL, NVDA, TSLA, AMD, SPY)31- `MASSIVE_API_KEY` exported in the environment32- Options Developer plan minimum (Options Business for real-time)3334The skill runs at three fidelity tiers. The chosen tier is flagged in35the output JSON as `tier`.3637- **Tier A (real-time):** Options Business + Stocks Business. Tape is38 live, sweeps detected within seconds, IV and OI fresh. The output39 matches what Cheddar Flow / FlowAlgo show their subscribers.40- **Tier B (15-min delayed):** Options Developer + Stocks Starter. Same41 methodology, same per-print fields, but the prints are at least 1542 minutes old. Useful for end-of-day review or postmortems.43- **Tier C (free Basic):** Documented but not actively supported. Free44 Basic doesn't include options snapshot or trades; the skill warns and45 exits.4647## What you get back4849The skill ships two output layers from one analysis.5051**Layer 1: canonical JSON** matching [`output-schema.json`](./output-schema.json).52Per-print fields include the OCC contract ID, kind (sweep/block/other),53premium, volume, volume vs 30-day avg, volume vs OI (signals54opening/closing), price vs NBBO (above_ask / at_mid / below_bid),55inferred direction (bullish/bearish/neutral), spot at print, IV at56print, and the contributing trades. UIs, alert pipelines, and downstream57agents consume this.5859**Layer 2: rendered stream** in Cheddar Flow style. See60[`references/rendering.md`](./references/rendering.md) for the format61rules. Three lines per print plus optional `↳` continuation lines for62context (clustering, prior prints, dealer notes). Compact, scanable,63key:value pairs. Claude Code users read this.6465## How it works66671. For each ticker in the watchlist, pull the options chain snapshot68 filtered to expiries within the next ~60 days and strikes within ±10%69 of spot. This caps the chain at the slice where actionable flow lives.702. For each contract, compute the unusual activity score per71 [`references/unusual-activity-detection.md`](./references/unusual-activity-detection.md):72 volume / 30-day avg, volume / OI (signals opening vs closing interest),73 premium dollar value, and percentage of chain volume.743. Pull recent trades for the top-ranked contracts. Classify each as75 sweep or block per [`references/sweep-vs-block.md`](./references/sweep-vs-block.md):76 the Massive trade conditions field carries condition `219`77 (Intermarket Sweep Order) when the print swept multiple exchanges.784. Infer direction per [`references/directional-inference.md`](./references/directional-inference.md):79 compare trade price to the NBBO at the time of print (above ask =80 aggressive buy, below bid = aggressive sell, at mid = negotiated).81 Apply the call/put overlay for bullish vs bearish read.825. Distinguish opening from closing per83 [`references/opening-vs-closing.md`](./references/opening-vs-closing.md):84 trade volume materially above OI = new interest opening; under OI =85 likely closing existing positions.866. Rank all qualifying prints by score and emit the top N (default 20).8788## Foundations used8990- [`massive-api-patterns`](../massive-api-patterns) for REST auth, rate91 limiting, and the best-price fallback chain for spot9293## Output mode: stream9495Stream mode is the format Cheddar Flow / FlowAlgo / Unusual Whales use96for live flow. Each print is a self-contained block; the reader scans97top to bottom and stops when they see one they want to act on.98[`references/rendering.md`](./references/rendering.md) is the canonical99format reference for any future stream-mode skill (news-scanner,100crypto-vol-scanner).101102## Endpoints used103104- `GET /v3/snapshot/options/{ticker}`: paginated options chain with105 per-contract day volume, OI, IV, greeks, last quote (NBBO).106- `GET /v3/trades/{occ_ticker}?timestamp.gte={start_ns}×tamp.lte={end_ns}`:107 tick-level trades for a contract over today's session window. Returns108 size, price, conditions array (219 = ISO sweep), and exchange. Used109 to classify sweep vs block. Real-time on Options Business; 15-min110 delayed on Options Developer.111- `GET /v3/quotes/{occ_ticker}?timestamp.lte={trade_ns}`: NBBO at each112 contributing trade's `sip_timestamp`, used for direction inference113 per-trade rather than against a single most-recent quote.114- `GET /v2/aggs/ticker/{occ_ticker}/range/1/day/{from}/{to}`: per-day115 volume aggregates for the contract's recent history, used to compute116 30-day average volume.117- `GET /v2/snapshot/locale/us/markets/stocks/tickers/{ticker}`: spot118 price snapshot, with the best-price fallback chain.119120## Doesn't handle (yet)121122- Multi-leg detection (spreads, condors, butterflies). Massive's trade123 feed marks them via conditions 232-245, which the script excludes124 from sweep/block classification. Constructing the underlying strategy125 requires linking the legs by `sequence_number`, which the v1 skill126 doesn't attempt.127- Dealer positioning / GEX. The skill documents the methodology in128 [`references/dealer-positioning.md`](./references/dealer-positioning.md)129 but doesn't compute it. v2 candidate.130- Real-time WebSocket streaming. v1 is REST-polled. Use the131 `massive-websockets` foundation for live stream interop in a future132 variant of this skill.133- Dark pool prints on the underlying. Surfacing dark prints alongside134 options flow is a known complement; left for a separate skill.135136These are clean PR extensions and welcome contributions.