stock-quote · git:20261030.cb6c2c2 · 2026-10-30 · sha256 ce78183ba254798d

stock-quote git:20261030.cb6c2c2A

Immutable. This exact content never changes and is served at /api/v1/blob/ce78183ba254798d.

---
name: stock-quote
description: Get real-time stock quote with price, volume, change, market cap, and 52-week range for any ticker symbol. Use when user asks about current stock price, quote, or basic stock info.
dependencies: ["trading-skills"]
---

# Stock Quote

Fetch current stock data from Yahoo Finance.

## Instructions

> **Note:** If `uv` is not installed or `pyproject.toml` is not found, replace `uv run python` with `python` in all commands below.

Run the quote script with the ticker symbol:

```bash
uv run python scripts/quote.py SYMBOL
```

Replace SYMBOL with the requested ticker (e.g., AAPL, MSFT, TSLA, SPY).

## Output

The script outputs JSON with:
- symbol, name, price, change, change_percent
- as_of_session - the trading date `price`/`change` belong to (YYYY-MM-DD, from Yahoo's regular-session timestamp; null if Yahoo omits it)
- market_open_now - whether the NYSE regular session is open right now
- market_state - Yahoo's session state: `PRE`, `REGULAR`, `POST`, `CLOSED` (also `PREPRE`/`POSTPOST`)
- pre_market, post_market - `{price, change, change_percent, time}` for extended-hours trading, or null. `change` is measured from the last regular close; `time` is the ET timestamp of that print
- volume, avg_volume, market_cap
- high_52w, low_52w, pe_ratio, forward_pe, dividend_yield, beta

Present the data in a readable format. Highlight significant moves (>2% change).

**Before presenting `change`/`change_percent` as "today's move", check `as_of_session` against today's NY calendar date.** Before the regular session opens (`market_open_now: false` and `as_of_session` is a prior date), Yahoo's change fields still describe the *last completed session* (yesterday's close vs. the day before) — not intraday movement in the still-unopened current session. In that case, label it as "as of `<as_of_session>` close", not "today". Once `as_of_session` equals today's date, `change`/`change_percent` are genuinely intraday.

**Report the extended-hours move when there is one.** Pre-market (`market_state: PRE`), lead with `pre_market` as the current move, then give the regular `change` as the prior session's close. After the close (`POST`), show `post_market` alongside the day's regular move. Check each block's `time`: a `post_market` print from the previous evening seen during pre-market is last night's move, not this morning's.

## Dependencies

- `yfinance`


## Timezone

All timestamps and time-based calculations must use the `America/New_York` timezone. All JSON output must include `generated_at` (NY time string) and `data_delay` fields.