opencode-skills-collection 4.0.73 → 4.0.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +16 -1
  2. package/bundled-skills/claude-api/SKILL.md +4 -4
  3. package/bundled-skills/claude-api/curl/examples.md +5 -5
  4. package/bundled-skills/claude-api/java/claude-api.md +1 -1
  5. package/bundled-skills/claude-api/php/claude-api.md +2 -2
  6. package/bundled-skills/claude-api/python/claude-api/README.md +13 -13
  7. package/bundled-skills/claude-api/python/claude-api/batches.md +3 -3
  8. package/bundled-skills/claude-api/python/claude-api/files-api.md +3 -3
  9. package/bundled-skills/claude-api/python/claude-api/streaming.md +6 -6
  10. package/bundled-skills/claude-api/python/claude-api/tool-use.md +19 -19
  11. package/bundled-skills/claude-api/ruby/claude-api.md +3 -3
  12. package/bundled-skills/claude-api/shared/error-codes.md +2 -2
  13. package/bundled-skills/claude-api/shared/live-sources.md +1 -1
  14. package/bundled-skills/claude-api/shared/models.md +4 -4
  15. package/bundled-skills/claude-api/shared/tool-use-concepts.md +2 -2
  16. package/bundled-skills/claude-api/typescript/claude-api/README.md +12 -12
  17. package/bundled-skills/claude-api/typescript/claude-api/batches.md +2 -2
  18. package/bundled-skills/claude-api/typescript/claude-api/files-api.md +1 -1
  19. package/bundled-skills/claude-api/typescript/claude-api/streaming.md +4 -4
  20. package/bundled-skills/claude-api/typescript/claude-api/tool-use.md +14 -14
  21. package/bundled-skills/electron-drive-skill/LICENSE +21 -0
  22. package/bundled-skills/electron-drive-skill/README.md +172 -0
  23. package/bundled-skills/electron-drive-skill/SKILL.md +237 -0
  24. package/bundled-skills/electron-drive-skill/drive.config.json.example +10 -0
  25. package/bundled-skills/electron-drive-skill/package.json +28 -0
  26. package/bundled-skills/electron-drive-skill/scripts/daemon.mjs +352 -0
  27. package/bundled-skills/electron-drive-skill/scripts/drive.mjs +250 -0
  28. package/bundled-skills/electron-drive-skill/scripts/lib.mjs +165 -0
  29. package/bundled-skills/electron-drive-skill/scripts/lib.test.mjs +56 -0
  30. package/bundled-skills/film-crew/SKILL.md +129 -0
  31. package/bundled-skills/film-crew/references/model-prompting.md +89 -0
  32. package/bundled-skills/film-crew/references/reroll-review.md +46 -0
  33. package/bundled-skills/film-crew/references/roles/director.md +38 -0
  34. package/bundled-skills/film-crew/references/roles/dp.md +28 -0
  35. package/bundled-skills/film-crew/references/roles/editor.md +34 -0
  36. package/bundled-skills/film-crew/references/roles/gaffer.md +30 -0
  37. package/bundled-skills/film-crew/references/roles/production-designer.md +43 -0
  38. package/bundled-skills/film-crew/references/roles/script-supervisor.md +35 -0
  39. package/bundled-skills/film-crew/references/roles/sound.md +23 -0
  40. package/bundled-skills/film-crew/references/templates/shot-list.md +38 -0
  41. package/bundled-skills/film-crew/references/unslop.md +29 -0
  42. package/bundled-skills/mcp-dependency-drift-audit/SKILL.md +169 -0
  43. package/bundled-skills/nexrad-mosaic-access/SKILL.md +297 -0
  44. package/bundled-skills/nexrad-mosaic-construction/SKILL.md +277 -0
  45. package/bundled-skills/nexrad-product-access/SKILL.md +258 -0
  46. package/bundled-skills/nexrad-radar-visualization/SKILL.md +318 -0
  47. package/bundled-skills/radar-satellite-analysis/SKILL.md +314 -0
  48. package/bundled-skills/testdriver-e2e-testing/SKILL.md +121 -0
  49. package/bundled-skills/traderspy-market-briefing/SKILL.md +132 -0
  50. package/bundled-skills/traderspy-market-screener/SKILL.md +182 -0
  51. package/bundled-skills/traderspy-market-screener/references/condition-cookbook.md +70 -0
  52. package/bundled-skills/traderspy-position-check/SKILL.md +130 -0
  53. package/bundled-skills/traderspy-position-check/references/risk-math.md +60 -0
  54. package/bundled-skills/traderspy-smart-money/SKILL.md +151 -0
  55. package/bundled-skills/traderspy-smart-money/references/exchange-notes.md +40 -0
  56. package/bundled-skills/traderspy-technical-analysis/SKILL.md +162 -0
  57. package/bundled-skills/traderspy-technical-analysis/references/derivatives-guide.md +57 -0
  58. package/bundled-skills/traderspy-technical-analysis/references/indicator-guide.md +47 -0
  59. package/bundled-skills/traderspy-trading-signals/SKILL.md +156 -0
  60. package/bundled-skills/traderspy-trading-signals/references/signal-fields.md +64 -0
  61. package/bundled-skills/unified-ai-gateway/SKILL.md +3 -3
  62. package/package.json +1 -1
  63. package/skills_index.json +499 -1
