🧪 Skills

Polymarket Intelligence Skill

Monitor Polymarket prediction markets, spot mispricings between crowd probabilities and real-world evidence, track whale positioning from the top-50 leaderbo...

v1.0.3
❤️ 0
⬇️ 33
👁 1
Share

Description


name: pkedge description: "Monitor Polymarket prediction markets, spot mispricings between crowd probabilities and real-world evidence, track whale positioning from the top-50 leaderboard wallets, and detect fresh wallet insider signals. Supports four modes: SCAN (daily digest of flagged markets), DEEP DIVE (full single-market analysis with web search evidence), WHALE WATCH (consensus detection across top trader positions), and INSIDER WATCH (fresh wallet large-position detection)." homepage: https://polymarket.com metadata: { "openclaw": { "emoji": "📈", "requires": { "bins": ["curl", "node"], "env": ["PKEDGE_TELEGRAM_TOKEN_FREE", "PKEDGE_TELEGRAM_CHAT_FREE", "PKEDGE_TELEGRAM_TOKEN_TRADER", "PKEDGE_TELEGRAM_CHAT_TRADER"] } } } version: 1.1.0 author: pkedge license: MIT

PKEdge — Polymarket Intelligence Skill

Overview

PKEdge is an OpenClaw skill that monitors Polymarket prediction markets, spots mispricings between crowd probabilities and real-world evidence, tracks whale positioning from top-50 leaderboard wallets, and detects fresh wallet insider signals. It operates in four modes: SCAN, DEEP DIVE, WHALE WATCH, and INSIDER WATCH.

Intel only. Never recommends trading. Always appends "Not financial advice. DYOR."

Schedule:

  • 8:00 AM ET — Daily SCAN digest (Trader + Free channels)
  • 8:05 AM ET — Morning Whale Watch, 48h lookback (Trader only)
  • 8:10 AM ET — Morning Insider Watch, 48h lookback (Trader only)
  • 4:00 PM ET — Afternoon Whale Watch, 24h lookback (Trader only)
  • 4:05 PM ET — Afternoon Insider Watch, 24h lookback (Trader only)
  • Every 30 min — Real-time consensus alert when 3+ whales enter the same market
  • Every 30 min — Real-time insider alert when fresh wallet drops >$50K on one market

Install

  1. cd into the skill folder and run npm install
  2. Create a .env file with your Telegram credentials:
    • PKEDGE_TELEGRAM_TOKEN_FREE — bot token for the free channel
    • PKEDGE_TELEGRAM_CHAT_FREE — chat ID for the free channel
    • PKEDGE_TELEGRAM_TOKEN_TRADER — bot token for the trader channel
    • PKEDGE_TELEGRAM_CHAT_TRADER — chat ID for the trader channel
  3. Run node cron.js to start scheduled jobs, or configure launchd to run on boot

Trigger Phrases

Claude activates this skill when the user says anything matching these patterns:

SCAN mode

  • "pkedge scan"
  • "run the pkedge scan"
  • "prediction market scan"
  • "polymarket scan"
  • "what markets are flagged today"
  • "pkedge morning digest"

DEEP DIVE mode

  • "pkedge deep dive [question or topic]"
  • "analyze this market: [question]"
  • "pkedge analyze: [question]"
  • "what does pkedge think about [topic]"
  • "is [market question] mispriced"
  • "/deepdive [question]"

WHALE WATCH mode

  • "pkedge whale watch"
  • "whale watch"
  • "what are the whales doing"
  • "polymarket whale positions"
  • "pkedge whales"

INSIDER WATCH mode

  • "pkedge insider watch"
  • "insider watch"
  • "fresh wallet alert"
  • "any insider activity"
  • "pkedge insiders"
  • "suspicious wallets"
  • "new money polymarket"

File Locations

~/Projects/pkedge/
  fetch.js      — all Polymarket API calls (no auth required)
  analyze.js    — scoring, flagging, conviction logic
  formatter.js  — Telegram message templates
  deliver.js    — sends to Telegram channels
  cron.js       — scheduled runner

Mode: SCAN

Purpose: Fetch the top 200 active Polymarket markets by volume, flag anomalies, rank them, deliver the digest.

Step-by-step:

  1. Call fetchActiveMarkets() from fetch.js

    • Returns normalized market objects with yesPrice, noPrice, volume, volume24hr, endDate
    • Filters to markets with >$10K all-time volume
  2. Call runScanFlags(markets) from analyze.js

    • Applies 5 flags: VOLUME_SURGE, SPREAD_ANOMALY, VOLUME_SPIKE, EXTREME_LOW/HIGH, RESOLVING_SOON
    • Each flag carries a point value; scanScore is the sum
    • Returns flagged markets sorted by score descending
  3. For the top 5 flagged markets, call web search on each question to check for recent news

    • Search: "[market question]" news today
    • Note any breaking news, resolution events, or catalysts
    • Add this context to the evidence for each market
  4. Call formatScanDigest(flaggedMarkets, 5) from formatter.js for Trader channel

  5. Call formatScanPreview(flaggedMarkets[0]) from formatter.js for Free channel

  6. Deliver via deliver.js sendToTrader() and sendToFree()

Output shape:

🔍 PKEdge Morning Scan — Mon, Mar 9, 2026
_5 markets flagged from top 200 by volume_
──────────────────────
1. *Will the Fed cut rates at the March 2026 meeting?*
   🔥 HIGH  Crowd: YES 23.1%  |  24h Vol: $142K  |  Score: 7
   👀 Volume spike: 4.2x average daily volume — unusual activity
   ⏰ Resolves in 3.2 days
...

Mode: DEEP DIVE

Purpose: Full analysis of a single market. Claude reasons over crowd probability vs. real-world evidence, assesses fair value, and outputs a structured Crowd vs. Reality report.

Step-by-step:

  1. Parse the market question from the user input

  2. Call searchMarkets(query) from fetch.js to find the matching Polymarket market

    • If multiple results, pick the one with the highest volume
    • If zero results, tell the user no matching market was found on Polymarket
  3. Fetch enriched market data:

    • fetchPriceHistory(market.id, '1d') — get price history with daily candles (note: '1d' sets candle granularity, not lookback window; the API returns available history for the market)
    • fetchBookDepth(market.clobTokenIds[0]) — get order book depth (YES token)
    • Compute price velocity from history: (most recent price − price from ~24h prior) in percentage points
  4. Call analyzeMarket(market, bookDepth) from analyze.js

    • Returns analysis object with flags, spread note, resolution note, volume note
  5. Web search × 3 to gather evidence:

    • Search 1: "[market question]" news [current month year]
    • Search 2: [core topic] forecast prediction [current year]
    • Search 3: [core topic] expert analysis probability
    • Synthesize key findings into 3–5 bullet points (each max 1 sentence)
  6. Estimate fair value:

    • Based on web search evidence, base rates, and any quantitative anchors found
    • Express as a probability range: e.g., "52–60% YES"
    • Use the midpoint for conviction calculation
  7. Call computeConviction(crowdPct, fairPct) from analyze.js

    • Returns { delta, direction, conviction: HIGH/MEDIUM/LOW, label }
  8. Call formatDeepDive(analysis, conviction, evidenceLines) from formatter.js

  9. Deliver via sendToTrader() (Deep Dive is Trader-only)

Output shape:

🧠 PKEdge Deep Dive
_Mar 9, 2026_
──────────────────────
*Will the Fed cut rates at the March 2026 meeting?*

CROWD PRICE
YES: 23.1%  |  NO: 76.9%

MARKET DATA
⏰ Resolves in 3.2 days
💰 All-time: $2.1M  |  24h: $142K
👀 Spread: 1.2¢ (bid 0.229 / ask 0.241)
✅ Order book: DEEP ($340K within 10¢)

EVIDENCE
✅ Fed funds futures pricing ~18% probability of March cut as of today
✅ Powell speech last week signaled patience — no urgency to cut
✅ February CPI came in at 2.9%, above 2% target
✅ No emergency FOMC meeting called — standard meeting format
✅ Metaculus consensus: 15-22% YES

──────────────────────
PKEDGE ASSESSMENT
🔥 Conviction: HIGH
Direction: NO underpriced
Delta: 18 percentage points from crowd
_Crowd is 18 pts away from fair value — strong signal_

`Not financial advice. DYOR. Prediction markets carry risk.`

Mode: WHALE WATCH

Purpose: Monitor top-50 Polymarket traders by all-time profit for new positions. Detect consensus (3+ whales entering the same market) and fire real-time alerts.

Runs twice daily:

  • 8:05 AM ET — 48h lookback window. Catches anything that moved overnight or over the weekend.
  • 4:00 PM ET — 24h lookback window. Covers the full trading day.

