Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Stock quotes, history, search, compare, crypto via Yahoo.
.claude/skills/nousresearch-stocks/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | -19% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -59% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 24% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -14% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 60% | 0% |
Read-only market data via Yahoo Finance. Five commands: quote, search, history, compare, crypto. Python stdlib only — no API key, no pip installs. Yahoo's endpoint is unofficial and may rate-limit or change.
Python 3.8+ stdlib only. Optional: set ALPHA_VANTAGE_KEY to enrich market_cap, pe_ratio, and 52-week levels when Yahoo's crumb-protected fields come back null. Free key: https://www.alphavantage.co/support/#api-key
Invoke through the terminal tool. Once installed:
SCRIPT=~/.hermes/skills/finance/stocks/scripts/stocks_client.py
python $SCRIPT quote AAPLAll output is JSON on stdout — pipe through jq if you want to slice it.
python $SCRIPT quote AAPL
python $SCRIPT quote AAPL MSFT GOOGL TSLA
python $SCRIPT search "Tesla"
python $SCRIPT history NVDA --range 6mo
python $SCRIPT compare AAPL MSFT GOOGL
python $SCRIPT crypto BTC ETH SOLquote SYMBOL [SYMBOL2 ...]Current price, change, change%, volume, 52-week high/low.
search QUERYFind tickers by company name. Returns top 5: symbol, name, exchange, type.
history SYMBOL [--range RANGE]Daily OHLCV plus stats (min, max, avg, total return %). Ranges: 1mo, 3mo, 6mo, 1y, 5y. Default: 1mo.
compare SYMBOL1 SYMBOL2 [...]Side-by-side: price, change%, 52-week performance.
crypto SYMBOL [SYMBOL2 ...]Crypto prices. Pass BTC (the script appends -USD automatically).
without notice — if requests start failing, that's why.
market_cap and pe_ratio may return null on quote when Yahoo'scrumb session isn't established. Set ALPHA_VANTAGE_KEY to backfill.
python ~/.hermes/skills/finance/stocks/scripts/stocks_client.py quote AAPLReturns a JSON object with symbol: "AAPL" and a numeric price field.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 8,492 | 4,001 | -53% | 1 | 1 | 0% | 1,693 | 964 | -43% | 0 | 0 | — |
case-02 | fail→fail | 8,762 | 4,857 | -45% | 1 | 1 | 0% | 1,952 | 975 | -50% | 0 | 0 | — |
case-03 | fail→fail | 3,832 | 3,557 | -7% | 1 | 1 | 0% | 727 | 861 | +18% | 0 | 0 | — |
case-04 | fail→pass | 6,306 | 1,216 | -81% | 1 | 1 | 0% | 1,117 | 905 | -19% | 0 | 0 | — |
case-05 | fail→pass | 13,208 | 1,935 | -85% | 1 | 1 | 0% | 2,644 | 1,074 | -59% | 0 | 0 | — |
case-06 | fail→pass | 4,464 | 1,415 | -68% | 1 | 1 | 0% | 730 | 904 | +24% | 0 | 0 | — |
case-07 | pass→pass | 8,314 | 1,700 | -80% | 1 | 1 | 0% | 1,469 | 970 | -34% | 0 | 0 | — |
case-08 | fail→pass | 6,114 | 1,707 | -72% | 1 | 1 | 0% | 1,212 | 1,042 | -14% | 0 | 0 | — |
case-09 | pass→pass | 6,331 | 2,546 | -60% | 1 | 1 | 0% | 1,238 | 1,185 | -4% | 0 | 0 | — |
case-10 | fail→pass | 3,226 | 1,632 | -49% | 1 | 1 | 0% | 608 | 972 | +60% | 0 | 0 | — |
case-11 | pass→fail | 9,417 | 4,082 | -57% | 1 | 1 | 0% | 1,708 | 937 | -45% | 0 | 0 | — |
case-12 | pass→pass | 3,920 | 2,047 | -48% | 1 | 1 | 0% | 701 | 1,039 | +48% | 0 | 0 | — |
case-13 | pass→pass | 8,585 | 2,286 | -73% | 1 | 1 | 0% | 1,562 | 1,046 | -33% | 0 | 0 | — |
case-14 | fail→pass | 5,928 | 1,152 | -81% | 1 | 1 | 0% | 1,136 | 824 | -27% | 0 | 0 | — |
case-15 | pass→pass | 8,762 | 2,958 | -66% | 1 | 1 | 0% | 1,730 | 1,231 | -29% | 0 | 0 | — |
case-16 | pass→pass | 9,519 | 1,911 | -80% | 1 | 1 | 0% | 1,836 | 1,012 | -45% | 0 | 0 | — |
case-17 | pass→pass | 5,825 | 1,488 | -74% | 1 | 1 | 0% | 1,026 | 936 | -9% | 0 | 0 | — |
case-18 | pass→fail | 8,834 | 3,909 | -56% | 1 | 1 | 0% | 1,830 | 905 | -51% | 0 | 0 | — |
case-19 | fail→pass | 8,206 | 1,652 | -80% | 1 | 1 | 0% | 1,407 | 1,008 | -28% | 0 | 0 | — |
case-20 | fail→pass | 8,415 | 1,951 | -77% | 1 | 1 | 0% | 1,539 | 995 | -35% | 0 | 0 | — |
case-21 | fail→pass | 12,377 | 3,605 | -71% | 1 | 1 | 0% | 2,507 | 1,255 | -50% | 0 | 0 | — |
case-22 | fail→pass | 11,440 | 3,731 | -67% | 1 | 1 | 0% | 2,128 | 1,451 | -32% | 0 | 0 | — |
case-23 | fail→pass | 7,963 | 5,209 | -35% | 1 | 1 | 0% | 1,681 | 1,783 | +6% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 18 counted toward the lift figure. The other 5 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +39 percentage points is the difference between those two pass rates over the 18 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/8/2026 | +32% |
Other measured skills in the registry, with their headline benchmark lift.