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,162 @@
1
+ ---
2
+ name: traderspy-technical-analysis
3
+ description: "Read one crypto futures pair with TraderSpy: 19 indicators on up to 3 timeframes in one call, key levels, funding, open interest and positioning. Use for \"analyse BTC\" or \"is SOL oversold\"."
4
+ category: finance
5
+ risk: safe
6
+ source: "https://github.com/target1m/traderspy-mcp/tree/069aae5a84640d671f92705a2e3bc0b62efca1e0/skills/technical-analysis"
7
+ source_repo: target1m/traderspy-mcp
8
+ source_type: official
9
+ date_added: "2026-09-25"
10
+ author: target1m
11
+ tags: [traderspy, crypto, technical-analysis, indicators, 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 Technical Analysis
18
+
19
+ One good read of a chart is three things in order: where price is in its structure (trend and
20
+ levels), what momentum and volatility are doing, and how the derivatives market is positioned
21
+ around it. TraderSpy gives all three in at most two calls. Spend the calls well — the user's quota
22
+ is finite — and quote the numbers, not adjectives.
23
+
24
+ ## When to Use
25
+
26
+ - Use when the user asks about a coin's chart, trend, momentum, support and resistance, or where a level such as the 200 EMA sits.
27
+ - Use for "analyse BTC", "how does SOL look", "is X overbought / oversold", "what do the indicators say" or "is this a good entry", even when the user only names a coin.
28
+ - Use when the question is whether funding is high or open interest is building, or when the user wants price or candle data.
29
+ - For scanning many coins by conditions use `@traderspy-market-screener`; for whale positions use `@traderspy-smart-money`.
30
+
31
+ ## Tools
32
+
33
+ | Tool | Use it for | Key arguments |
34
+ | --- | --- | --- |
35
+ | `get_technical_indicators` | The chart read | `symbol`, `intervals` (≤ 3) or `interval`, `indicators` (≤ 19), `periods`, `history` 0–20 |
36
+ | `get_derivatives` | Funding, open interest, positioning | `symbols` (≤ 5 Binance USDⓈ-M perps; bare `BTC` is fine) |
37
+ | `get_price` | Live price, 24h high/low/volume/change | `symbols` (≤ 20) |
38
+ | `get_candles` | Raw OHLCV | `symbol`, `interval` 1m/5m/15m/1h/4h/1d, `limit` ≤ 500 |
39
+ | `get_tracked_symbols` | Coverage check | none — only when a symbol returns no data |
40
+
41
+ Symbols are Binance Futures names: `BTCUSDT`, `SOLUSDT`, `1000PEPEUSDT` (1000x-prefixed small
42
+ caps), and tokenized equities/ETFs such as `AAPLUSDT` or `SPYUSDT`. Append `USDT` to a bare coin.
43
+ Hyperliquid-only perps (e.g. HYPE) are tracked under the same naming.
44
+
45
+ ## Making the call count
46
+
47
+ - **Multi-timeframe is one quota unit.** For any "how does X look" question pass
48
+ `intervals: ["1h","4h","1d"]` (or `["15m","1h","4h"]` for an intraday user) and get a
49
+ `confluence` verdict — never three separate calls.
50
+ - **Pick indicators for the question.** Default `rsi, macd, ema, bollinger` covers momentum and
51
+ trend. Add `levels` + `pivots` whenever the user cares about entries, targets or "where is
52
+ support"; `atr` for stop distance and volatility; `adx` for trend strength; `supertrend` for a
53
+ clean trend state; `obv` / `mfi` when volume confirmation matters; `ichimoku` / `keltner` only
54
+ when asked. Eight to ten well-chosen indicators is a full read; all 19 is noise.
55
+ - **`periods`** lets you honour the user's settings (`{"ema":[9,21,55,200],"rsi":7}`); an unknown
56
+ key is rejected, so use the documented names only.
57
+ - **Add `get_derivatives`** when the question involves "why is it moving", crowding, funding,
58
+ open interest, leverage, liquidations, or when the user is about to lean on a directional call —
59
+ candles cannot see positioning.
60
+ - `get_candles` is for when the user wants the data itself (to chart, export or compute something
61
+ custom). Do not fetch candles to eyeball indicators the technicals tool already computes.
62
+
63
+ ## Reading the response
64
+
65
+ **Shape.** One timeframe → top-level `indicators` + `summary`. Several → `timeframes[]` (each
66
+ with `interval`, `price`, `candles`, `indicators`, `summary`) plus `confluence` `{ aligned, bias,
67
+ byInterval }`; the top-level `interval`/`price` then name the first timeframe only. `settings`
68
+ echoes what was computed; `warnings[]` lists anything that was thinned or missing.
69
+
70
+ **Every indicator** carries `value`, `previous`, `direction` (rising / falling / flat) and a short
71
+ `series` (oldest → newest), plus its own fields — `zone` on RSI/Stochastic/CCI/MFI/Williams,
72
+ `crossover` on MACD/Stochastic, `stack`/`pricePosition` on EMA, `±DI` and `strength` on ADX,
73
+ `trend`/`flipped`/`barsSinceFlip` on SuperTrend, `divergence` on RSI/MACD/OBV. `{ value: null,
74
+ reason: "insufficient_data" }` means the tape is too short for that period — say so, do not
75
+ substitute.
76
+
77
+ **`summary` is the spine of the read.** `bias` (bullish / bearish / neutral) is computed from a
78
+ FIXED set (RSI 14, MACD, EMA 20/50/200, ADX 14, ATR 14, BB 20/2, volume 20) regardless of what
79
+ you requested, so it is comparable between calls; `score` is its internal vote (|score| ≥ 30 sets
80
+ a bias). `trend` (direction, strength, emaStack, priceVsEma200), `momentum` (rsiZone, macdState),
81
+ `volatility` (atrPct, atrPercentile 0–100, squeeze, state), `volume.ratioVsAverage`, `patterns[]`
82
+ (candlestick finders on the last two bars) and `notes[]` — plain-language sentences written to be
83
+ quoted. Build the answer from the notes, then add the numbers.
84
+
85
+ **`levels`** (nearest three per side from swing highs/lows over 300 bars): `price`, `touches`,
86
+ `distancePct`; `range.positionPct` (0 = at the low of the lookback, 100 = at the high);
87
+ `fibonacci` (the dominant leg with `retracedPct` and the nearest level above/below);
88
+ `volumeProfile` (`poc`, value area, `pricePosition`). **`pivots`** are classic floor pivots from
89
+ the previous DAILY candle whatever the timeframe. Together they give you a levels table; distance
90
+ in % is what a user can act on.
91
+
92
+ **`confluence.aligned`** is true only when every timeframe with data agrees on a non-neutral bias.
93
+ "Aligned bearish on 1h/4h/1d" is a strong statement; "4h bullish, 1d neutral" is a pullback
94
+ question. Say which.
95
+
96
+ **Derivatives** (`get_derivatives`): `funding.label` — `extreme_longs_paying` / `longs_paying` /
97
+ `neutral` / `shorts_paying` / `extreme_shorts_paying` (longs pay at ≥ +0.03% per 8h, extreme at
98
+ ≥ +0.10%; shorts pay at ≤ −0.01%, extreme at ≤ −0.05%; Binance's baseline is +0.01%; quote
99
+ `annualizedPct`); `openInterest.regime` — `new_longs` / `short_covering` / `new_shorts` /
100
+ `long_liquidation` / `flat` (needs ≥ 1% OI and ≥ 0.5% price change over 24h);
101
+ `positioning.label` — `long_heavy` (long/short ratio ≥ 1.5, i.e. ≥ 60% long) / `balanced` /
102
+ `short_heavy` (≤ 0.67, i.e. ≤ 40% long), read from the top-trader POSITION ratio first;
103
+ `takerBuySellRatio` is the last hour's aggressor flow. Data is at most 60 s old. `notes[]` are
104
+ quotable. Details in `references/derivatives-guide.md`.
105
+
106
+ ## Presenting
107
+
108
+ For a single-coin read ALWAYS use this order, and keep it to what the user asked:
109
+
110
+ 1. **Price line** — symbol, price, time of the read, 24h change if you fetched it.
111
+ 2. **Per timeframe, one line each** — bias, trend (EMA stack and ADX), momentum (RSI zone, MACD
112
+ state), volatility (ATR %, squeeze), with the key number after each label.
113
+ 3. **Confluence** — aligned or not, and what the disagreement means.
114
+ 4. **Levels table** — nearest support and resistance with distance %, the pivot, the nearest
115
+ Fibonacci level, the value-area edge if price is near it.
116
+ 5. **Derivatives line** (if fetched) — funding label + annualized, OI regime, top-trader long %.
117
+ 6. **What would change the read** — the one or two levels or readings that flip the picture
118
+ (e.g. "a 4h close above 79,325 resistance with OI rising would turn the 4h bias bullish").
119
+ 7. One plain sentence: crypto derivatives are high-risk; this is market information, not advice.
120
+
121
+ Use `RSI(14) 41.3 — neutral, falling` style labelling so the period and the direction are always
122
+ visible. Percentages to one decimal; prices to the precision the tool returned.
123
+
124
+ ## Conduct
125
+
126
+ - Describe the chart; do not prescribe the trade. If the user asks "is this a good entry", answer
127
+ with what supports the entry, what argues against it, where the invalidation sits, and hand the
128
+ decision back. Never tell the user to buy, sell, size or leverage.
129
+ - Indicators describe the past bars they were computed on; do not present a bias as a forecast or
130
+ imply any outcome is assured.
131
+ - Nothing in this connector trades — no order, close, transfer or withdrawal tool exists, by
132
+ design. If asked to execute, say so plainly; the decision and the trade stay with the user.
133
+ - Quote only what the tools returned. If an indicator is `insufficient_data` or a symbol is not
134
+ tracked, say so instead of estimating.
135
+ - When the answer is about a specific trade idea, end with one plain sentence that crypto
136
+ derivatives are high-risk and this is market information, not financial advice — once per
137
+ answer.
138
+
139
+ Per-indicator fields and conventional readings: `references/indicator-guide.md`.
140
+
141
+ ## Examples
142
+
143
+ ```text
144
+ Analyse BTC on the 1h, 4h and 1d with funding and open interest.
145
+ Is SOL overbought? Where are the nearest support and resistance levels?
146
+ Where is the 200 EMA on ETH, and is funding stretched?
147
+ ```
148
+
149
+ ## Limitations
150
+
151
+ - 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.
152
+ - Tool calls are metered per day: 300 on the free tier, 5,000 on premium.
153
+ - Every tool is read-only. Nothing here places, closes or modifies an order, and there is no withdrawal or transfer tool.
154
+ - The output is market data and analysis for the user's own research, not investment advice.
155
+ - A multi-timeframe read is one tool call; adding derivatives makes it two.
156
+ - Symbols use Binance Futures naming (`BTCUSDT`, `1000PEPEUSDT`). `get_derivatives` covers Binance USDⓈ-M perpetuals, up to five per call.
157
+
158
+ ## Related Skills
159
+
160
+ - `@traderspy-market-screener` - many coins at once, and backtests of a condition
161
+ - `@traderspy-smart-money` - what tracked top traders hold
162
+ - `@traderspy-position-check` - the same read applied to an open position
@@ -0,0 +1,57 @@
1
+ # Derivatives guide — `get_derivatives`
2
+
3
+ Source: Binance USDⓈ-M perpetual futures public endpoints, snapshot cached 60 s. One entry per
4
+ symbol; an unknown or non-Binance symbol comes back as `{ symbol, error, message }`.
5
+
6
+ ## Fields
7
+
8
+ - `markPrice`, `indexPrice`, `premiumPct` — mark vs index; a persistent positive premium is
9
+ another face of long crowding.
10
+ - `funding`: `rate` (raw, per 8h), `ratePct`, `annualizedPct`, `nextFundingTime`,
11
+ `minutesToNextFunding`, `avg24hPct`, `avg3dPct`, `label`.
12
+ - `openInterest`: `contracts`, `valueUsd`, `change4hPct`, `change24hPct`, `priceChange24hPct`,
13
+ `regime`.
14
+ - `positioning`: `globalLongShortRatio`, `globalLongPct` (all accounts), `topTraderLongShortRatio`,
15
+ `topTraderLongPct` (top traders, by position size), `takerBuySellRatio` (last hour),
16
+ `label`.
17
+ - `notes[]` — the interpretation in sentences; quote them.
18
+
19
+ ## Labels
20
+
21
+ | `funding.label` | Rule (per 8h) | Reading |
22
+ | --- | --- | --- |
23
+ | `extreme_shorts_paying` | ≤ −0.05% | Shorts crowded and paying heavily; squeeze risk |
24
+ | `shorts_paying` | ≤ −0.01% | Shorts paying longs |
25
+ | `neutral` | between −0.01% and +0.03% (Binance's baseline is +0.01%) | No crowding signal |
26
+ | `longs_paying` | ≥ +0.03% | Longs paying shorts — leverage leaning long |
27
+ | `extreme_longs_paying` | ≥ +0.10% | Longs crowded and paying heavily; long-squeeze / flush risk |
28
+
29
+ Quote `annualizedPct` alongside — "0.05%/8h" means little to most readers, "≈ 55% APR" does.
30
+
31
+ | `openInterest.regime` | OI 24h | Price 24h | Reading |
32
+ | --- | --- | --- | --- |
33
+ | `new_longs` | up | up | Fresh money buying; trend being funded |
34
+ | `short_covering` | down | up | Rally driven by shorts closing — less durable |
35
+ | `new_shorts` | up | down | Fresh shorts pressing; trend being funded to the downside |
36
+ | `long_liquidation` | down | down | Longs being flushed — capitulation-type move |
37
+ | `flat` | < 1% OI or < 0.5% price | No meaningful OI story |
38
+
39
+ | `positioning.label` | Rule | Reading |
40
+ | --- | --- | --- |
41
+ | `long_heavy` | long/short ratio ≥ 1.5 (≈ 60%+ long) | Leaders leaning long |
42
+ | `balanced` | between | No lean |
43
+ | `short_heavy` | ratio ≤ 0.67 (≈ 40% or less long) | Leaders leaning short |
44
+
45
+ Top-trader positioning (by position size) is read first because it is the informed cohort; the
46
+ all-account ratio shows the crowd. When they disagree ("top traders 69% long, all accounts 45%
47
+ long"), that disagreement is the interesting sentence.
48
+
49
+ ## Combining with the chart
50
+
51
+ - Chart bullish + `new_longs` + `neutral` funding: a trend with fuel and no crowding.
52
+ - Chart bullish + `extreme_longs_paying`: extended; flush risk is the caveat to state.
53
+ - Chart bearish + `short_covering` bounce: a relief rally, not a reversal, until OI rebuilds.
54
+ - `long_liquidation` with `extreme_shorts_paying` afterwards: the flush may be done; watch whether
55
+ OI rebuilds.
56
+
57
+ These are conventional readings to explain the data, not predictions.
@@ -0,0 +1,47 @@
1
+ # Indicator guide — fields and conventional readings
2
+
3
+ Every indicator object carries `value`, `previous`, `direction` (rising / falling / flat) and
4
+ `series` (history + 1 values, oldest → newest). Extra fields per indicator below. "Reading" is
5
+ the conventional interpretation, not a prediction.
6
+
7
+ | Key | Extra fields | Reading |
8
+ | --- | --- | --- |
9
+ | `rsi` | `period`, `zone` (oversold < 30, neutral, overbought > 70), `divergence` `{type, barsAgo, priceFrom, priceTo, oscillatorFrom, oscillatorTo}` or null | 40–60 is neutral; a rising RSI from 30 is recovering momentum, not "still oversold". A bearish divergence (price higher high, RSI lower high) within the last ~60 bars is worth one sentence |
10
+ | `macd` | `periods {fast, slow, signal}`, `macd`, `signal`, `histogram`, `previous {…}`, `crossover` (bullish / bearish / null — on the latest bar only), `divergence` | Histogram sign + direction is the state (`summary.momentum.macdState`: positive_rising, positive_falling, negative_rising, negative_falling). A cross on the latest bar is an event; report it as such |
11
+ | `ema` / `sma` | `values[] {period, value, previous, direction, priceAbove, distancePct, series}`, `stack` (bullish = fast > mid > slow, bearish, mixed), `pricePosition` (above_all / between / below_all) | Stack + price position is the trend structure. `distancePct` from the 200 is the "how extended" number |
12
+ | `bollinger` | `upper`, `middle`, `lower`, `bandwidthPct`, `percentB`, `position` (above_upper / upper_half / lower_half / below_lower), `squeeze` | %B > 1 or < 0 = outside the bands; `squeeze` true = bands inside the Keltner channel (TTM) — expect expansion, direction unknown |
13
+ | `atr` | `period`, `atrPct` | Volatility in price units and as % of price. A stop tighter than ~1 ATR is inside noise on that timeframe |
14
+ | `adx` | `plusDI`, `minusDI`, `strength` (absent / weak / strong / very_strong), `diBias` (bullish when +DI > −DI) | ADX measures strength, not direction; the DI bias gives the direction |
15
+ | `stochastic` | `k`, `d`, `zone`, `crossover` | < 20 oversold, > 80 overbought; a %K/%D cross inside a zone is the classic trigger |
16
+ | `obv` | `average`, `slopePct`, `divergence` (bullish / bearish / none) | Volume confirmation. `divergence: bullish` = price fell but OBV rose (accumulation). Use the direction and the divergence, not the raw level, which depends on where the window starts |
17
+ | `vwap` | `period`, `priceAbove`, `distancePct` | Rolling VWAP over `period` bars (default 48); above = buyers in control over that window |
18
+ | `cci` | `zone` | > 100 / < −100 = extended |
19
+ | `mfi` | `zone` | Volume-weighted RSI; < 20 / > 80 |
20
+ | `williamsR` | `zone` | −100…0; < −80 oversold, > −20 overbought |
21
+ | `roc` | `period` | % change over the period; sign and direction |
22
+ | `supertrend` | `trend` (up / down), `previousTrend`, `flipped`, `barsSinceFlip`, `distancePct` | A clean trend state with a trailing level; `flipped: true` is an event, `barsSinceFlip` says how mature the trend is |
23
+ | `ichimoku` | `tenkan`, `kijun`, `tkCross`, `tkAboveKijun`, `cloud {spanA, spanB, top, bottom, color}`, `futureCloud {spanA, spanB, color}`, `pricePosition` (above_cloud / in_cloud / below_cloud), `chikouAbovePrice`, `signal` (bullish / bearish / neutral) | Price vs cloud is the trend, `futureCloud.color` is where the cloud is heading, TK cross is the trigger; `signal` is bullish only when all three agree |
24
+ | `keltner` | `periods {ema, atr, multiplier}`, `upper`, `middle`, `lower` | Volatility channel (EMA ± ATR × multiplier); Bollinger inside it is the TTM squeeze |
25
+ | `pivots` | `basis: previous_day`, `source {openTime, high, low, close}`, `pivot`, `r1…r3`, `s1…s3`, `priceAbovePivot`, `nearestResistance`, `nearestSupport` | Classic floor pivots from yesterday's daily candle regardless of the requested timeframe |
26
+ | `levels` | `resistance[]` / `support[]` `{price, touches, swingHighs, swingLows, barsSinceLastTouch, distancePct}`, `range {high, low, positionPct}`, `fibonacci {leg, legStart, legEnd, retracedPct, levels[], nearestAbove, nearestBelow}`, `volumeProfile {poc, pocVolumePct, valueAreaHigh, valueAreaLow, pricePosition, nodes[]}` | More `touches` = more respected level. `range.positionPct` says where price sits in its 300-bar range. The Fibonacci leg is the dominant swing of the lookback; `retracedPct` is how much of it has been given back |
27
+
28
+ ## `summary` fields
29
+
30
+ - `bias`: bullish / bearish / neutral; `score`: signed vote sum (|score| ≥ 30 sets a bias).
31
+ - `trend`: `direction` (up / down / sideways), `strength` (absent / weak / moderate / strong),
32
+ `adx`, `emaStack`, `priceVsEma200`.
33
+ - `momentum`: `rsi`, `rsiZone`, `macdHistogram`, `macdState`.
34
+ - `volatility`: `atrPct`, `atrPercentile` (rank of today's ATR% in the last 100 bars — 90 means
35
+ unusually volatile), `bollingerBandwidthPct`, `state` (compressed / normal / expanded),
36
+ `squeeze`, `squeezeBars`.
37
+ - `volume.ratioVsAverage`: current bar ÷ 20-bar average (the current bar is partial on the live
38
+ candle — a ratio of 0.2 early in a 4h bar is normal).
39
+ - `patterns[]`: `{name, bias, barsAgo}` from 18 candlestick finders (engulfing, hammer, doji
40
+ variants, morning/evening star…). Patterns add notes, not score.
41
+ - `notes[]`: quotable sentences; use them.
42
+
43
+ ## Timeframe defaults that read well
44
+
45
+ - Intraday question → `["15m","1h","4h"]`
46
+ - "How does X look" with no horizon → `["1h","4h","1d"]`
47
+ - Position / investor framing → `["4h","1d"]` plus `levels` and `pivots`
@@ -0,0 +1,156 @@
1
+ ---
2
+ name: traderspy-trading-signals
3
+ description: "Fetch and explain TraderSpy's AI crypto futures signals: entry, take-profit ladder, stop, triggers, status against the live price, and how recent signals resolved. Use for \"latest signals\"."
4
+ category: finance
5
+ risk: safe
6
+ source: "https://github.com/target1m/traderspy-mcp/tree/069aae5a84640d671f92705a2e3bc0b62efca1e0/skills/trading-signals"
7
+ source_repo: target1m/traderspy-mcp
8
+ source_type: official
9
+ date_added: "2026-09-25"
10
+ author: target1m
11
+ tags: [traderspy, crypto, trading-signals, 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 Trading Signals
18
+
19
+ TraderSpy's AI signals are automated reads of the market: a named preset fires when several
20
+ technical conditions line up on one crypto futures pair, a validator scores the alignment, and
21
+ the published signal carries an entry, a take-profit ladder, a stop and — later — what actually
22
+ happened. The signals feed at https://traderspy.app/signals publishes every one with its resolved
23
+ outcome. Your job is to fetch,
24
+ translate and contextualise them; the decision stays with the user.
25
+
26
+ ## When to Use
27
+
28
+ - Use when the user mentions crypto signals, AI alerts, "any setups", "what is the AI seeing", long or short ideas, or TraderSpy alerts, even without the word "signal".
29
+ - Use to explain one signal's entry, take-profit and stop levels and the conditions that triggered it, or whether it still stands at the current price.
30
+ - Use when the user asks how signals have resolved (hits vs stops) over the last 4h to 7d.
31
+ - Not for placing trades (no tool can), not for top-trader positioning (`@traderspy-smart-money`), not for indicator reads on a coin (`@traderspy-technical-analysis`).
32
+
33
+ ## Tools
34
+
35
+ | Tool | Use it for | Key arguments |
36
+ | --- | --- | --- |
37
+ | `get_signals` | The list: newest first | `limit` 1–50 (default 20), `skip`, `importance` high / medium / low / all, `coin` |
38
+ | `get_signal_details` | One signal in full, plus the live price | `signalId` (the `id` from the list) |
39
+ | `get_signal_stats` | Aggregate hit rate over a window | `period` 4h / 8h / 24h / 7d |
40
+
41
+ Three argument behaviours that are easy to get wrong:
42
+
43
+ - **`importance` is inclusive downward.** `high` returns high only, `medium` returns high AND
44
+ medium, `low` returns everything. To show "medium and above" pass `medium`, not `low`.
45
+ - **`coin` is a prefix match** on the pair name. `BTC` matches `BTCUSDT` and also `BTCDOMUSDT`;
46
+ check the `coin` field of each row before presenting "BTC signals".
47
+ - **`limit` is what gets rendered.** In hosts that draw signal cards, every fetched row becomes a
48
+ card. If the user asks for "the last 5", pass `limit: 5` — do not fetch 20 and show 5.
49
+
50
+ ## What a signal row contains
51
+
52
+ `strategyName` (the preset, e.g. "OBV Divergence Buy (4H)") · `action` buy / sell · `timeframe`
53
+ 1h / 4h / 1d · `price` at trigger · `targets[]` as `{label, type, pct}` where `pct` is measured from
54
+ `price` · `triggeredConditions[]` in plain language · `importance` · `signalStrength` weak /
55
+ moderate / strong / very_strong · `resolutionStatus` · `createdAt`.
56
+
57
+ Convert target percentages to prices before showing them — users think in prices:
58
+
59
+ - buy: TP = price × (1 + pct/100), SL = price × (1 − pct/100)
60
+ - sell: TP = price × (1 − pct/100), SL = price × (1 + pct/100)
61
+ - reward-to-risk at TP1 = TP1 pct ÷ SL pct (a 0.7 R:R is normal for this system, whose first target
62
+ sits close to entry; read it together with the hit rate from `get_signal_stats`, and do not call a
63
+ sub-1 R:R "bad" on its own).
64
+
65
+ `resolutionStatus` is the outcome so far:
66
+
67
+ | Status | Meaning |
68
+ | --- | --- |
69
+ | `pending` | Still inside its tracking window, nothing hit yet |
70
+ | `tp1_hit` / `tp2_hit` / `tp3_hit` | Highest take-profit reached (a later stop touch does not downgrade it) |
71
+ | `profit_locked` | Trend exhaustion detected before TP1; a partial gain was locked |
72
+ | `stop` | Stop level touched before any take-profit |
73
+ | `expired` | Window ended with neither side touched |
74
+
75
+ Outcomes are judged on 1-minute wicks, so "TP1 hit" means price actually traded there. The
76
+ tracking window is 24 × the signal timeframe (24h for a 1h signal, 4 days for a 4h signal); a 1h
77
+ signal that is still `pending` two days later is stale rather than alive.
78
+
79
+ ## Workflows
80
+
81
+ **"Latest signals" / "any setups?"** → `get_signals` with the limit the user implies (default 10 if
82
+ they gave no number). Lead with the newest, group by side if several, and make the resolved ones
83
+ visible — a list that mixes three winners, two stops and five pending rows should say so.
84
+
85
+ **"Signals for SOL"** → `get_signals` with `coin`. If the result is empty, say there is no recent
86
+ signal on that pair rather than offering a different pair as if it were the same thing.
87
+
88
+ **"Is this signal still valid?" / "Should I still care about it?"** → `get_signal_details`, then
89
+ compare `livePrice` with the entry, TP1 and SL in the same units:
90
+
91
+ - distance from entry in % (signed the way the trade wants it: for a buy, positive = in profit)
92
+ - whether a level has already been crossed (a `pending` buy with `livePrice` below the SL price
93
+ is finished in everything but paperwork — say so)
94
+ - `history.highestPrice` / `lowestPrice` show the best and worst it has seen since entry
95
+ - `indicatorValues` are the readings at trigger time, not now; if the user wants the current
96
+ picture, hand off to technical-analysis rather than re-reading stale values as if they were live
97
+
98
+ **"How are the signals doing?"** → `get_signal_stats`. Explain the number honestly: `winRate` is
99
+ hits ÷ (hits + stops) over signals CREATED in the window, so it ignores `pending` rows, and a 4h
100
+ window is a handful of signals. Prefer `7d` for a track-record question and say how many signals
101
+ it rests on (`total`, `pending`).
102
+
103
+ ## Presenting
104
+
105
+ For a list, ALWAYS use a compact table and keep one signal per row:
106
+
107
+ | Coin | Side | TF | Entry | TP1 | SL | Preset | Status | Age |
108
+
109
+ For one signal, use this order: headline (coin, side, timeframe, preset, importance) → the levels
110
+ as prices with the % in brackets → what triggered it (the `triggeredConditions`, lightly
111
+ rephrased) → where price is now versus entry / TP1 / SL → the outcome so far → the one-line risk
112
+ note. Quote `livePrice` with its timestamp when the answer depends on it.
113
+
114
+ Do not invent an "AI review" if `aiReview` is null — most signals do not carry one. When it exists,
115
+ report `score` and `decision` as the reviewer's opinion, not as a verdict.
116
+
117
+ ## Conduct
118
+
119
+ - These are indicator alignments with published outcomes, not instructions. Report what the
120
+ signal says, what has happened to it and what has happened to signals like it; if the user asks
121
+ whether to take it, lay out what supports and what undercuts it and hand the decision back. Never
122
+ tell the user to buy, sell, size or leverage.
123
+ - Historical hit rates describe the sample they were computed on. Never present a win rate as a
124
+ forecast or imply any outcome is assured.
125
+ - Nothing in this connector trades. There is no order, close, transfer or withdrawal tool, by
126
+ design. If asked to execute, say so plainly; the decision and the trade stay with the user.
127
+ - Every number comes from a tool result; if a field is null, say it is unavailable rather than
128
+ estimating it.
129
+ - When the answer is about a specific trade idea, end with one plain sentence that crypto
130
+ derivatives are high-risk and this is market information, not financial advice. Once per answer
131
+ is enough.
132
+
133
+ For the full field glossary, including the `indicatorValues` keys, read
134
+ `references/signal-fields.md`.
135
+
136
+ ## Examples
137
+
138
+ ```text
139
+ Show me the latest AI signals.
140
+ Any signals on SOL right now?
141
+ Is the latest BTC signal still valid? Show me where price is against its entry, targets and stop.
142
+ How have the signals resolved over the last 7 days?
143
+ ```
144
+
145
+ ## Limitations
146
+
147
+ - 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.
148
+ - Tool calls are metered per day: 300 on the free tier, 5,000 on premium.
149
+ - Every tool is read-only. Nothing here places, closes or modifies an order, and there is no withdrawal or transfer tool.
150
+ - The output is market data and analysis for the user's own research, not investment advice.
151
+ - Covers TraderSpy's own AI signals only. Signal statistics describe signals that already resolved; they are not a forecast.
152
+
153
+ ## Related Skills
154
+
155
+ - `@traderspy-technical-analysis` (called `technical-analysis` in the text above, its upstream ID) - the current chart read on the signal's coin
156
+ - `@traderspy-market-briefing` - the freshest signals inside a market overview
@@ -0,0 +1,64 @@
1
+ # Signal field glossary
2
+
3
+ ## `get_signals` → `data[]`
4
+
5
+ | Field | Type | Notes |
6
+ | --- | --- | --- |
7
+ | `id` | string | Pass to `get_signal_details` |
8
+ | `strategyName` | string | Preset display name. The timeframe is usually in the name, e.g. "(4H)" |
9
+ | `importance` | high / medium / low | Preset tier, not a per-signal confidence |
10
+ | `action` | buy / sell | Direction |
11
+ | `signalStrength` | weak / moderate / strong / very_strong | How many optional conditions matched; capped at `strong` unless the entry was fresh |
12
+ | `coin` | string | Binance Futures pair, e.g. `WCTUSDT` |
13
+ | `timeframe` | 1h / 4h / 1d | Chart timeframe the preset evaluated |
14
+ | `price` | number | Price when the signal was published; targets are measured from it |
15
+ | `targets[]` | `{label, type, pct}` | `type` is `tp1` / `tp2` / `tp3` / `sl`; `pct` is unsigned distance from `price` |
16
+ | `triggeredConditions[]` | string | Plain-language conditions that fired, e.g. "Volume 2.2x average" |
17
+ | `resolutionStatus` | see table in SKILL.md | `pending` when nothing has resolved yet |
18
+ | `createdAt` | ISO date | Publication time |
19
+
20
+ `pagination` = `{ limit, skip, total, hasMore }`. `total` is the count matching the filter — it is
21
+ the size of the whole public archive when no filter is given, not "signals today".
22
+
23
+ ## `get_signal_details` adds
24
+
25
+ | Field | Notes |
26
+ | --- | --- |
27
+ | `livePrice` | Current price of the pair at call time — the number that decides whether the idea still stands |
28
+ | `indicatorValues` | Readings captured at trigger time. Common keys: `rsi`, `macd_histogram`, `adx`, `obv_slope`, `obv_flow_pct`, `volume_ratio`, `williams_r`, plus `validation_*` keys written by the publisher's scoring pass (`validation_score` 0–100, `validation_confidence`, `validation_rsi`, `validation_atr_pct`, `validation_btc_trend_1d`, `validation_btc_rsi_4h`, `validation_directional_move_pct` = how far price had already moved in the trade's direction when it was published) |
29
+ | `aiReview` | `{ score, decision, analysis }` or null. Null is the normal case |
30
+ | `history.entryPrice` | Price at entry (equals `price` unless recalibrated) |
31
+ | `history.currentPrice` | Last tracked price; may be null on a fresh signal |
32
+ | `history.highestPrice` / `lowestPrice` | Extremes seen since entry on 1-minute data |
33
+ | `history.resolution` | `{ status, price, time }` once resolved; `price` is the level that was hit, so realised move = (resolution.price − entryPrice) / entryPrice, sign-flipped for sells |
34
+
35
+ Interpretation notes:
36
+
37
+ - `validation_score` around 70–80 has historically been the sweet spot; the very highest scores
38
+ tended to be late entries. Do not rank signals by score alone.
39
+ - `validation_directional_move_pct` above ~1.5% means the move was already under way at
40
+ publication — worth mentioning as "the entry chased the move".
41
+ - The published TP2/TP3 are a ladder (≈1.7× and 2.4× TP1); they exist so a winner can be
42
+ graded beyond TP1, not as three independent forecasts.
43
+
44
+ ## `get_signal_stats`
45
+
46
+ `{ total, targetHits, stopped, pending, highCount, winRate }` over signals created in the period.
47
+
48
+ - `targetHits` counts `tp1_hit`, `tp2_hit`, `tp3_hit` and `profit_locked`.
49
+ - `pending` = total − hits − stops (so it also contains `expired` rows).
50
+ - `winRate` = round(hits ÷ (hits + stops) × 100), null when nothing has resolved.
51
+ - `highCount` = how many were high importance.
52
+
53
+ The 4h and 8h windows are small samples; treat single-digit `total` as noise.
54
+
55
+ ## Resolution mechanics worth knowing
56
+
57
+ - Tracking window = 1×, 4× and 24× the signal timeframe (1h → 1h/4h/1d; 4h → 4h/16h/4d).
58
+ - TP and SL are judged on 1-minute highs/lows starting the minute after entry; on a same-minute
59
+ ambiguity the stop is recorded first (conservative).
60
+ - TP2 and TP3 count only after TP1; after TP1 a later stop touch does not downgrade the result.
61
+ - `profit_locked` is set when a trend-exhaustion check fires before TP1 and locks a partial gain.
62
+ - Only a subset of signals is ever marked `expired`; a signal that finishes its window untouched
63
+ can stay `pending` indefinitely. Treat old `pending` rows as roughly flat outcomes, not as open
64
+ ideas.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: unified-ai-gateway
3
- description: Operate and evaluate Unified AI System through nine governed MCP tools, including provider-free prompt enhancement, while preserving fake-provider, authorization, and evidence boundaries.
3
+ description: Operate and evaluate Unified AI System through fifteen governed MCP tools, including provider-free prompt enhancement, while preserving fake-provider, authorization, and evidence boundaries.
4
4
  category: ai-ml
5
5
  risk: critical
6
6
  source: https://github.com/happy520ai/unified-ai-system/tree/master/skills/unified-ai-gateway
@@ -35,7 +35,7 @@ review is required before changing this pinned procedure.
35
35
  ## Prerequisites And Setup
36
36
 
37
37
  1. Confirm that Codex CLI and Docker are installed and Docker is running.
38
- 2. If the nine tools are already visible, skip setup and do not register a
38
+ 2. If the 15 tools are already visible, skip setup and do not register a
39
39
  duplicate server.
40
40
  3. Explain the first stage: it downloads one reviewed platform from the
41
41
  immutable `0.4.9` multi-platform index into Docker's cache, inspects its
@@ -133,7 +133,7 @@ codex mcp get unified-ai-system --json
133
133
  ```
134
134
 
135
135
  8. Restart Codex or open a new task, then use `/mcp verbose` to confirm that all
136
- nine tools are available. Remove the registration when it is no longer
136
+ 15 tools are available. Remove the registration when it is no longer
137
137
  wanted:
138
138
 
139
139
  ```bash
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-skills-collection",
3
- "version": "4.0.73",
3
+ "version": "4.0.75",
4
4
  "description": "OpenCode CLI plugin that automatically downloads and keeps skills up to date.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",