Skip to content

Instantly share code, notes, and snippets.

@xcollantes
Created May 15, 2026 04:39
Show Gist options
  • Select an option

  • Save xcollantes/21d6f98f98f28f6b6a86a25a163a30cf to your computer and use it in GitHub Desktop.

Select an option

Save xcollantes/21d6f98f98f28f6b6a86a25a163a30cf to your computer and use it in GitHub Desktop.
Stonks Driver Skill for LLM harness.
name stock-drivers
description Use when analyzing why a stock is moving. Given a ticker symbol, identifies news, earnings, analyst actions, and market conditions from the last few minutes to the last day, with recency verification for every source.
version 0.0.5
author Xavier Collantes
license MIT
platforms
linux
macos
windows
tags
finance
stocks
equities
market-analysis
research

Stock Movement Drivers

Analyze the factors behind a stock's recent price movement using free web data sources. Prioritizes real-time and same-day data, no API key required.

Overview

Given a ticker symbol (e.g., AAPL, TSLA, NVDA), this skill identifies why the stock is moving right now. It prioritizes data from the last few minutes to hours, with explicit recency verification on every source. The workflow relies on publicly accessible endpoints and browser-based news extraction, so it works out of the box with zero credentials.

When to Use

  • User just sends message with a ticker symbol, no other context
  • User asks "Why is X up/down today?" or "What's moving X?"
  • User asks "What just happened to X?" or "Any news on X?"
  • User wants a quick intraday or same-day movement analysis
  • User asks about pre-market / after-hours price action

Recency-First Workflow

The guiding principle: the market prices in news within seconds to minutes. A story from yesterday may be stale. A story from an hour ago may be the sole driver.

Step 1: Get real-time price and magnitude ( Target: < 1 minute old)

Primary: Yahoo Finance quote page (browser-based, reliable)

browser_navigate: "https://finance.yahoo.com/quote/{TICKER}/"

Extract from the snapshot:

  • Current price and $ / % change
  • Timestamp ("As of HH:MM:SS [timezone]")
  • Previous close for context

Fallback: If Yahoo is unavailable, use:

browser_navigate: "https://www.marketwatch.com/investing/stock/{TICKER}"

Record the timestamp. Every analysis must state: "As of [time], [ticker] is at $X ([change])."

Step 2: Pull same-day news headlines (Target: < 4 hours old, ideally < 1 hour)

Primary: Yahoo Finance News tab

browser_navigate: "https://finance.yahoo.com/quote/{TICKER}/news/"

What to look for:

  • Headlines with timestamps: "2h ago", "30m ago", "Just now"
  • Press releases vs. third-party articles
  • SEC filings tab for 8-K or form 4 (insider trades)

Cross-reference with Google News:

browser_navigate: "https://news.google.com/search?q={TICKER}+stock+today"

Recency rule: Only extract articles dated today or within the last 6 hours. If a headline says "yesterday" or shows a calendar date older than today, flag it as context, not as the driver.

Step 3: Extract full text of top 2–3 most recent catalysts

For each headline that is ≤ 4 hours old:

browser_click: [article link ref]
browser_snapshot (full page)

Read the article body for:

  • Specific numbers (earnings beats/misses, guidance changes, contract values)
  • Named analyst firms and rating changes
  • Quotes from management or regulators
  • Timestamps within the article (e.g., "announced at 9:30 AM")

If the article is paywalled or blocked: Note the headline and source, then search for a free mirror:

web_search: "{headline text}"

Step 4: Check for earnings / events / filings (Target: calendar accuracy)

From the Yahoo quote page, click Analysis or Earnings tab:

browser_click: ["Analysis" menuitem ref]

Look for:

  • Next earnings date
  • Recent EPS surprises
  • Analyst rating changes in the last 24–48 hours

Pre-market / after-hours special case: If the user asks before 9:30 AM ET or after 4:00 PM ET, check if the move is earnings-driven:

web_search: "{TICKER} earnings {today's date}"

Step 5: Sector and market context (Target: same timestamp as price)

Always check the broad market at the same time as the stock price:

  • S&P 500, Nasdaq, sector ETF (e.g., XLK for tech, XLF for financials)

From Yahoo Finance sidebar or dedicated search:

browser_navigate: "https://finance.yahoo.com/quote/%5EGSPC"  # S&P 500
browser_navigate: "https://finance.yahoo.com/quote/%5EIXIC"  # Nasdaq

Key question: Is the stock moving with the market, against it, or disproportionately to it?

Balance Sheet Fundementals

Give some highlights of the balance sheet, and any changes from the last earnings report.

Get CIK

The CIK is a 10-digit central index key, including leading zeros. You need this for every API call to find a company's SEC filings.

Look up a company's CIK by ticker at:

web_search: "TSLA CIK"
browser_navigate: "https://www.sec.gov/cgi-bin/browse-edgar?company=&CIK=AAPL&type=10-K&action=getcompany"

