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:
| Scope | Path |
|---|---|
| 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.
- Never present output as a buy or sell recommendation. The API returns detected events and historical frequencies. It does not know your position, your account or your risk. Turning a measured event rate into "go long" is the agent inventing advice.
- Always carry the disclaimer. Every response has a
disclaimerfield, and it travels with the numbers. - Never claim precision the numbers do not have. Honest win rates here are 52–56%. An agent that rounds that up to "strong signal" has broken the product.
- Name the baseline. 66% accuracy means nothing until you also say the majority-class baseline is 37%.
- Flag out-of-distribution use. The reference rates were measured on S&P 500 E-mini futures. A read on a single stock, on gold or on crypto is descriptive, not validated — and for BTC, ETH and gold we measured that the volume-event edge is absent or reversed.
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.
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.