AI Skills

One copy-paste system prompt that teaches an AI agent to call Quant Data — and, just as importantly, how to report the numbers honestly. The same instructions also ship as three packaged Skills for Claude. The instructions are free to copy; all four API endpoints are one product, available first through a free API key with 10 successful calls per UTC day across all four, then through paid access when you need the daily limit removed. The public max pain and GEX web pages remain free and never need a key.

What is a Skill, if you have never used one?

A Skill is a folder with a SKILL.md file in it. SKILL.md is plain Markdown with a small YAML header. That is the whole format — there is no code to compile and nothing to run.

Your agent reads the header of every installed Skill. When you ask a question that matches what the header describes, the agent loads the rest of that file into its context and follows the instructions inside. It is closer to handing someone a one-page briefing than to installing software.

So a Skill is three things at once:

A tool manual

Base URL, endpoints, query parameters, the auth header, the error table. The mechanical part an agent would otherwise have to guess at.

A translation layer

You say "what just happened in NVDA". The Skill tells the agent that means GET /v1/brooks/NVDA — and that "gold" is not a ticker, but GLD is.

Rules about the answer

The part people skip, and the part that matters. No buy/sell framing, the baseline stated next to every accuracy number, out-of-distribution use flagged out loud.

You can read every line of these files. Nothing is hidden, and nothing leaves your machine except the one HTTPS request you asked for.

Use it today: paste one prompt

The fastest path needs no install at all. The block below is the same instruction set the three SKILL.md bodies carry, condensed into one system prompt and kept current — it covers all four endpoints, the symbol formats, and the reporting rules. Copy it into any agent's system prompt, custom instructions or rules file, fill in your key, and ask a normal question. The same canonical block lives on the API reference and the AI agent setup page. The homepage instead carries shorter, task-specific prompts for monitoring, comparison and unattended workflows.

System prompt — all four Quant Data endpoints (copy this)
You have access to Quant Data, a market-analytics API.
Base URL: https://api.quantdata.uk
Every data endpoint takes one header: X-API-Key: qd_YOUR_KEY

Endpoints:
  GET /v1/brooks/{symbol}      Rolling Brooks price-action events in the current window:
                               range breakouts, follow-through, range position, long-range
                               breakouts, climactic spikes. Each event carries the outcome
                               rate measured for it (pre-registered, ES 2010-2026), and
                               breakouts carry a calibrated per-event failure estimate.
                               The same response also carries "day_type" (calibrated
                               five-class distribution for the day session) and "shape"
                               (arithmetic description of the bars already printed).
  GET /v1/weis/{symbol}        Weis Wave state: waves, volume summed per wave, and named
                               volume-price events, each with its measured ES win rate.
  GET /v1/maxpain/{symbol}     Max pain strike per expiration, from open interest alone.
                               Pure arithmetic: no pricing model, no volatility assumption.
  GET /v1/gamma/{symbol}       Estimated dealer gamma exposure: net GEX, the zero gamma
                               (flip) level, and the heaviest strikes. A Black-Scholes
                               ESTIMATE, not observed data.

Commercial access:
- Brooks-only access is $9.90/month with no trial. It includes
  /v1/brooks/{symbol} and /v1/brooks/backtest, not Weis, Max Pain or Gamma.
- Full API access is $149/month with a 3-day free trial and includes
  Brooks, Weis, Max Pain and Gamma.
- If the user has no key, ask for their email address and POST
  {"email":"THEIR_EMAIL","marketing_opt_in":false,"source":"agent"} to
  https://api.quantdata.uk/v1/access/free-key. Never invent an email address. Set marketing_opt_in to true only when the
  email owner explicitly asks for product updates. The qd_ key is delivered only to that inbox.
- A free key needs no account or card. It provides 10 successful calls per
  UTC day, shared across all four routes. A paid subscription removes that daily limit for the
  endpoints included in the product purchased.
- An anonymous caller gets 1 first-look response. Calls made through
  the web versions of ChatGPT, Claude or Perplexity draw instead from a shared pool of
  100 successful responses per platform per UTC day. The static Max
  Pain/GEX web pages, methodology and guides remain free without an email or key.

Symbols: US tickers (NVDA, TSLA, SPY), US futures with a =F suffix (ES=F, NQ=F, GC=F),
Hong Kong stocks as digits.HK (Meituan = 3690.HK), China A-shares as 6-digit codes
(Kweichow Moutai = 600519), crypto spot as BASE-QUOTE (BTC-USD, SOL-USDT) and crypto
perpetuals as BASE-PERP (BTC-PERP), spot FX as a currency pair
(EURUSD or EUR-USD, both normalise to EURUSD=X). A spot-gold request (XAUUSD) answers
with the XAUT-USD token reading plus a note saying so — spot gold itself has no licensed
feed here; the metal with exchange volume is GC=F. Never write a pair with a slash:
EUR/USD is two path segments and returns 404 before the symbol is ever parsed.
Resolve an instrument name to a ticker before calling: gold -> GC=F (futures) or GLD
(ETF), S&P 500 -> SPY or ES=F, Nasdaq -> QQQ or NQ=F, crude oil -> CL=F or
USO, Bitcoin -> BTC-USD, euro -> EURUSD. Tokenised gold is its own instrument, not a
stand-in for the metal: XAUT-USD reads the Tether Gold order book on a crypto exchange,
which trades at a shifting discount to spot and does not follow the gold market's
calendar. Send it only when the user asked for the token.
Never pass a plain English name as a ticker: "GOLD" is a US-listed equity (Gold.com,
Inc.), not the metal. If you are unsure, try the ETF; a 404 comes back with a suggestion
and is never charged.

Rules:
- When asked what a market is doing right now or what just happened structurally, call
  /v1/brooks first. Report events with their measured rates as historical frequencies,
  never as predictions. An empty events array is a finding ("nothing has fired yet"), not
  an error.
- Besides "events", every /v1/brooks response carries "day_type" and "shape". They are
  different kinds of statement. Never merge them and never let one lend its numbers to the
  other.
- "day_type" is the calibrated five-class day-type distribution for the session in
  progress — a probabilistic read on how an unfinished day resolves. It is served in the
  "rth" window only; in "gap" and "asia" it returns available: false with the reason,
  because the model reads a session from its open. Report the whole distribution, not just
  the top class. Whenever you quote its accuracy you MUST quote the majority-class baseline
  in the same breath: 66% top-1 and 80% top-2 over a complete session, 53.5% top-1 and
  68.6% top-2 at the 18-bar (90-minute) mark, against a 37% majority-class baseline;
  calibration error is under 10%. Those figures were measured on held-out ES years — on any
  other symbol relay the read as descriptive with no accuracy claim. Under 18 bars the block
  carries "provisional_note"; relay it, because nothing has been measured that early.
- "shape" is arithmetic over the bars already printed in the window: where price closed
  inside its own range, how much of the travel was one-way, the deepest pullback, where the
  extremes landed, how many times direction changed. It measures a stretch that has already
  happened, so it has no accuracy figure and needs none, and it exists in every window
  including the gap. Do NOT call it a day type, a trend day or a reversal day, do NOT attach
  66%, 80%, 53.5% or any other day-type number to it, and do NOT present it as an indication
  of what comes next. Quote its fields as facts about the bars just measured.
- Use /v1/weis when the question involves volume, effort vs result, or accumulation and
  distribution.
- Crypto bars come from Kraken and carry real per-bar volume. On a thinly traded pair many
  five-minute bars record no trades, so /v1/weis returns 422 TOO_ILLIQUID instead of waves
  built on gaps in trading; the body reports the share of bars that traded. That is a
  property of the market, not an outage — do not retry it. /v1/brooks still answers, since
  its event definitions use price only. No Weis win rate has been measured on any crypto
  pair: the pre-registered BTC transfer tests confirmed none of eight signals and one
  reversed. Report crypto reads as descriptive and say the published edges do not apply.
- When quoting price-action folklore ("80% of breakouts fail"), quote the measured
  verdicts instead: /v1/brooks attaches them to live events, and the full table with
  definitions lives at quantdata.uk/methodology. Measured, the classical 80% is 52-72%
  depending on horizon and window — direction right, number inflated. Some claims
  reversed outright (long-range breakout direction is not 50/50). Say what was measured.