Or use the ticker-to-CIK mapping file:

web_search: "Ticker-to-CIK mapping"
browser_navigate: "https://www.sec.gov/files/company_tickers.json"

Pad the CIK to 10 digits with leading zeros (e.g., 320193 becomes 0000320193).

Get the filing history

Each entity's current filing history is available at https://data.sec.gov/submissions/CIK##########.json.

Example for Apple: https://data.sec.gov/submissions/CIK0000320193.json

This JSON contains metadata like current name, former name, stock exchanges, and ticker symbols. The recentFilings property contains at least one year or up to 1,000 of the most recent filings in a compact columnar data array.

In the response, the recent object has parallel arrays: form, filingDate, accessionNumber, primaryDocument, etc. Filter where form === "10-K" to get the 10-K entries.

Download the actual 10-K document

Once you have the accessionNumber and primaryDocument filename from the submissions JSON, build the document URL: https://www.sec.gov/Archives/edgar/data/{CIK}/{accessionNumber-no-dashes}/{primaryDocument}

The accession number needs dashes stripped (e.g., 0000320193-23-000106 becomes 000032019323000106).

Get structured financial data from the 10-K

The XBRL company facts API returns all company concepts data in a single call: https://data.sec.gov/api/xbrl/companyfacts/CIK##########.json. This gives you parsed financial line items (revenue, net income, assets, etc.) across all filings, so you don't have to parse the 10-K HTML yourself.

Examine the balance sheet

When you have the balance sheet, you can examine the changes from the last earnings report for highlights such as large changes in cash, accounts receivable, accounts payable, inventory, and other current assets and liabilities.

Presenting Results

Format the answer for maximum temporal clarity:

  • Ticker + Snapshot Time, "As of 2:45 PM ET, GOOGL is $385.64 (-0.77%)"
  • Move magnitude vs. benchmark, "Nasdaq is -1.70%, so GOOGL is outperforming by ~93 bps"
  • Headline driver, The single biggest catalyst, with source and timestamp
    • Example: "12:15 PM, Reuters reports Alphabet is exploring a yen-denominated bond sale (TipRanks, 1h ago)"
  • Supporting factors, 2–4 bullets, each with recency noted:
    • "This morning, Profit-taking after 52-week high run (+159% YoY)"
    • "Today, Broader tech selloff on inflation fears"
  • Stale vs. live distinction, Clearly separate:
    • "Today's catalyst: [X]"
    • "Background context: Q1 earnings beat last week, CapEx doubled"
  • Upcoming near-term catalysts, Events in the next 24–72 hours if known

One-Shot Recipes

Intraday surprise move (last hour)

browser_navigate: "https://finance.yahoo.com/quote/AAPL/news/"
# Read timestamps on top 3 headlines
# Click any headline < 1h old
# Check if AAPL is moving with or against SPY/QQQ

Pre-market earnings gap

web_search: "TSLA earnings today"
browser_navigate: "https://finance.yahoo.com/quote/TSLA"
# Read "As of" timestamp, if pre-market, note the session
# Click top news headline

After-hours news-driven spike

web_search: "NVDA news after hours today"
browser_navigate: "https://finance.yahoo.com/quote/NVDA/news/"
# Filter headlines by time, after-hours catalysts often hit 4:05–5:00 PM

Common Pitfalls

  1. Reporting stale news as today's driver, A headline from "yesterday" about earnings is not why the stock is moving at 11 AM today unless the market is just reacting (e.g., pre-market). Always check the article dateline.

  2. Ignoring the timestamp on the quote, "GOOGL is down 2%" means nothing without knowing if that's as of 9:45 AM (early volatility) or 3:30 PM (confirmed trend). Always state the snapshot time.

  3. Missing pre-market / after-hours, Moves at 7:00 AM ET and 4:30 PM ET have different news cycles. Specify the market session when quoting price.

  4. Attributing macro moves to company news, If the Nasdaq is down 3% and GOOGL is down 2.8%, the driver is macro. Don't invent a company-specific story.

  5. Trusting aggregator timestamps, Google News sometimes shows "2h ago" for a reprint of a 2-day-old story. Click through and verify the original dateline inside the article.

  6. Yahoo Finance blocking from cloud IPs, If curl / terminal-based API calls timeout, pivot immediately to browser_navigate on finance.yahoo.com. The browser stack handles JavaScript-rendered pages.

Verification Checklist

  • Ticker symbol verified (no look-alike confusion: GOOGL vs GOOG)
  • Price data includes exact timestamp and market session (regular / pre / after-hours)
  • News sources are dated today or within the last 6 hours
  • Article datelines verified (not just aggregator timestamps)
  • Broad market and sector context checked at the same time
  • Stocks moving with the market are flagged as macro-driven
  • Stocks moving disproportionately to the market have a specific catalyst identified
  • Upcoming 24–72 hour catalysts noted if known
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment