finance-fx
Skill0 starsChanged 38 days agoMITView on GitHub
Use when a task needs live or historical money data - "convert USD to EUR", "current/past exchange rate", "FX rate on this date / over this range", or "current price of Bitcoin/Ethereum, market cap, 24h change". Frankfurter (ECB reference rates, no key) is the FX default; CoinGecko's free keyless tier covers crypto. Do NOT use for stock quotes or equities - no keyless stock API survives verification, say so instead of guessing; do NOT use for country economic indicators like GDP or inflation series - use government-open-data instead; if the request is a vague "I need live data", route through public-data-api-picker.
In this repository8 other files it gives its agents.
- fun-contentSkill
- geo-placesSkill
- government-open-dataSkill
- language-referenceSkill
- public-data-api-pickerSkill
- space-earth-scienceSkill
- test-placeholder-dataSkill
- weather-climateSkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 3 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 22
Never do FX math from memory: If the task multiplies money by a rate, the rate comes from one of these calls, with the date attached.
- Distinctive: line 24
Ask the user only if missing: currency pair or coin (no default), date/range (default: latest), amount (default: 1).
- Very specific: line 76
exchangerate.host: - every request now requires an access_key.
- Distinctive: line 84
Every number carries its date and source.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Finance & FX Data
Fetch exchange rates and crypto prices with keyless calls. The mistake this prevents: reaching for exchangerate.host, Fixer, or Alpha Vantage from training memory - all key-walled now - or hand-waving a stale rate from training data into a real calculation.
Ranked APIs
- Frankfurter (api.frankfurter.dev) - DEFAULT for fiat FX. European Central Bank reference rates, ~30 major currencies, history back to 1999, time series, no key, no rate limit worth worrying about.
- CoinGecko free tier (api.coingecko.com) - crypto prices, market caps, 24h change for thousands of coins. No key, but a tight limit: roughly 5-15 calls/min from an anonymous IP. Batch ids into one call; on 429, back off 60s.
Procedure
- Fiat or crypto? Fiat → Frankfurter. Crypto → CoinGecko. Crypto→fiat conversion is one CoinGecko call (
vs_currencies=eur), not two hops. - Date the rate. ECB reference rates update ~16:00 CET on business days; the response's
datefield tells you which day you actually got. Weekend/holiday requests return the previous business day - quote that date, don't present it as today's. - Use CoinGecko ids, not tickers. The
idsparam wantsbitcoin,ethereum,solana- not BTC/ETH. For an unfamiliar coin, resolve once via/api/v3/search?query={name}→coins[0].id. - Never do FX math from memory. If the task multiplies money by a rate, the rate comes from one of these calls, with the date attached.
Ask the user only if missing: currency pair or coin (no default), date/range (default: latest), amount (default: 1).
URL templates + real response shapes
Latest FX rate:
https://api.frankfurter.dev/v1/latest?base=USD&symbols=EUR,GBP,JPY{"amount":1.0,"base":"USD","date":"<last business day>","rates":{"EUR":0.87352,"GBP":0.74878,"JPY":161.15}}Convert an amount server-side with &amount=250 - rates comes back pre-multiplied.
Historical / time series:
https://api.frankfurter.dev/v1/2024-01-15?base=USD&symbols=EUR ← one date
https://api.frankfurter.dev/v1/2024-01-02..2024-01-31?base=USD&symbols=EUR ← range
https://api.frankfurter.dev/v1/currencies ← code → name mapRange shape: {"rates":{"2024-01-02":{"EUR":0.91274},"2024-01-03":{"EUR":0.91583}}} - keyed by date, business days only (a full year returns ~256 daily points; no weekend keys, so don't treat gaps as missing data). Omit the end date (/2024-01-02..) to run to present.
Crypto spot price:
https://api.coingecko.com/api/v3/simple/price?ids=bitcoin,ethereum&vs_currencies=usd&include_24hr_change=true{"bitcoin":{"usd":63289,"usd_24h_change":1.19},"ethereum":{"usd":1790.89,"usd_24h_change":1.90}}Unknown ids are silently dropped from the response - a missing key means a wrong id, not a null price.
Crypto market table (rank, cap, supply):
https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&order=market_cap_desc&per_page=20&page=1Array of {"id","symbol","name","current_price","market_cap","market_cap_rank","price_change_percentage_24h","circulating_supply","ath"} - one call replaces twenty /simple/price calls; prefer it for any list.
Deliverable
The rate or price with its date/timestamp and source named, plus the exact URL used. Any conversion shows the arithmetic: 250 USD × 0.87352 (ECB, <rate date>) = 218.38 EUR.
Do NOT use - reach for X instead
- exchangerate.host - every request now requires an
access_key; verified failing keyless. Frankfurter replaces it. - Fixer, Alpha Vantage, Finnhub, Polygon, OpenExchangeRates - key-walled; do not send a user to sign up when Frankfurter/CoinGecko cover the need.
- Stock/equity quotes - nothing keyless survives verification. Say that plainly and name the paid options rather than fabricating a price.
- GDP, inflation, unemployment, trade series - government-open-data.
- Financial advice - this skill fetches numbers; buy/sell/allocation judgments are out of scope. Present data, not recommendations.
Quality bar
- Every number carries its date and source; no rate or price originates from training memory.
- Frankfurter's ~30-currency ceiling respected - exotic pairs (e.g. NGN, VND) are declared unsupported, not approximated.
- CoinGecko calls are batched; a 429 produces a backoff, not a retry loop.
Sourced and liveness-verified from the public-apis project (MIT).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

