8-k-scanner
Scan SEC 8-K disclosures across a single ticker or a watchlist using Massive's pre-parsed disclosure taxonomy. Groups the underlying rows by filing (one 8-K…
Surface the day's news events that actually moved a stock. For each notable headline across a watchlist (or the broader market), render a Bloomberg news tape / Benzinga Pro-style stream with sentiment, novelty, and the post-publish price reaction. Ranked by impact, capped at top
$ npx -y skills add rgourley/quant-garage --skill news-scanner --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/news-scannerContext preview
The summary Claude sees to decide when to auto-load this skill.
Surface the day's news events that actually moved a stock. For each notable headline across a watchlist (or the broader market), render a Bloomberg news tape / Benzinga Pro-style stream with sentiment, novelty, and the post-publish price reaction. Ranked by impact, capped at top
name: news-scanner description: Surface the day's news events that actually moved a stock. For each notable headline across a watchlist (or the broader market), render a Bloomberg news tape / Benzinga Pro-style stream with sentiment, novelty, and the post-publish price reaction. Ranked by impact, capped at top N (default 15-20). The 6am sell-side morning-note prep workflow.
You hand over a watchlist and a time window. The skill pulls every news event Massive has on those tickers in the window, derives a sentiment score per ticker per article, measures whether the angle is novel or a re-run, computes the stock's price reaction since publish, ranks events by impact, and emits a stream of the top N.
This is the workflow a sell-side analyst runs at 6am to write the morning note. Twenty headlines that actually moved a stock, with the context (sentiment + novelty + reaction + volume anomaly + divergence flag) to write about them in 30 minutes. Unlike a news terminal or RSS reader, news-scanner ranks events by signal quality (price reaction × volume anomaly × novelty) rather than recency, and ships the methodology with the output.
ranked by impact
or "any catalyst on my watchlist"
positive reaction = bad news already priced in)
The skill runs at two fidelity tiers.
returns per-ticker `insights[]` with a categorical sentiment label ("positive" / "negative" / "neutral") and `sentiment_reasoning` from Benzinga's own NLP. Stocks Starter or higher gives reliable minute aggregates for the reaction window. This is the default tier.
Benzinga `insights` field is empty. Sentiment falls back to a keyword scorer (positive: beat, raise, partnership, upgrade; negative: cut, miss, lawsuit, downgrade, recall, probe). Reaction calc still works on Stocks Basic but uses 5-minute aggregates instead of 1-minute. Documented in [`references/sentiment-scoring.md`](./references/sentiment-scoring.md).
Two output layers from one analysis.
**Layer 1: canonical JSON** matching [`output-schema.json`](./output-schema.json). Per-event fields: ticker, published_at, source, headline, url, sentiment_score (in [-1, +1]), sentiment_source ("benzinga" or "keyword"), novelty_score, novelty_band, reaction_pct_since_publish, reaction_window_label, volume_anomaly_x, divergence_flag, context_line. UIs, alert pipelines, and downstream agents consume this.
**Layer 2: rendered stream** in Bloomberg news-tape / Benzinga Pro style. Three lines per event, optional `↳` continuation for context. Format rules in [`references/rendering.md`](./references/rendering.md). Compact, scanable, key:value pairs. Claude Code users read this.
1. For each ticker in the watchlist, pull `/v2/reference/news?ticker={t}&published_utc.gte={window_start}&limit=50`. Dedupe by `article_url` across the merged set so a story syndicated across publishers only appears once. See [`references/news-sources-and-coverage.md`](./references/news-sources-and-coverage.md). 2. Score sentiment per (ticker, article). Prefer the Benzinga `insights` entry for that ticker if present (map "positive" → +0.7, "neutral" → 0, "negative" → -0.7); otherwise fall back to a keyword scorer over the title and description. See [`references/sentiment-scoring.md`](./references/sentiment-scoring.md). 3. Score novelty per (ticker, article). Bucket the last 7 days of articles for the ticker; compute TF-IDF over titles + first-sentence of description; cosine distance to nearest neighbor in the bucket. Distance > 0.6 = high novelty (new angle), 0.3-0.6 = medium, < 0.3 = low (already covered). See [`references/novelty-detection.md`](./references/novelty-detection.md). 4. Compute the price reaction. Pull `/v2/aggs/ticker/{ticker}/range/5/minute/...` from publish minute through min(publish + 60 minutes, market close). Reaction % = (close at window end / close at publish minute) - 1. Volume anomaly = avg per-minute volume during the window / prior-5-day same-time-of-day average per-minute volume. 5. Flag price/news divergence per [`references/price-news-divergence.md`](./references/price-news-divergence.md): positive sentiment + negative reaction = priced in / sell-the-news; negative sentiment + positive reaction = bad news already priced in. 6. Rank by `impact = |reaction_pct| × volume_anomaly × novelty_score`. See [`references/impact-ranking.md`](./references/impact-ranking.md). Emit top N (default 15).
best-price fallback chain for spot, and rate-limit handling on the per-ticker news fan-out
Stream mode is the format Bloomberg's news tape, Benzinga Pro's feed, and Reuters Eikon use for incoming events. Each event is a self-contained block; the reader scans top to bottom and stops when they see one they want to act on. Inherited from [`options-flow/references/rendering.md`](../options-flow/references/rendering.md), adapted for news per [`references/rendering.md`](./references/rendering.md).
Benzinga News. Returns `results[]` with `id`, `title`, `description`, `published_utc`, `article_url`, `tickers
Trade like a pro. Without the terminal. View the full landing page → Quant and equity research tools that run inside Claude, or behind your own UI.
Scan SEC 8-K disclosures across a single ticker or a watchlist using Massive's pre-parsed disclosure taxonomy. Groups the underlying rows by filing (one 8-K…
Track sell-side analyst positioning on a name via Benzinga Analyst Ratings. Pulls every rating event over the lookback window, classifies each as upgrade /…
Build a clean, point-in-time, ready-to-backtest OHLCV dataset for a US equity universe across an arbitrary date window. Emits parquet plus a manifest plus an…
Bayesian Online Change-Point Detection (BOCPD) on a ticker's daily log returns. Detects points in time where the return-generating distribution changed (regime…
Single-commodity macro read. Answers "is this commodity in a winning or losing macro setup right now" and names the macro driver that dominates it. Pulls one…
Reconcile a position file against splits, dividends, and spinoffs to catch breaks before they hit P&L or T+1 settlement. Use when an operator hands over a CSV…