Step-by-step:

  1. Call fetchLeaderboard(50) from fetch.js

    • Returns top 50 wallets by all-time profit
    • Each entry has: address, name (if set), pnl, volume
  2. Extract all wallet addresses and call fetchMultiWalletPositions(addresses)

    • This loops through all 50 wallets with a 150ms delay between calls
    • Returns a Map of address → positions[]
  3. Call buildWhaleReport(leaderboard, walletPositions, windowHours) from analyze.js

    • Morning run (8:05 AM): pass 48 as windowHours — covers overnight + weekend
    • Afternoon run (4:00 PM): pass 24 as windowHours — covers the trading day
    • Filters to positions opened within the window with >$1K value
    • Detects consensus: 3+ whales in the same market
    • Sorts by position size and consensus count
  4. Call formatWhaleWatch(report) from formatter.js

  5. Deliver via sendToTrader()

  6. For any consensus markets not yet alerted today:

    • Call formatWhaleAlert(consensusMarket, latestPosition) from formatter.js
    • Deliver as an immediate alert (separate message, not part of digest)
    • Mark as alerted in the dedup set

Output shape:

🐋 PKEdge Whale Watch — Mon, Mar 9, 2026
_Top 50 traders scanned | Last 24h_
──────────────────────
🔥 CONSENSUS DETECTED (1 market)

1. *Will the Fed cut rates at the March 2026 meeting?*
   🐋x4 whales  |  💰$48K combined  |  Direction: *NO*
   _PredictWiz, 0x4f2a…1b3c, MarketMaker99 +1 more_

──────────────────────
NEW POSITIONS (6 total)

🐋 *PredictWiz*  →  NO
   _Will the Fed cut rates at the March 2026 meeting?_
   $22K @ 77¢  |  2h ago
...

Mode: INSIDER WATCH

Purpose: Detect fresh wallets placing unusually large positions — a classic signal of informed trading. Insiders often create new wallets specifically to avoid leaderboard detection. Two or more fresh wallets entering the same market within 6 hours is treated as a coordinated signal.

Fresh wallet definition:

  • Wallet age < 30 days (based on first trade timestamp)
  • Total lifetime trade count < 20
  • Single position size > $5K

Alert tiers:

  • $5K single position = 👀 WATCH (held for digest)

  • $25K single position = ⚠️ ALERT (held for digest)

  • $50K single position = 🚨 IMMEDIATE (fires real-time, does not wait for digest)

  • 2+ fresh wallets same market within 6h = 🚨 COORDINATED (fires real-time regardless of size)

Runs twice daily:

  • 8:10 AM ET — 48h lookback
  • 4:05 PM ET — 24h lookback
  • Every 30 min — real-time scan for >$50K single fresh wallet drops (lower amounts held for digest)

Step-by-step:

  1. Call fetchActiveMarkets() — sort by 24h volume, take top 30 as scan targets

  2. Call fetchLeaderboard(50) — build a Set of known addresses to exclude

  3. For each top market, call fetchRecentTrades(market.clobTokenIds[0], windowHours) from fetch.js

    • Collect unique maker/taker addresses from trades
    • Filter to trades with sizeUSD > $5K
    • Exclude addresses in the leaderboard Set
  4. For each unknown address with a qualifying trade, call fetchWalletProfile(address) from fetch.js

    • Returns { firstTradeAt, tradeCount, totalVolume }
    • Flag as fresh if: wallet age ≤ 30 days AND tradeCount ≤ 20
  5. Call buildInsiderReport(freshSignals, windowHours) from analyze.js

    • Groups fresh wallet positions by market
    • Detects coordinated entries: 2+ fresh wallets same market within 6h
    • Scores each signal (see Scoring Reference)
    • Returns: { signals, coordinatedMarkets, immediateAlerts }
  6. Call formatInsiderWatch(report) from formatter.js

  7. Deliver via sendToTrader()

  8. For IMMEDIATE-tier (>$50K) or COORDINATED signals not yet alerted today:

    • Call formatInsiderAlert(signal, isCoordinated) from formatter.js
    • Deliver as a real-time alert
    • Mark in the dedup set

Output shape — daily digest:

🕵️ PKEdge Insider Watch — Mon, Mar 9, 2026
_Unknown wallets scanned | Last 24h_
──────────────────────
🚨 COORDINATED SIGNAL (1 market)

*Will the Fed cut rates at the March 2026 meeting?*
   🆕x2 fresh wallets  |  💰$61K combined  |  Direction: *NO*
   _First two entered within 2h of each other_
   Wallet: 0x7c3b…9a12 — Age: 4 days | 3 trades | $38K → NO
   Wallet: 0x2d1f…4e87 — Age: 11 days | 7 trades | $23K → NO