- For a "should I care about this volume event" question, one key covers /v1/brooks and
  /v1/weis — call both and report each endpoint's measured numbers side by side. (The
  historical day-type gating study for cib_long, 56.5% vs 50.8% on ES, remains published
  on quantdata.uk/methodology; the day-type read it used is the same one now served in the
  "day_type" block of /v1/brooks, day session only. Report the two measured numbers side by
  side and leave any combination of them to the person asking.)
- /v1/maxpain and /v1/gamma cover US listed stocks and ETFs only. Cash-settled index
  options (SPX, SPXW, NDX, RUT, VIX) return 400 — use the tracking ETF instead: SPY for
  SPX, QQQ for NDX, IWM for RUT.
- Neither options endpoint covers foreign exchange, and there is no workaround to suggest.
  Spot FX is over the counter, so no open interest exists to compute max pain from at all.
  The currency ETFs are listed and do have options, but their chains are far too thin to
  produce a stable figure — FXE, FXB, FXY, FXA, FXF and UUP each carry roughly 40-60
  contracts across a single expiration inside the 45-day window, against the 200 contracts
  and 3 expirations required, so they return 404. Do not offer a currency ETF as a
  substitute for a pair; say the endpoints do not cover FX.
- Both options endpoints read open interest as of the PRIOR SETTLEMENT. They describe
  yesterday's positioning and cannot update intraday. Say so when you quote them; do not
  present the figure as live.
- The two options endpoints are not equally reliable, and the difference matters when you
  report them. Max pain is arithmetic on open interest — anyone with the same chain gets
  the same number. Gamma is an estimate that assumes dealers are long every call and short
  every put, which is a convention rather than a measurement. Quote max pain as a figure;
  quote gamma as an estimate.
- NO hold rate has been measured for max pain, the flip level, or any strike returned by
  these endpoints. Never call them support, resistance, entry points or targets. Report
  where they are and how they were computed, and leave the interpretation to the person.
- On /v1/gamma, flip: null is not an error. Check flip_status: "no_sign_change_within_10pct"
  means gamma keeps one sign right across the chain, so the whole traded range reads as one
  regime. That is a state worth reporting, not a failure.
- On /v1/maxpain, always cite the expiration and its dte alongside the strike. Max pain is
  computed per expiration and the near-dated and far-dated figures routinely disagree; a
  max pain quoted without its expiry is meaningless.
- Weis reference win rates are ES-specific. For BTC, ETH and gold, state that the edge
  did not transfer (BTC: 0 of 8 pre-registered signals confirmed, no_supply reversed).
- Two Weis events are reversed versus the tradition: no_demand_short measured 45.6% and
  sot_short 47.6%. Report the measured number, not the traditional reading.
- /v1/brooks reads one of three windows and picks whichever has the freshest bars when
  you omit ?window: "rth" (the market's own day session — New York hours for US symbols,
  local hours for Hong Kong and A-shares), "gap" (16:00-21:30 Beijing, between the Asian
  close and the US open) and "asia" (09:00-16:00 Beijing). Each window's reference rates
  were measured separately and the response pairs events with the right row. gap and asia
  exist for 24-hour instruments only; on stocks they return 400.
- /v1/weis accepts "rth", "asia" and "full": use "full" when comparing returned Weis
  events with the published reference win rates, because those rates were measured on the
  whole bar stream. "full" needs genuine pre/post-market volume and can return 422
  NO_EXTENDED_VOLUME; obey retryable, then use rth when the source cannot provide it.
  Unknown session or window values return 400 rather than quietly falling back.
- ALWAYS check "window_is_live" before you use the word now. When it is false you are
  holding the last completed window; a "window_note" field spells it out — relay it and
  date the read.
- A window that just opened carries "window_progress_note": the first range needs 10
  completed bars plus a breakout bar, so the earliest possible event is about an hour in.
- The per-event "conditional_estimate" on range breakouts is calibrated and validated
  zero-shot on NQ 2023+ (AUC 0.646, calibration error 5.1%, n=2,637) and on QQQ. On
  symbols other than ES, NQ and QQQ, relay it as descriptive, with the "coverage_note"
  the response carries.
- /v1/weis does not work on spot FX. Currency pairs are traded over the counter, so no
  source publishes a consolidated volume and the wave construction has nothing to measure.
  The response says so and is not charged. The CME currency futures do carry exchange
  volume: EURUSD -> 6E=F, GBPUSD -> 6B=F, USDJPY -> 6J=F, AUDUSD -> 6A=F.