@@ -0,0 +1,182 @@
1
+ ---
2
+ name: traderspy-market-screener
3
+ description: "Scan the most-traded crypto futures pairs for up to 3 technical conditions in one TraderSpy call, compare coins, and backtest what followed a condition. Use for \"which coins are oversold\"."
4
+ category: finance
5
+ risk: safe
6
+ source: "https://github.com/target1m/traderspy-mcp/tree/069aae5a84640d671f92705a2e3bc0b62efca1e0/skills/market-screener"
7
+ source_repo: target1m/traderspy-mcp
8
+ source_type: official
9
+ date_added: "2026-09-25"
10
+ author: target1m
11
+ tags: [traderspy, crypto, screener, backtesting, mcp]
12
+ tools: [claude, cursor, gemini]
13
+ license: MIT
14
+ license_source: "https://github.com/target1m/traderspy-mcp/blob/069aae5a84640d671f92705a2e3bc0b62efca1e0/LICENSE"
15
+ ---
16
+
17
+ # TraderSpy Market Screener
18
+
19
+ Two tools, one vocabulary. `screen_symbols` evaluates up to three AND-ed conditions across the
20
+ most-traded pairs (or a list you give it) on one timeframe, in ONE quota unit. `backtest_condition`
21
+ takes the same conditions, one symbol and one timeframe, and reports what price did after every
22
+ past occurrence — with the unconditional baseline so the edge is separated from the tape's drift.
23
+
24
+ Together they answer the two questions traders actually ask: "what fits this pattern right now?"
25
+ and "has this pattern meant anything before?"
26
+
27
+ ## When to Use
28
+
29
+ - Use when the user wants to find, filter, rank or compare several coins by technical conditions: "which coins are oversold on the 4h", "what is above its 200 EMA with rising volume", "show me Bollinger squeezes", "find me setups".
30
+ - Use for side-by-side comparison tables such as "compare BTC, ETH and SOL".
31
+ - Use when the user asks what happened after a condition in the past: "how did ETH do after RSI dropped below 30", "is a golden cross on BTC daily actually bullish".
32
+ - Never answer these by calling `get_technical_indicators` coin by coin. For a deep read of one coin use `@traderspy-technical-analysis`.
33
+
34
+ ## The condition vocabulary
35
+
36
+ A condition is `{ metric, op, value, period?, period2? }`. `op` is `lt` / `gt` (latest value) or
37
+ `crossAbove` / `crossBelow` (a one-bar event: the previous bar was on the other side).
38
+
39
+ | Metric | Default period | Unit / meaning |
40
+ | --- | --- | --- |
41
+ | `rsi` | 14 | 0–100 |
42
+ | `stochastic` | 14, %D 3 | slow %K, 0–100 |
43
+ | `cci` | 20 | Commodity Channel Index (±100 typical bands) |
44
+ | `mfi` | 14 | 0–100, volume-weighted RSI |
45
+ | `williamsR` | 14 | −100…0 (−80 oversold, −20 overbought) |
46
+ | `adx` | 14 | trend strength; > 25 strong, < 20 absent |
47
+ | `roc` | 12 | rate of change, % |
48
+ | `macdHistogram` | 12, 26 (signal 9) | histogram in price units; `crossAbove 0` = bullish MACD cross |
49
+ | `atrPct` | 14 | ATR as % of price — volatility |
50
+ | `volumeRatio` | 20 | bar volume ÷ average of the previous N bars |
51
+ | `bbPercentB` | 20 (2σ) | 0 = lower band, 1 = upper band; < 0 or > 1 = outside |
52
+ | `bbWidthPct` | 20 | band width as % of the middle — small = squeeze |
53
+ | `priceVsEma` | 50 | % distance of close from EMA(period); > 0 above |
54
+ | `emaSpread` | 50, 200 | % of EMA(period) over EMA(period2); `crossAbove 0` = golden cross |
55
+ | `supertrend` | 10 (×3) | +1 up-trend, −1 down-trend |
56
+ | `changePct` | 24 | % change of close over the last N BARS (on 1h, 24 = one day) |
57
+ | `price` | — | close |
58
+
59
+ Periods clamp to 2–200. Conditions are AND-ed; there is no OR — run two scans for an OR and merge.
60
+ Unknown metrics are rejected, so stick to the table (the full recipe list is in
61
+ `references/condition-cookbook.md`).
62
+
63
+ ## Screening (`screen_symbols`)
64
+
65
+ Arguments: `interval` (default 4h), `conditions` (≤ 3), `universe` (5–100 most-traded by 24h
66
+ volume, default 50) OR `symbols` (≤ 100, explicit), `limit` (≤ 50 rows), `sortBy` volume /
67
+ change24h / metric, `sortOrder`.
68
+
69
+ Choose the timeframe from the user's horizon: intraday → `1h` (or `15m`), swing → `4h`, position →
70
+ `1d`. Widen `universe` to 100 when the user wants small caps or the first scan matched little.
71
+
72
+ Every result row carries the metric values under their labels (`values["RSI(14)"]`), plus `price`,
73
+ `change24hPct`, `volume24hUsd`, `bias`, `trend`, `rsi14`, `adx14`, `atrPct`, `volumeRatio`,
74
+ `squeeze`. When `matched` > `returned`, say so and offer to raise `limit`.
75
+
76
+ **Comparison mode**: `symbols` with no `conditions` returns every listed symbol as a table — this is
77
+ how you answer "compare BTC, ETH and SOL" or "how do my five coins look on the daily".
78
+
79
+ **Translate intent to conditions before calling**, and say what you translated it to:
80
+
81
+ - "oversold" → `rsi lt 30` (or 35 for a wider net); "deeply oversold" add `bbPercentB lt 0`
82
+ - "overbought" → `rsi gt 70`
83
+ - "in an uptrend" → `priceVsEma gt 0 period 200` + `supertrend gt 0`
84
+ - "with rising volume" → `volumeRatio gt 1.5`
85
+ - "squeezing" → `bbWidthPct lt 4` on 4h (lower on 1h) — then sort by metric ascending
86
+ - "dumped today" → `changePct lt -5 period 24` on 1h, or `period 6` on 4h
87
+ - "golden cross" → `emaSpread crossAbove 0 period 50 period2 200` on 1d
88
+
89
+ ## Backtesting (`backtest_condition`)
90
+
91
+ Arguments: `symbol`, `interval`, `conditions` (same vocabulary), `horizons` in bars (≤ 4; defaults
92
+ ≈ 4h / 1d / 3d: 1h → [4, 24, 72], 4h → [6, 18, 42], 1d → [1, 3, 7]).
93
+
94
+ The study runs over the whole stored tape — up to 1000 candles, so roughly 41 days on 1h, 166
95
+ days on 4h, 3 years on 1d. An "occurrence" is the FIRST bar of each run where the condition held
96
+ (ten consecutive oversold bars are one episode). For each horizon you get `samples`,
97
+ `avgReturnPct`, `medianReturnPct`, `winRatePct`, `avgMaxUpPct` / `avgMaxDownPct` (average best and
98
+ worst excursion, wick-accurate), `bestPct` / `worstPct`, `baselineAvgReturnPct` (every bar on the
99
+ same tape) and `edgePct` = average − baseline. Also `activeNow`, `currentValues`, `lastOccurrence`,
100
+ and `recent[]` with the last five episodes and their realised returns.
101
+
102
+ How to read it honestly:
103
+
104
+ - **Edge and sample size travel together.** `edgePct +1.8 on 27 samples` is a statement;
105
+ `+6 on 4 samples` is an anecdote, and the tool says so in `warnings`. Never quote the edge alone.
106
+ - **Median vs average**: a positive average with a negative median means a few big winners carried
107
+ it. Say which.
108
+ - **Excursions are the risk picture**: `avgMaxDownPct −5.1` on a "bullish" setup means the average
109
+ episode went 5% against you before the horizon ended. That belongs next to the win rate.
110
+ - **Horizons that disagree** (positive at 1d, negative at 3d) usually mean a bounce that fades —
111
+ report the shape, do not pick the flattering horizon.
112
+ - Recent episodes newer than a horizon are excluded from that horizon (`null` in `recent`), never
113
+ counted as zero.
114
+ - Coverage limits what the study can see: 41 days of 1h data contains one market regime. A 1d
115
+ study is the only one that spans cycles.
116
+
117
+ ## Workflows
118
+
119
+ **"What's oversold right now?"** → one `screen_symbols`. Present the table, then (optional, one more
120
+ call) `backtest_condition` the same condition on the top match so the answer carries "and here is
121
+ what that has meant on this coin before".
122
+
123
+ **"Find me setups" / "watchlist"** → decide the archetype with the user in one line (mean-reversion
124
+ vs trend-continuation vs breakout), run one scan per archetype (2–3 calls), and present each list
125
+ with the conditions it was built from. Do not promise an outcome for any row.
126
+
127
+ **"Is X actually bullish?"** → one `backtest_condition` on the coin and timeframe in question;
128
+ if the user names no coin, BTC on 1d is the most meaningful default and say why (longest tape).
129
+
130
+ **"Compare A, B, C"** → `screen_symbols` with `symbols`, no conditions, on the timeframe they care
131
+ about. Add `get_derivatives` (technical-analysis) only if the question includes funding or
132
+ positioning.
133
+
134
+ ## Presenting
135
+
136
+ Screen: state the conditions in words and in the tool's labels, the timeframe, and the universe
137
+ ("50 most-traded pairs"), then one row per symbol:
138
+
139
+ | Symbol | Price | 24h % | <metric labels…> | Bias | Trend | ADX | ATR% |
140
+
141
+ Backtest: one header line (symbol, timeframe, condition, occurrences, coverage), a horizon table —
142
+
143
+ | Horizon | Samples | Avg % | Median % | Win % | Avg best % | Avg worst % | Baseline % | Edge % |
144
+
145
+ — then the last episodes and whether the condition is active now. Close with the sample-size
146
+ caveat in your own words.
147
+
148
+ ## Conduct
149
+
150
+ - A screen is a list of things that are true about the chart right now; a backtest is a sample of
151
+ what followed in the past. Neither is a recommendation. Present the evidence, note what would
152
+ invalidate the setup, and leave the trade — and the sizing — to the user.
153
+ - Never turn "70% win rate on 12 samples" into a forecast; historical stats describe their sample.
154
+ - Nothing in this connector trades — no order, close, transfer or withdrawal tool exists by design.
155
+ If asked to execute, say so plainly; the decision and the trade stay with the user.
156
+ - Quote only what the tools returned; when a symbol is missing from the universe say it was not
157
+ scanned rather than implying it failed the filter.
158
+ - When a specific trade idea is under discussion, end with one plain sentence that crypto
159
+ derivatives are high-risk and this is market information, not financial advice.
160
+
161
+ ## Examples
162
+
163
+ ```text
164
+ Which coins are oversold on the 4h?
165
+ Run the screener: RSI under 30 and ADX above 25 on the 4h, top 100 by volume.
166
+ Compare BTC, ETH and SOL on the daily.
167
+ Historically, what happened on SOLUSDT 4h after RSI crossed above 30? Compare it against the baseline over the same tape.
168
+ ```
169
+
170
+ ## Limitations
171
+
172
+ - Needs the hosted TraderSpy MCP server connected in the client (`https://mcp.traderspy.app/mcp`, Streamable HTTP), authorized with OAuth or a personal key from https://traderspy.app/mcp. A free TraderSpy account is enough. Without the server the skill has no data to work from.
173
+ - Tool calls are metered per day: 300 on the free tier, 5,000 on premium.
174
+ - Every tool is read-only. Nothing here places, closes or modifies an order, and there is no withdrawal or transfer tool.
175
+ - The output is market data and analysis for the user's own research, not investment advice.
176
+ - Conditions are AND-ed, at most three per scan, from the fixed metric list above. An OR needs two scans.
177
+ - A scan covers up to the 100 most-traded pairs or an explicit list of up to 100 symbols. A backtest sees at most 1000 stored candles, about 41 days on 1h.
178
+
179
+ ## Related Skills
180
+
181
+ - `@traderspy-technical-analysis` (called `technical-analysis` in the text above, its upstream ID) - one coin in depth, and `get_derivatives` for funding and positioning
182
+ - `@traderspy-market-briefing` - a market overview that includes a movers scan
@@ -0,0 +1,70 @@
1
+ # Condition cookbook
2
+
3
+ Ready-made `conditions` arrays for the intents users actually voice. Combine at most three.
4
+
5
+ ## Mean reversion
6
+
7
+ | Intent | Conditions |
8
+ | --- | --- |
9
+ | Oversold | `[{"metric":"rsi","op":"lt","value":30}]` |
10
+ | Oversold, wider net | `[{"metric":"rsi","op":"lt","value":35}]` |
11
+ | Deeply oversold (outside lower band) | `[{"metric":"rsi","op":"lt","value":30},{"metric":"bbPercentB","op":"lt","value":0}]` |
12
+ | Oversold in an uptrend (pullback) | `[{"metric":"rsi","op":"lt","value":40},{"metric":"priceVsEma","op":"gt","value":0,"period":200}]` |
13
+ | Overbought | `[{"metric":"rsi","op":"gt","value":70}]` |
14
+ | Overbought and stretched | `[{"metric":"rsi","op":"gt","value":70},{"metric":"bbPercentB","op":"gt","value":1}]` |
15
+ | Washed out on volume | `[{"metric":"williamsR","op":"lt","value":-90},{"metric":"volumeRatio","op":"gt","value":2}]` |
16
+ | Dumped 5%+ in a day (on 1h) | `[{"metric":"changePct","op":"lt","value":-5,"period":24}]` |
17
+ | Dumped 5%+ in a day (on 4h) | `[{"metric":"changePct","op":"lt","value":-5,"period":6}]` |
18
+
19
+ ## Trend
20
+
21
+ | Intent | Conditions |
22
+ | --- | --- |
23
+ | Above the 200 EMA | `[{"metric":"priceVsEma","op":"gt","value":0,"period":200}]` |
24
+ | Strong uptrend | `[{"metric":"priceVsEma","op":"gt","value":0,"period":200},{"metric":"adx","op":"gt","value":25},{"metric":"supertrend","op":"gt","value":0}]` |
25
+ | Strong downtrend | `[{"metric":"priceVsEma","op":"lt","value":0,"period":200},{"metric":"adx","op":"gt","value":25},{"metric":"supertrend","op":"lt","value":0}]` |
26
+ | Golden cross (event) | `[{"metric":"emaSpread","op":"crossAbove","value":0,"period":50,"period2":200}]` |
27
+ | Death cross (event) | `[{"metric":"emaSpread","op":"crossBelow","value":0,"period":50,"period2":200}]` |
28
+ | Fast EMA stack turning up | `[{"metric":"emaSpread","op":"crossAbove","value":0,"period":9,"period2":21}]` |
29
+ | SuperTrend just flipped up | `[{"metric":"supertrend","op":"crossAbove","value":0}]` |
30
+ | Pullback to the 50 EMA in an uptrend | `[{"metric":"priceVsEma","op":"lt","value":1,"period":50},{"metric":"priceVsEma","op":"gt","value":-1,"period":50},{"metric":"priceVsEma","op":"gt","value":0,"period":200}]` |
31
+
32
+ ## Momentum
33
+
34
+ | Intent | Conditions |
35
+ | --- | --- |
36
+ | MACD bullish cross (event) | `[{"metric":"macdHistogram","op":"crossAbove","value":0}]` |
37
+ | MACD bearish cross (event) | `[{"metric":"macdHistogram","op":"crossBelow","value":0}]` |
38
+ | Momentum burst | `[{"metric":"roc","op":"gt","value":5},{"metric":"volumeRatio","op":"gt","value":1.5}]` |
39
+ | Stochastic oversold cross up (event) | `[{"metric":"stochastic","op":"crossAbove","value":20}]` |
40
+ | Money flow drying up in an uptrend (divergence hint) | `[{"metric":"mfi","op":"lt","value":40},{"metric":"priceVsEma","op":"gt","value":0,"period":200}]` |
41
+
42
+ ## Volatility
43
+
44
+ | Intent | Conditions |
45
+ | --- | --- |
46
+ | Bollinger squeeze (4h) | `[{"metric":"bbWidthPct","op":"lt","value":4}]` — sort by metric ascending |
47
+ | Bollinger squeeze (1h) | `[{"metric":"bbWidthPct","op":"lt","value":2.5}]` |
48
+ | Quiet, low-ATR names | `[{"metric":"atrPct","op":"lt","value":1.5}]` |
49
+ | High-ATR names | `[{"metric":"atrPct","op":"gt","value":5}]` |
50
+ | Volume spike right now | `[{"metric":"volumeRatio","op":"gt","value":3}]` |
51
+
52
+ ## Price
53
+
54
+ | Intent | Conditions |
55
+ | --- | --- |
56
+ | Sub-dollar coins in an uptrend | `[{"metric":"price","op":"lt","value":1},{"metric":"priceVsEma","op":"gt","value":0,"period":200}]` |
57
+
58
+ ## Backtest pairings that read well
59
+
60
+ - Oversold bounce: `rsi lt 30` on 4h, default horizons → answers "does buying the dip work here".
61
+ - Golden cross: `emaSpread crossAbove 0 (50,200)` on 1d, horizons `[5, 10, 20, 40]`.
62
+ - Capitulation day: `changePct lt -8 period 1` on 1d, horizons `[1, 3, 7, 14]`.
63
+ - Squeeze release: `bbWidthPct lt 3` on 4h — note that a squeeze predicts a move, not a
64
+ direction; expect small average returns with large excursions both ways.
65
+
66
+ ## Reading `values`
67
+
68
+ Every row's `values` map is keyed by the tool's label (`RSI(14)`, `EMA spread(50,200)`,
69
+ `Price vs EMA(200)`), and the same labels appear in the `conditions` echo — use them in the table
70
+ header so the user can see exactly what was tested.
@@ -0,0 +1,130 @@
1
+ ---
2
+ name: traderspy-position-check
3
+ description: "Health-check crypto futures positions the user describes, with TraderSpy data: liquidation and stop distance, multi-timeframe read, funding and top-trader side. Reports only; never tells the user to close or add."
4
+ category: finance
5
+ risk: safe
6
+ source: "https://github.com/target1m/traderspy-mcp/tree/069aae5a84640d671f92705a2e3bc0b62efca1e0/skills/position-check"
7
+ source_repo: target1m/traderspy-mcp
8
+ source_type: official
9
+ date_added: "2026-09-25"
10
+ author: target1m
11
+ tags: [traderspy, crypto, risk-management, futures, mcp]
12
+ tools: [claude, cursor, gemini]
13
+ license: MIT
14
+ license_source: "https://github.com/target1m/traderspy-mcp/blob/069aae5a84640d671f92705a2e3bc0b62efca1e0/LICENSE"
15
+ ---
16
+
17
+ # TraderSpy Position Check
18
+
19
+ A position check answers, in order: how much room is left before this position is taken away
20
+ (liquidation), how much before the user's own plan says it is wrong (stop), what the chart and
21
+ the derivatives market are doing around it, and who else is positioned the same way. Report those
22
+ facts with numbers. The decision — hold, trim, close, add — belongs to the person whose money it
23
+ is.
24
+
25
+ ## When to Use
26
+
27
+ - Use when the user asks "how's my position", "am I in trouble", "how far am I from liquidation", "should I hold or close" or "review my trades", or asks what you think of their long or short.
28
+ - Use when the user pastes or describes a position, for example "I'm long ETH from 2,400 at 10x".
29
+ - The skill reports and explains. It never tells the user to close, add, hedge or move a stop, and it cannot trade.
30
+
31
+ ## Inputs
32
+
33
+ The position always comes from the user. TraderSpy has no account tool: it cannot read a balance
34
+ or an open position on any exchange, so never offer to "check the account".
35
+
36
+ Ask for whatever is missing among side, entry, leverage (and stop / target / the exchange's
37
+ liquidation price if they have them). Size is optional — the analysis works in percentages. The
38
+ current price is the `price` that `get_technical_indicators` returns.
39
+
40
+ Map the symbol to Binance naming for the data tools: `BTC` → `BTCUSDT`, `kPEPE` → `1000PEPEUSDT`,
41
+ `xyz:AVGO` → `AVGOUSDT`.
42
+
43
+ ## Calls per position (keep it to what matters)
44
+
45
+ 1. `get_technical_indicators` — `intervals: ["1h","4h","1d"]`, `indicators: ["rsi","macd","ema",
46
+ "atr","adx","supertrend","levels"]`. One call. This gives the trend on three timeframes, ATR
47
+ for stop sanity and the nearest levels.
48
+ 2. `get_derivatives` — up to five coins in ONE call for all positions at once. Funding is a cost
49
+ or an income for this position; the OI regime says whether the move is being funded.
50
+ 3. `get_positions` — `symbol`, `status: "open"`, `limit: 20`. Optional; skip on a tight quota.
51
+ Tells you whether tracked top traders are on the same side.
52
+
53
+ Three positions ≈ 3 + 1 (+3) calls. If the quota is tight, do derivatives for all coins first,
54
+ then technicals for the position with the smallest liquidation distance.
55
+
56
+ ## The math (show it, briefly)
57
+
58
+ - P&L % on margin = (mark − entry) / entry × leverage, sign-flipped for shorts; P&L % on price =
59
+ the same without leverage. State both when leverage > 1.
60
+ - Distance to liquidation = |liq − mark| / mark. With no liquidation price from the user, approximate:
61
+ ≈ 100 / leverage % minus a maintenance buffer (say it is approximate; cross margin makes the
62
+ real distance depend on the whole account).
63
+ - Distance to stop = |stop − mark| / mark, and stop distance in ATRs = |stop − mark| / ATR(14) on
64
+ the 4h. Under 1 ATR means the stop sits inside normal noise for that timeframe.
65
+ - Funding per day ≈ `funding.ratePct` × 3 on notional; positive rate costs longs and pays shorts.
66
+
67
+ Bands for the liquidation distance: ≤ 5% →
68
+ "at risk", ≤ 15% → "watch", above → "comfortable". These are labels for a distance, not
69
+ instructions.
70
+
71
+ ## The report
72
+
73
+ ALWAYS use this template per position:
74
+
75
+ **<COIN> <SIDE> · <leverage>x · <marginMode>**
76
+
77
+ - Entry <entry> → mark <mark> (<±x.x%> on price, <±y%> on margin) · uPnL <$, when the size is known>
78
+ - Liquidation <liq> — <d%> away → **<at risk / watch / comfortable>**
79
+ - Stop <stop or "none stated"> — <d%> / <n> ATR(4h) away · Target <if any>
80
+ - Chart: 1h <bias, RSI, trend> · 4h <…> · 1d <…> · confluence <aligned / mixed>
81
+ - Nearest levels: support <price (d%)>, resistance <price (d%)>
82
+ - Derivatives: funding <label, annualized → cost or income for this side>, OI <regime>, top
83
+ traders <long %> (same side / opposite side)
84
+ - Thesis check: what the position needs to keep working, and the level or reading that would
85
+ say it has stopped working
86
+ - Scenarios: if price goes to <nearest level against> the position shows <P&L>; at <liquidation>
87
+ it is gone; at <nearest level for> it shows <P&L>
88
+
89
+ Then one line naming the position with the least room, and one plain sentence that crypto derivatives are high-risk and this is market information,
90
+ not financial advice.
91
+
92
+ Facts first, labels second, no verbs of instruction. "The stop sits 0.6 ATR away, inside normal 4h
93
+ noise" is a report; "move your stop" is not.
94
+
95
+ ## Conduct
96
+
97
+ - Never tell the user to close, hold, add, hedge, move a stop or change leverage. Present
98
+ distances, scenarios and the invalidation level; the decision is theirs. If they ask "should I
99
+ close", lay out what supports staying in and what argues against, then hand it back.
100
+ - Distances and scenarios are arithmetic on current prices and levels the tools returned; they are
101
+ not predictions of where price will go.
102
+ - Nothing in this connector trades — no order, close, transfer or withdrawal tool exists, by
103
+ design. Say so when asked to act; the decision and any trade stay with the user.
104
+ - Position details the user shares stay in the conversation; do not restate them in later
105
+ unrelated answers.
106
+ - Quote only tool results and what the user told you; if a coin is not tracked, say so.
107
+
108
+ Formulas and worked examples: `references/risk-math.md`.
109
+
110
+ ## Examples
111
+
112
+ ```text
113
+ I'm short SOL from 180 at 5x, liquidation around 214. How far is it, and what do the 1h/4h/1d indicators say?
114
+ I'm long ETH from 2,400 at 10x with a stop at 2,250. How does it look?
115
+ Am I in trouble on my SOL short?
116
+ ```
117
+
118
+ ## Limitations
119
+
120
+ - Needs the hosted TraderSpy MCP server connected in the client (`https://mcp.traderspy.app/mcp`, Streamable HTTP), authorized with OAuth or a personal key from https://traderspy.app/mcp. A free TraderSpy account is enough. Without the server the skill has no data to work from.
121
+ - Tool calls are metered per day: 300 on the free tier, 5,000 on premium.
122
+ - Every tool is read-only. Nothing here places, closes or modifies an order, and there is no withdrawal or transfer tool.
123
+ - The output is market data and analysis for the user's own research, not investment advice.
124
+ - TraderSpy cannot see anyone's exchange or TraderSpy account, so every position has to be described or pasted in chat.
125
+ - Without a `liquidationPrice` the liquidation distance is an approximation; under cross margin it depends on the whole account.
126
+
127
+ ## Related Skills
128
+
129
+ - `@traderspy-technical-analysis` - a full chart read on one of the coins
130
+ - `@traderspy-smart-money` - who else holds the same position
@@ -0,0 +1,60 @@
1
+ # Risk math for position checks
2
+
3
+ Entry, side and leverage come from the user; mark is the current `price` from the data tools.
4
+
5
+ ## P&L
6
+
7
+ - Price move % = (mark − entry) / entry × 100, sign-flipped for a SHORT.
8
+ - Return on margin % ≈ price move % × leverage (isolated margin; for cross margin the same figure
9
+ describes the position, not the account).
10
+ - Unrealized P&L in USD needs the size; compute it only when the user gave one, and say so.
11
+
12
+ ## Liquidation
13
+
14
+ - Exact: the liquidation price the user's exchange shows → distance % = |liq − mark| / mark × 100.
15
+ - Approximation when the user has none: distance % ≈ 100 / leverage − maintenance margin (assume ~0.5–1%
16
+ and say "approximately"). 10x → ~9%, 20x → ~4%, 40x → ~2%. Cross margin can be wider (the whole
17
+ account backs it) or tighter (other positions drain it); the exact figure is the exchange's.
18
+
19
+ Bands: ≤ 5% at risk · ≤ 15% watch · > 15% comfortable.
20
+
21
+ ## Stop sanity
22
+
23
+ - Stop distance % = |stop − mark| / mark × 100.
24
+ - In ATRs = |stop − mark| / ATR(14) on the timeframe the user trades (use the 4h if unstated).
25
+ < 1 ATR: inside normal noise; 1–2 ATR: typical swing stop; > 3 ATR: wide.
26
+ - Reward-to-risk = |target − mark| / |stop − mark| from the CURRENT mark (the original R:R from
27
+ entry is history).
28
+
29
+ ## Funding
30
+
31
+ - Per-day cost ≈ `funding.ratePct` × 3 (three 8h settlements) × notional; a positive rate is paid
32
+ by longs to shorts. Quote it as "≈ $x/day" or "≈ y% APR against / for this side".
33
+ - `avg3dPct` says whether today's rate is typical.
34
+
35
+ ## Reading the chart against the position
36
+
37
+ - Same-side confluence (a LONG with 1h/4h/1d bullish) → the chart supports the position; the risk
38
+ is the distance to the stop and to liquidation, not the direction.
39
+ - Opposite-side confluence → the chart is against it; name the level that would have to reclaim.
40
+ - Mixed → identify which timeframe is the user's and lead with that one.
41
+ - Nearest level against the position vs stop: if the stop is beyond a well-touched support (for a
42
+ long), the plan has structure; if it sits above it, note that the level may be tested first.
43
+
44
+ ## Worked example
45
+
46
+ LONG ETH 10x cross, entry 2,434, mark 2,534, liq 2,290, stop 2,380, ATR(4h) 62, funding
47
+ +0.002%/8h, OI regime `new_longs`, top traders 55% long.
48
+
49
+ - Price move +4.1%, on margin ≈ +41%.
50
+ - Liquidation 9.6% away → comfortable.
51
+ - Stop 6.1% / 2.5 ATR away → outside 4h noise.
52
+ - Funding ≈ 0.006%/day → negligible cost for a long (≈ 2% APR).
53
+ - Chart 4h bullish, 1d neutral → mixed; the 4h is doing the work.
54
+ - Derivatives: new longs entering; leaders lean long only mildly (55%).
55
+ - Thesis check: the position needs the 4h uptrend to hold; a 4h close below the nearest support
56
+ (say 2,470) would put the stop in play; above 2,600 resistance the next level is …
57
+ - Scenarios: at 2,470 → +1.5% on price (+15% on margin); at 2,380 (stop) → −2.2% / −22%; at 2,290
58
+ → liquidated.
59
+
60
+ Reported as facts and scenarios — no instruction about what to do.
@@ -0,0 +1,151 @@
1
+ ---
2
+ name: traderspy-smart-money
3
+ description: "Track what top crypto futures traders hold on Binance, Hyperliquid, Bybit and OKX with TraderSpy: elite leaderboard, positions, trader profiles and history. Use for \"what are whales doing\"."
4
+ category: finance
5
+ risk: safe
6
+ source: "https://github.com/target1m/traderspy-mcp/tree/069aae5a84640d671f92705a2e3bc0b62efca1e0/skills/smart-money"
7
+ source_repo: target1m/traderspy-mcp
8
+ source_type: official
9
+ date_added: "2026-09-25"
10
+ author: target1m
11
+ tags: [traderspy, crypto, smart-money, whale-tracking, mcp]
12
+ tools: [claude, cursor, gemini]
13
+ license: MIT
14
+ license_source: "https://github.com/target1m/traderspy-mcp/blob/069aae5a84640d671f92705a2e3bc0b62efca1e0/LICENSE"
15
+ ---
16
+
17
+ # TraderSpy Smart Money
18
+
19
+ TraderSpy follows thousands of top-ranked accounts on four exchanges and records their positions as
20
+ they open, change and close. This skill turns that feed into answers about positioning and about
21
+ individual traders. Positions are observations of what other people did with their own money —
22
+ present them as evidence, never as instructions.
23
+
24
+ ## When to Use
25
+
26
+ - Use when the user asks what whales or top traders are buying, shorting or holding, or whether big accounts are long or short a coin.
27
+ - Use when the user asks who ranks highest on an exchange or across exchanges, or wants to research one trader's record and open positions.
28
+ - Use for "smart money", "whale watch" or "what are the pros doing".
29
+ - Not for funding rate, open interest or long/short ratios of the whole market (`@traderspy-technical-analysis`), and not for AI signals (`@traderspy-trading-signals`).
30
+
31
+ ## Tools
32
+
33
+ | Tool | Use it for | Key arguments |
34
+ | --- | --- | --- |
35
+ | `get_elite_leaderboard` | The cross-exchange top 10 by smart score, with the scoring rationale | none |
36
+ | `get_top_traders` | Ranked traders per exchange and window | `source` all / binance / hyperliquid / bybit / okx, `timeRange` 24h / 3D / 7D / 30D, `rankingType` ROI / PNL, `sortBy` ROI / PNL / SCORE, `limit` ≤ 200 |
37
+ | `get_positions` | The position feed | `status` open / closed / all, `source`, `symbol`, `limit` ≤ 50, `offset` |
38
+ | `get_trader_profile` | One trader: metrics + latest positions | `traderId` AND `source` (see below), `timeRange`, `rankingType` |
39
+ | `get_trader_position_history` | One trader's closed trades, paged | `traderId`, `source`, `page`, `limit` ≤ 50 |
40
+ | `get_market_stats` | Aggregate counts and PnL across all tracked positions | `source`, `period` 4h / 8h / 24h / 7d |
41
+ | `get_exchanges` | Which exchanges are currently tracked | none |
42
+
43
+ **Always pass `source` with a trader id.** `get_trader_profile` and `get_trader_position_history`
44
+ default to Binance; a Hyperliquid address (`0x…`) or an OKX id looked up on the wrong exchange
45
+ returns nothing. Take `source` from the row you got the id from.
46
+
47
+ ## Reading the data
48
+
49
+ **Symbols differ per exchange.** Hyperliquid rows use bare coins (`BTC`, `ZEC`) and prefix
50
+ tokenized stocks with `xyz:` (`xyz:AVGO`); Binance, Bybit and OKX rows use `BTCUSDT`. When the
51
+ user asks about "BTC positions", pass `symbol: "BTC"` — the filter matches both `BTC` and
52
+ `BTCUSDT` exactly — and read the `symbol` field before summing anything. Tokenized stocks
53
+ (`xyz:AVGO`) are not reachable through the filter; fetch without `symbol` and pick them out.
54
+
55
+ **Position rows**: `side` LONG / SHORT, `size` in coins, `entryPrice`, `markPrice`, `leverage`,
56
+ `unrealizedPnl` (open rows) or `pnl` + `roi` (closed rows), `openTime` / `closeTime`, `isOpen`,
57
+ `lastEvent` (`increase`, `partial_close`, or null when the last change was the open itself). Notional ≈ `size × markPrice`; use
58
+ notional, not row count, when you say "whales are net long".
59
+
60
+ **Freshness.** Binance and Bybit snapshots refresh every 5–15 minutes, Hyperliquid every 15 minutes
61
+ plus live fills, OKX every 10–60 minutes. On a free-tier key the feed is delayed 15 minutes — if
62
+ `get_positions` returns nothing newer than that, say the feed is delayed rather than "no activity".
63
+
64
+ **Leaderboard rows** (`get_top_traders`) carry the exchange's own ranking snapshot: `roi`, `pnl`,
65
+ `assets` (account size), `winRate` (null on Hyperliquid — the exchange does not publish it),
66
+ `rankings[]` with the same trader across every window, and `smartScore` when TraderSpy has scored
67
+ them. `traderName` is a shortened address when the account has no public name. A trader who is
68
+ #1 on 30-day ROI with `assets` of $5k is a different animal from #19 with $3.4M — quote both.
69
+
70
+ **Smart score** (`get_elite_leaderboard`, 0–100, recomputed daily): realized PnL 30% (all-time
71
+ blended with the last 30 days), effective win rate 22%, ROI edge 18%, consistency 14%, longevity
72
+ 10%, trade depth 6%, plus a recency bonus (up to +9) and a staleness penalty (down to −12 after
73
+ about three weeks idle). `scoreBreakdown` shows each part, `rationale[]` is a ready-made
74
+ plain-language justification, `metrics` has the raw counts (`closedTrades`, `profitFactor`,
75
+ `realizedPnl30d`, `openPositionCount`, `worstDayPnl`). `reliabilityMultiplier` below 1 means a
76
+ short history dragged the score down — say so when a 6-day-old account ranks top-5.
77
+
78
+ **Market stats** aggregate every tracked position, thousands of them, so `realizedPnl` can be a
79
+ large negative number even when the leaders are winning; the tracked universe includes traders
80
+ who fell off the leaderboard. Use it for counts and the exchange split, not as "smart money is
81
+ losing".
82
+
83
+ ## Workflows
84
+
85
+ **"What are whales doing in SOL?"** → `get_positions` with `symbol`, `status: open`, `limit` 50.
86
+ Sum notional by side, name the largest two or three accounts with entry and leverage, and note
87
+ how recent the newest entries are. If open rows are few, add `status: closed` for the last day to
88
+ show whether they have been exiting.
89
+
90
+ **"Who are the best traders right now?"** → `get_elite_leaderboard` first (it is cross-exchange
91
+ and score-based), then `get_top_traders` for a specific exchange or window if the user wants raw
92
+ ROI/PnL. Explain that 7-day ROI rankings reward one lucky week; the smart score is built to
93
+ penalise exactly that.
94
+
95
+ **"Should I copy trader X?" / "Research this trader"** → `get_trader_profile` + one or two pages of
96
+ `get_trader_position_history`. From the history compute what the user actually needs: win rate
97
+ from closed rows, typical hold time (`closeTime − openTime`), typical leverage, how concentrated
98
+ in one coin, worst single trade, and whether the recent month looks like the all-time record.
99
+ Present it as a profile. Copying is the user's decision — this connector cannot follow anyone.
100
+
101
+ **"Are the pros long or short?" (whole market)** → `get_positions` `status: open` on the majors
102
+ plus `get_market_stats`; for exchange-wide long/short ratios of ALL accounts use
103
+ `get_derivatives` from technical-analysis instead, which answers that directly.
104
+
105
+ ## Presenting
106
+
107
+ Positions: one row per position —
108
+
109
+ | Trader | Exchange | Side | Size (notional) | Entry | Mark | Lev | uPnL | Opened |
110
+
111
+ Traders: name, exchange, score or rank, window, ROI, PnL, account size, win rate (or "n/a" on
112
+ Hyperliquid), then the two-line rationale. Lead with the number that answers the question, keep
113
+ addresses shortened as returned, and always say which window a ROI belongs to.
114
+
115
+ ## Conduct
116
+
117
+ - Positions are what other traders did, with their capital, their hedges and their exits, which
118
+ you cannot see in full. Present them as evidence about positioning, never as a recommendation to
119
+ mirror them; a leader's long can be one leg of a hedge.
120
+ - Past ROI and win rates describe a past sample — do not present a leaderboard as a forecast of
121
+ who will win next. Point out short histories and small samples.
122
+ - Nothing in this connector trades or copies. There is no order, follow, transfer or withdrawal
123
+ tool, by design. If asked to copy or execute a trade, say so plainly; the decision and the trade stay
124
+ with the user.
125
+ - Quote only what the tools returned; say when data is delayed or a field is null.
126
+ - When the answer is about a specific trade idea, end with one plain sentence that crypto
127
+ derivatives are high-risk and this is market information, not financial advice.
128
+
129
+ For exchange-specific quirks and refresh cadences read `references/exchange-notes.md`.
130
+
131
+ ## Examples
132
+
133
+ ```text
134
+ What are the top traders long and short right now?
135
+ What are whales doing in SOL?
136
+ Who is at the top of the Hyperliquid leaderboard right now, and what are they positioned in? Then show me the position history of the top one.
137
+ ```
138
+
139
+ ## Limitations
140
+
141
+ - Needs the hosted TraderSpy MCP server connected in the client (`https://mcp.traderspy.app/mcp`, Streamable HTTP), authorized with OAuth or a personal key from https://traderspy.app/mcp. A free TraderSpy account is enough. Without the server the skill has no data to work from.
142
+ - Tool calls are metered per day: 300 on the free tier, 5,000 on premium.
143
+ - Every tool is read-only. Nothing here places, closes or modifies an order, and there is no withdrawal or transfer tool.
144
+ - The output is market data and analysis for the user's own research, not investment advice.
145
+ - On a free key, position rows are delayed 15 minutes. Leaderboards, profiles and stats are not delayed.
146
+ - It sees only the accounts TraderSpy tracks on Binance, Hyperliquid, Bybit and OKX, not what the same traders hold elsewhere, so a tracked long can be one leg of a hedge.
147
+
148
+ ## Related Skills
149
+
150
+ - `@traderspy-technical-analysis` (called `technical-analysis` in the text above, its upstream ID) - `get_derivatives` for exchange-wide funding, open interest and long/short ratios
151
+ - `@traderspy-trading-signals` - AI signals rather than trader positions
@@ -0,0 +1,40 @@
1
+ # Exchange notes for the smart-money feed
2
+
3
+ | Exchange | `source` | Trader id looks like | Symbols | Refresh | Notes |
4
+ | --- | --- | --- | --- | --- | --- |
5
+ | Binance | `binance` | opaque leaderboard id | `BTCUSDT` | positions every 5–10 min | Largest tracked set (~5k positions); leaderboard is opt-in, so it is the traders who chose to be public |
6
+ | Hyperliquid | `hyperliquid` | `0x` EVM address | bare coin `BTC`, `kPEPE`-style 1000x coins, `xyz:AVGO` for tokenized stocks | fills live via WebSocket, snapshots every 15 min | Fully on-chain, so positions are exact; `winRate` is null because the venue does not publish it |
7
+ | Bybit | `bybit` | opaque id | `BTCUSDT` | every 10–15 min | Smaller tracked set |
8
+ | OKX | `okx` | 16-hex id | `BTCUSDT` | every 10 min – 1 h | Copy-trade leaders; names and avatars are public; many high-frequency scalpers with 90%+ win rates and tiny per-trade ROI |
9
+
10
+ ## Elite leaderboard (`get_elite_leaderboard`)
11
+
12
+ - Recomputed daily (00:10 Europe/Istanbul); `lastRunAt` says when. Not intraday.
13
+ - `tier` is the exchange's own badge where one exists (OKX leaders show Silver / Bronze / Regular);
14
+ null on venues without badges.
15
+ - `algorithmDetails[]` in the response documents every weight — quote it when the user asks how
16
+ the score works instead of paraphrasing from memory.
17
+ - `summary.totalTrackedTraders` vs `tradersWithClosedTrades` tells you how many accounts actually
18
+ have a closed-trade record behind their score.
19
+ - A trader can top the score with a negative `effectiveRoi` if their realized PnL is huge — the
20
+ score rewards money made, not percentage. Say which when the two disagree.
21
+
22
+ ## Reading a trader's history for a "should I copy" profile
23
+
24
+ From `get_trader_position_history` rows (`symbol, side, size, entryPrice, closePrice, leverage,
25
+ pnl, roi, openTime, closeTime`):
26
+
27
+ - win rate = rows with `pnl > 0` ÷ rows
28
+ - average hold = mean of `closeTime − openTime`, expressed in hours or days
29
+ - concentration = share of rows (or of |pnl|) in the single most-traded symbol
30
+ - worst trade = min `pnl`; compare it with the median win to show the shape of the distribution
31
+ - leverage habit = median `leverage`; flag anything ≥ 20× explicitly
32
+ - recency = share of rows in the last 30 days; a great all-time record with nothing recent is a
33
+ dormant account
34
+
35
+ Two pages of 50 rows are plenty for a profile. State the sample size.
36
+
37
+ ## Free tier
38
+
39
+ Position rows are filtered to those older than 15 minutes on a free key. Leaderboards, profiles and
40
+ stats are not delayed.