Polyhub-skills polyhub_discover
Explore public discover data on Polyhub without API key auth, including tags, trader rankings, trader detail stats, and market tag lookup.
git clone https://github.com/HubbleVision/polyhub-skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/HubbleVision/polyhub-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/openclaw/skills/polyhub_discover" ~/.claude/skills/hubblevision-polyhub-skills-polyhub-discover-7ef7f8 && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/HubbleVision/polyhub-skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/openclaw/skills/polyhub_discover" ~/.openclaw/skills/hubblevision-polyhub-skills-polyhub-discover-7ef7f8 && rm -rf "$T"
openclaw/skills/polyhub_discover/SKILL.mdPolyhub Discover Skill
Version: v0.3.8
When to use
Use this skill when the user asks about:
- Discover page tag list
- Trader rankings on the discover page
- Cross-tag discover queries
- Filtering and sorting discover traders
- Looking up a trader by address
- Looking up market tags by condition IDs
Requirements
must be available in the runtime environmentcurl
POLYHUB_API_BASE_URL is fixed to https://polyhub.skill-test.bedev.hubble-rpc.xyz.
This skill does not require
POLYHUB_API_KEY.
Safety rules
- These are public read-only endpoints. No confirmation step is required.
- Do not invent filter values. Only pass filters the user requested.
- Prefer building query strings from explicit user intent.
- When querying by address, trim whitespace and keep the original checksum/casing if provided.
Display rules
- The API returns
as an internal tag name. When presenting results to the user, always display it as All Markets (or 全部市场 in Chinese context). Never show the rawALL-HUBBLE
string to the user.ALL-HUBBLE
Tools
Use the
bash tool to call the API with curl.
Fast Path
For common intents, map user requests like this:
- “discover 页有哪些标签” ->
GET /api/v1/markets/tags - “看某个 tag 的 trader 排行” ->
GET /api/v1/traders-v2/?tag=... - “跨 tag 找高手” ->
GET /api/v1/traders-v2/?tag=CROSS-TAG - “看某个地址在各标签下的数据” ->
GET /api/v1/traders/by-address?user_id=... - “查 condition id 对应什么标签” ->
GET /api/v1/markets/by-condition-ids?ids=...
Curl base setup
BASE="https://polyhub.skill-test.bedev.hubble-rpc.xyz"
Tags
Action: List discover tags
GET /api/v1/markets/tags- Auth: public
curl -sS --fail-with-body "$BASE/api/v1/markets/tags"
Use this when the user wants the discover page tag list or wants to browse available niches first.
Trader Rankings
Action: List traders for discover
GET /api/v1/traders-v2/- Auth: public
Core query params:
— requiredtag
— required:time_range
orall30d
— optional, defaultlimit
, max10100
— optional, defaultoffset0
— optional:filterBots
or01
— optional:sort_by
,volume
,pnl
,roi
,avg_adt
,trade_count_30
,ev_per_boughttiming_score
— optional:sort_direction
orascdesc
Range filter params:
,pnl_minpnl_max
,volume_minvolume_max
,roi_minroi_max
,avg_adt_minavg_adt_max
,trade_count_30_mintrade_count_30_max
,ev_per_bought_minev_per_bought_max
,timing_score_mintiming_score_max
Validation:
is requiredtag
must betime_range
orall30d
should be betweenlimit
and1100
should beoffset
or greater0
should befilterBots
or01
Example: standard discover query
curl -sS --fail-with-body \ "$BASE/api/v1/traders-v2/?tag=Politics&time_range=all&limit=10&offset=0"
Example: cross-tag query
curl -sS --fail-with-body \ "$BASE/api/v1/traders-v2/?tag=CROSS-TAG&time_range=30d&limit=20&offset=0"
Example: filtered and sorted query
curl -sS --fail-with-body \ "$BASE/api/v1/traders-v2/?tag=Sports&time_range=30d&filterBots=1&pnl_min=1000&trade_count_30_min=30&sort_by=ev_per_bought&sort_direction=desc"
Guidance:
- Use
when the user wants discover results across all tags.tag=CROSS-TAG - Use
when the user asks for recent performance.time_range=30d - Use
when the user explicitly wants bot filtering.filterBots=1 - Prefer
unless the user explicitly wants ascending order.sort_direction=desc
Trader Detail
Action: Get trader stats by address
GET /api/v1/traders/by-address- Auth: public
Required query params:
— trader wallet addressuser_id
Optional query params:
— if supported by caller flowtime_range
curl -sS --fail-with-body \ "$BASE/api/v1/traders/by-address?user_id=0x1234..."
Use this when the user clicks into a trader from discover and wants stats across tags.
Market Tag Lookup
Action: Get market tags by condition IDs
GET /api/v1/markets/by-condition-ids- Auth: public
Required query params:
— comma-separated condition ID listids
Validation:
must not be emptyids- The backend supports up to
IDs per request200
curl -sS --fail-with-body \ "$BASE/api/v1/markets/by-condition-ids?ids=0xabc,0xdef"
Use this when the user wants to map market condition IDs back to discover tags.
Strategy: Find Profitable Traders
When the user asks to find traders worth copying (e.g. "帮我找值得跟单的地址", "find me smart money", "谁在赚钱"), follow this multi-step process:
Step 1: Query top traders
Choose the scope based on user intent:
- If user specifies a tag (e.g. "Sports"), use that tag
- If user wants broad search, use
tag=CROSS-TAG - Always use
unless user asks for all-timetime_range=30d
Default filters (user can override any):
(exclude bots)filterBots=1
(minimum $5K profit in 30 days)pnl_min=5000
(at least slightly positive alpha)timing_score_min=52
(enough trades for statistical significance)trade_count_30_min=30
,sort_by=ev_per_bought
(rank by expected return per dollar)sort_direction=desclimit=15
curl -sS --fail-with-body \ "$BASE/api/v1/traders-v2/?tag=Sports&time_range=30d&filterBots=1&pnl_min=5000&timing_score_min=52&trade_count_30_min=30&sort_by=ev_per_bought&sort_direction=desc&limit=15"
Step 2: Identify hot sub-tags
From Step 1 results, note which tags appear frequently in top results. Common valuable sub-tags under Sports: Soccer, Premier League, UCL, NBA, NHL, Liga MX, Argentina Primera División.
Then query those specific sub-tags with the same filters to find specialists:
curl -sS --fail-with-body \ "$BASE/api/v1/traders-v2/?tag=Soccer&time_range=30d&filterBots=1&pnl_min=5000&timing_score_min=52&trade_count_30_min=10&sort_by=ev_per_bought&sort_direction=desc&limit=10"
Step 3: Cross-validate with by-address
For top 3-5 candidates, call by-address to see their performance across ALL tags:
curl -sS --fail-with-body \ "$BASE/api/v1/traders/by-address?user_id=0x..."
Evaluation criteria (prioritized):
- Multi-tag consistency: Strong in 3+ sub-tags beats one-hit wonder
- Alpha Score > 55: Indicates buy-low-sell-high timing ability (higher = better)
- EV/Bought > 0.25: Good expected return per dollar invested
- 30D trades >= 30: Statistically reliable sample size
- Positive 30D PnL across tags: Not just one lucky market
Disqualify if:
- ALL-HUBBLE EV < 0.1 (too many low-quality trades overall)
- Only one sub-tag has positive PnL (single-market luck)
- Alpha = 50 exactly in main tag (no timing edge)
Step 4: Present results and handoff
Present ranked results in this format:
🏆 推荐跟单地址 1. 0x{address} 📊 Sports 30D: PnL ${pnl}, EV/Bought {ev}, Alpha {alpha} 📈 强势子标签: {subtag1} (EV {ev1}), {subtag2} (EV {ev2}) 🔗 详情: https://polyhub.hubble.xyz/trader/{address} 想跟单哪个? A) 我直接帮你创建跟单任务(通过 polyhub_copy skill,需要 API key) B) 打开网页操作: https://polyhub.hubble.xyz/discover?copy={address}&tag={tag}
Parameter override examples
- "PnL 至少 1 万" →
pnl_min=10000 - "要更活跃的" →
trade_count_30_min=100 - "Alpha 要高" →
timing_score_min=60 - "我要看机器人" →
filterBots=0 - "看全量数据" →
time_range=all
Empty results fallback
If a query returns zero results, progressively loosen filters:
- Reduce
to 1000pnl_min - Reduce
to 10trade_count_30_min - Remove
timing_score_min - Broaden to
if using a niche sub-tagtag=CROSS-TAG
Handoff to Copy
After the user selects an address to copy:
- Preferred: Skill 直接创建 — If
is configured, usePOLYHUB_API_KEY
skill's "Quick Copy from Discover" flow:polyhub_copy- Check balance via
GET /api/v1/portfolio/stats - If balance sufficient →
withPOST /api/v1/copy-tasks
and optionaltargetTraderfilteredByTag - If balance insufficient → direct user to deposit on the web (skill cannot deposit):
https://polyhub.hubble.xyz/copy-history?action=deposit
- Check balance via
- Fallback: 网页端跟单 — Provide the deep link:
https://polyhub.hubble.xyz/discover?copy={address}&tag={tag} - Always show the trader detail page link:
https://polyhub.hubble.xyz/trader/{address}
Note: Depositing funds is only possible via the web UI, not through any skill or API.
Error handling
: Invalid query parameters such as missing400
, invalidtag
, or emptytime_rangeids
: Backend query failed or service unavailable500