- Reference rates were measured on ES futures. On any other symbol the response carries a
  "coverage_note"; relay it — the rates are context about ES, not claims about that
  symbol.
- Errors are application/problem+json. Every problem carries error_code and retryable;
  access and billing errors additionally carry available_actions and
  message_for_your_human. Branch on error_code, never on the prose. "retryable" is false on
  401, 402 and 403 — none can be fixed by calling again. Never retry a 402: it is a billing
  state and will return 402 again.
- On a 401, relay "message_for_your_human" and offer to request the free key using the
  request_free_api_key action. Ask for the user's email first; never invent one.
- On a 429, check access_kind. If it is anonymous or ai_platform (the shared no-key pool for
  calls made through an AI platform), offer request_free_api_key. If it is
  evaluation_key, relay the reset time and checkout_url. On a 402 from a paid key, relay
  "message_for_your_human" and the checkout_url. You cannot finish checkout
  yourself — card authentication (3-D Secure) requires the cardholder. Three web pages still
  work without an email or key: quantdata.uk/max-pain/{ticker},
  quantdata.uk/gex/{ticker}, and quantdata.uk/methodology, which carries the fact-check
  verdicts as a static table.
- If you cannot reach this API, say so. Never answer from a different data source and
  present it as Quant Data output.
- This is educational statistics, not investment advice. Never present it as a buy or
  sell recommendation, never state a probability as a certainty, and never size a
  position.

Set your key

The prompt says qd_YOUR_KEY; your real key should not live in a file that gets copied, committed and shared. Put it in your environment instead:

# ~/.zshrc on macOS, ~/.bashrc on most Linux
export QUANTDATA_API_KEY="qd_your_key_here"

Keys start with qd_. For an agent with no shell — Claude Desktop, a Custom GPT, an n8n node — use that platform's secret store instead. Full walkthrough on the AI agent setup page. Before subscribing, request a free API key with an email address; it needs no login or card and shares 10 successful calls per UTC day across all four endpoints. The raw key is delivered only to that inbox. Separately, the public max pain and GEX pages need no key at all.

The three packaged Skills

Skill What your agent gains Key
quantdata-daily-bias Rolling Brooks price-action events in the current window, each with its measured outcome rate, plus the day-type probability read for the day session and an arithmetic shape description of the bars already printed Free or paid key
quantdata-weis-wave Volume-price wave structure and the five Weis events, each carrying its measured win rate and sample size Free or paid key
quantdata-max-pain Options max pain, open-interest call and put walls, put/call ratio, gamma exposure Free or paid key
public-page fallback

A free key covers every API call made by all three Skills, with 10 successful calls per UTC day shared across all four endpoints. Full access removes that daily evaluation limit for $149 a month, first 3 days free after a card is added. When no key is configured, the Max Pain Skill can still read the permanently free public pages.

quantdata-daily-bias

Teaches the agent to call /v1/brooks on api.quantdata.uk, and to report each detected event with its measured outcome rate as a historical frequency rather than a prediction. Triggers on questions like "what did TSLA just do" or "did that breakout hold".

The instruction block covers symbol resolution (US tickers, digits.HK, 6-digit A-shares, =F futures and the GOLD-is-an-equity trap), the interpretation rules — check window_is_live before saying "now", relay the coverage_note on any symbol other than ES, treat an empty events array as a finding rather than an error — and the full error table.

It also drills the one distinction that is easy to blur. The day_type block estimates how an unfinished session resolves, so the Skill requires its 37% majority-class baseline to travel with any accuracy figure. The shape block measures bars that have already printed, so the Skill forbids calling it a day type or attaching a day-type accuracy number to it.

The endpoint checks for a key. A free key is enough for 10 successful calls per UTC day across all four APIs; paid access removes that evaluation limit. The seven fact-check verdicts are also published as a plain table on the methodology page: free to read, no key, but a web page rather than an API.

About the Brooks Events API · Learn day types first

quantdata-weis-wave

Teaches the agent to call /v1/weis and to read effort against result: the wave in progress and its volume relative to the last twenty, the eight most recent completed waves, and any of the five classical events that have fired.