──────────────────────
WATCH LIST (3 signals)

👀 *Fresh wallet — 0x9f4a…2c31*
   _Will Trump win the 2026 midterms?_
   $8K → YES @ 41¢  |  6h ago
   Age: 18 days | 12 trades lifetime

`Not financial advice. DYOR. Fresh wallet signals are circumstantial.`

Output shape — real-time alert:

🚨 PKEdge Insider Alert
_Fresh wallet just dropped big money_

*Will the Fed cut rates at the March 2026 meeting?*
Direction: NO  |  Size: $38K @ 77¢
Wallet: `0x7c3b…9a12`
Age: 4 days  |  3 trades lifetime

`Not financial advice. DYOR. Circumstantial signal only.`

API Reference (All Free, No Auth)

Endpoint Purpose
GET https://gamma-api.polymarket.com/markets?active=true&limit=200 Market discovery
GET https://gamma-api.polymarket.com/markets?slug={slug} Single market by slug
GET https://gamma-api.polymarket.com/prices-history?market={id}&interval=1d Price history
GET https://clob.polymarket.com/book?token_id={tokenId} Order book
GET https://clob.polymarket.com/midpoint?token_id={tokenId} Midpoint price
GET https://clob.polymarket.com/bbo?token_id={tokenId} Best bid/offer
GET https://clob.polymarket.com/trades?token_id={tokenId}&limit=500 Recent market trades (Insider Watch)
GET https://data-api.polymarket.com/v1/leaderboard?timePeriod=ALL&orderBy=PNL&limit=50 Top traders
GET https://data-api.polymarket.com/positions?user={address} Wallet positions
GET https://data-api.polymarket.com/trades?user={address}&limit=500 Wallet trade history + profile

Environment Variables

PKEDGE_TELEGRAM_TOKEN_FREE=
PKEDGE_TELEGRAM_CHAT_FREE=
PKEDGE_TELEGRAM_TOKEN_TRADER=
PKEDGE_TELEGRAM_CHAT_TRADER=

No market data API keys needed. Polymarket APIs are fully public.


Subscription Tiers

Tier Price What They Get
FREE EDGE $0 1 market preview from daily SCAN
WATCHER $9/mo Full 5-market SCAN digest, @PKEdgeBot basic (3 lookups/day)
TRADER $29/mo Unlimited DEEP DIVE, WHALE WATCH, INSIDER WATCH, all real-time alerts
QUANT $99/mo Raw scoring API, Discord quant channel, historical accuracy log

Scoring Reference

SCAN Score Flags:

Flag Points Trigger
VOLUME_SPIKE 3 24h volume >3× average daily
VOLUME_SURGE 2 >25% of all-time volume traded in last 24h
RESOLVING_SOON 2 Resolves within 7 days
SPREAD_ANOMALY 1 YES + NO gap >6¢
EXTREME_LOW / HIGH 1 Price ≤10% or ≥90% on high volume

Score thresholds: 2 = WATCH | 4 = ELEVATED | 6+ = HIGH

Conviction thresholds: <7 pts = LOW | 7-14 pts = MEDIUM | 15+ pts = HIGH

Insider Signal Score:

Factor Points
Position > $5K 1
Position > $25K 3
Position > $50K 3
Wallet age < 7 days 3
Wallet age 7–14 days 2
Wallet age 15–30 days 1
Trade count < 5 2
Trade count 5–10 1
Coordinated (2+ fresh wallets same market within 6h) +5 bonus

Insider alert thresholds: 3 = WATCH | 6 = ALERT | 9+ = COORDINATED / IMMEDIATE


Guardrails

  • Never state that a market "will" resolve in a particular direction
  • Never say "buy YES" or "buy NO" — frame as "YES appears underpriced relative to evidence"
  • Always append Not financial advice. DYOR. Prediction markets carry risk.
  • If web search returns no useful news, state that clearly rather than fabricating evidence
  • If a market has a thin order book (<$10K depth), always flag it prominently
  • Do not deep-dive markets with <$5K total volume — not enough liquidity to be meaningful
  • For Insider Watch: never accuse wallets of wrongdoing — frame as "unusual pattern" not "insider trading"
  • Fresh wallet signals are circumstantial — always note that large new positions can have innocent explanations

Reviews (0)

Sign in to write a review.

No reviews yet. Be the first to review!

Comments (0)

Sign in to join the discussion.

No comments yet. Be the first to share your thoughts!

Compatible Platforms

Pricing

Free

Related Configs