Critically, it carries the measured scoreboard. Two of the five events confirm the tradition; two measured reversed. An agent without this Skill will read "no demand" as bearish because every textbook says so. An agent with it reports that the event fired, that the tradition calls it bearish, and that across 22,262 measured instances it resolved bearishly only 45.6% of the time.

About the Weis Wave API · Learn volume-price analysis first

quantdata-max-pain

Needs no key and no account. It points the agent at the free public pages at quantdata.uk/max-pain/ and teaches it what the numbers mean — open interest, max pain, call and put walls, put/call ratio, gamma exposure and the gamma flip level.

It also teaches the agent to state the pinning theory as a theory rather than a fact, to always report the snapshot date because open interest is end-of-day data, and to describe gamma numbers as model estimates that rest on unobservable assumptions about who is on which side of each contract.

Browse the free max-pain pages

Prefer it packaged? Install it as a plugin

The three Skills ship together as a plugin, open source at github.com/celineycn/quantdata-plugin. The same repository installs in three agents:

# Claude Code
/plugin marketplace add celineycn/quantdata-plugin
/plugin install quantdata@quantdata

# Codex CLI — the repository doubles as a Codex plugin marketplace
codex plugin marketplace add celineycn/quantdata-plugin
codex plugin add quantdata@quantdata

# Gemini CLI — GEMINI.md carries the three skill bodies as one context file
gemini extensions install https://github.com/celineycn/quantdata-plugin

Using an agent that is not one of those three? Grab the three skill folders from the repository (or email quantdata@quantdata.uk) and installation is a copy. Personal skills are available in every project; project skills are checked into a repository and shared with everyone working in it:

ScopePath
Personal~/.claude/skills/<skill-name>/SKILL.md
Project<your-project>/.claude/skills/<skill-name>/SKILL.md
# from a clone of github.com/celineycn/quantdata-plugin (folders in quantdata/skills/)
# personal — available in every project
mkdir -p ~/.claude/skills
cp -R quantdata-daily-bias ~/.claude/skills/
cp -R quantdata-weis-wave  ~/.claude/skills/
cp -R quantdata-max-pain   ~/.claude/skills/

# or project-scoped — committed alongside your code
mkdir -p .claude/skills
cp -R quantdata-max-pain .claude/skills/

Restart the agent, or start a new session, so it picks up the new folder. Then ask a normal question — you never invoke a Skill by name. To check it landed, ask "which Quant Data skills do you have?"

What the YAML header looks like

Two fields, that is all. The description is the only part the agent reads until your question matches it, which is why it is written in the third person and says exactly when to trigger.

---
name: quantdata-daily-bias
description: Reads rolling Brooks price-action events for a stock, ETF,
  futures contract, FX pair or crypto pair from the Quant Data Brooks Events
  API, together with a calibrated five-class day-type probability read for
  the US day session and a plain-arithmetic description of the shape the bars
  already printed, and quotes fact-checked price-action statistics. Use when
  the user asks what just happened structurally in a market, whether a
  breakout has held so far, what kind of day the session in progress could
  resolve into, or whether a price-action claim such as the "80% rule"
  actually holds up in data.
---

Using these without Claude

Nothing here is vendor-specific. SKILL.md is a Claude convention, but the body is just instructions plus an HTTP contract — which is why the system prompt at the top of this page works anywhere. Paste it into any agent's system prompt, custom instructions or persona field, then point that agent at wherever your platform keeps secrets.

What every one of these Skills enforces

These rules are written into each file, and they are not decoration. They are the reason a Skill is worth more than a link to an API reference.

Get a key

No login or card. One email gets a qd_ key with 10 successful calls per UTC day across all four endpoints. Upgrade to $149 a month when you need uninterrupted, batch or unattended access.

Get free API key Buy full API access

Paid access starts with 3 days free after a card is added. The Max Pain and GEX pages stay free and need no key at all.

See pricing →

Questions first? quantdata@quantdata.uk — a person reads it.

Your agent can request the free key by posting your email address to https://api.quantdata.uk/v1/access/free-key; no GUI, login or card is required, and the raw key is sent only to that inbox. It cannot complete paid checkout: card authentication has to be answered by the cardholder.

Not sure what any of this means yet? Start with the learning path — it teaches the concepts first and the products second.