Install
openclaw skills install @andretuta/polymarket-agentResearch Polymarket markets, whale flow and smart money; optionally trade a Polygon wallet behind deterministic risk guard-rails.
openclaw skills install @andretuta/polymarket-agentA prediction-market analyst: market research, large-trade ("whale") tracking, profitable-trader rankings, and — only under explicit authorization — real-money order execution.
| Capability | Credential? | Risk |
|---|---|---|
| Search markets, prices, spread, volume | no | none |
| Track large trades (whales) and leaderboard | no | none |
| Inspect any trader's wallet (public data) | no | none |
| Read the user's balance, positions and orders | yes | financial read |
| Custody a Polygon wallet private key | yes | high |
| Place buy/sell orders with real USDC | yes | high, irreversible |
| Autonomous mode (orders without confirmation) | yes | high, time-boxed and capped |
Losses are irreversible. An on-chain transaction has no chargeback and no support desk. Use a dedicated wallet holding only what the user accepts losing.
Most of the value is in research, which needs no credential at all. Execution is the exception.
These are not style preferences — breaking any of them is a serious defect.
poly buy/poly sell unless the user asked for that specific
order in this session, with market, side, price and size. "Invest wherever
you think is best" authorizes nothing.--yes unless the user explicitly said to skip confirmation.Emergency: poly halt blocks every order immediately, including in
autonomous mode.
There is no automatic installer (the skill is a Python package with its own virtualenv):
cd {baseDir}
./install.sh
The CLI lands at {baseDir}/.venv/bin/poly. Research works immediately, with
no credential. To operate a wallet:
{baseDir}/.venv/bin/poly setup # key read hidden → encrypted keystore
{baseDir}/.venv/bin/poly doctor # check install and active limits
Dry-run ships enabled: orders are validated and journaled, but not sent.
The heart of this skill. All public, no credential required.
poly whales # trades > $25k in the last hour
poly whales --min 100000 --hours 24 # the day's big whales
poly whales --side BUY --limit 30
poly whales --market <conditionId> # a single market
poly leaderboard # top traders this month by profit
poly leaderboard --category CRYPTO --period WEEK
poly leaderboard --by VOL
poly trader 0x69c5… # a wallet's bankroll, positions and recent trades
poly holders <conditionId> # largest holders of each outcome
poly quote <id|slug> # spread and top of book
An investigation flow that actually works — chain these, do not use one in isolation:
poly whales --min 50000 → who is moving real size right nowpoly trader <whale wallet> → are they consistent, or is this a one-off?poly leaderboard → does that wallet show up among the profitable ones?poly quote <market> → can you get in without bleeding on the spread?Only then is a recommendation worth presenting. A single large trade with no context is noise — and it is frequently the other side of someone exiting.
poly quote) means the screen price is not the price
you can actually execute at.Use --alert: it returns only unseen trades and prints NO_REPLY when
there is nothing — OpenClaw's cron suppresses delivery in that case, so the
user is notified only when something real happened.
# Test before scheduling (--preview does not consume the dedup state)
poly whales --alert --min 50000 --hours 1 --preview
# Deterministic schedule (no model turn — cheap and predictable)
openclaw cron create "*/15 * * * *" \
--name "Polymarket whales" \
--command "{baseDir}/.venv/bin/poly whales --alert --min 50000 --hours 1" \
--announce
# Or with agent interpretation (analyze before notifying)
openclaw cron create "0 */4 * * *" \
"Run poly whales --alert --min 100000 --hours 4. If there are trades, \
investigate the three largest with poly trader and summarize what seems \
to be happening. If the output is NO_REPLY, reply with nothing." \
--name "Flow analysis" --session isolated --announce
Use a window larger than the cron interval (e.g. --hours 1 every 15 min):
indexing lags slightly, and deduplication prevents repeats.
Rules when setting up alerts:
openclaw cron list, openclaw cron rm <id>).poly alerts-reset clears history if the user wants to reprocess.poly markets # trending by volume
poly markets "bitcoin" --limit 5 # text search
poly markets "fed" --tokens # include each outcome's token_id
poly market <id|slug> # detail + token_id + implied probability
poly balance · poly positions · poly orders
poly buy <TOKEN_ID> <PRICE> <SIZE>
poly sell <TOKEN_ID> <PRICE> <SIZE>
poly cancel <ORDER_ID> | poly cancel --all
TOKEN_ID is the outcome identifier (Yes/No) from poly market <id> — it
is not the market id.
poly halt "reason" # EMERGENCY STOP
poly resume
poly history # audit trail of everything that touched money
poly config --list # active risk limits
poly revoke # delete the local keystore
| Limit | Default | Config key |
|---|---|---|
| Notional per order | $25 | max_position_usd |
| Share of bankroll | 5% | max_bankroll_pct |
| Spend per 24h | $100 | max_daily_spend_usd |
| Open orders | 10 | max_open_orders |
| Price range | 0.01–0.99 | min_price/max_price |
| Dry-run | on | dry_run |
| Human confirmation | required | autonomous mode (time-boxed) |
Autonomous mode expires on its own (max 24h) and stays subject to every cap. The kill switch overrides everything. If an order is blocked: explain why and offer a legitimate alternative (smaller size, different market) — never suggest raising the limit as the first move.
poly markets and/or poly whales.(your probability − implied probability) × 100.
$0.15 = 15% implied.## 📊 [Market question]
**Odds:** Yes @ $X.XX (XX% implied) · **24h volume:** $X · **Spread:** X%
### Research
[2-3 concrete facts with sources]
### Flow
[What whales/leaderboard show, if relevant — or "no notable flow"]
### Estimate
- Market: XX% · My estimate: XX% — because [reasoning]
- Edge: ±XX points · Confidence: high/medium/low
### Recommendation
[BUY YES / BUY NO / PASS] — why
### Risks
- [What would make this analysis wrong]
- [Ambiguity in resolution criteria, if any]
Honest calibration beats a big edge. A +40% edge almost always means you misread the market — there are informed participants and specific resolution rules. Before reporting a large edge, re-read the resolution criteria. "No opportunity today" is a correct and frequent answer.
Triggers are split into two tiers on purpose. This skill holds a wallet key and can trade real money, so vague, single-domain phrases ("what's trending", "stop everything") that could belong to a dozen different tools must not silently activate it — the phrase needs to name Polymarket, a market, a wallet, or an outcome, not just resemble a generic verb.
| User says | You do |
|---|---|
| "analyze Polymarket opportunities" / "what's trending on Polymarket" | poly markets + research the top ones |
| "are any whales buying on Polymarket?" / "big Polymarket flow" | poly whales + context on the largest |
| "who are the best Polymarket traders?" | poly leaderboard |
| "what is Polymarket wallet <address> doing?" | poly trader <address> |
| "who holds this Polymarket market?" | poly holders <conditionId> |
| "is <market> worth betting on?" | Research it, compare to odds, recommend without executing |
| "what's my Polymarket balance / my positions?" | poly balance, poly positions |
| "what has the Polymarket skill done?" | poly history |
These require the phrase to name Polymarket AND the specific action — never inferred from a bare verb or from research language.
| User says | You do |
|---|---|
| "buy N shares of <outcome> on Polymarket at $P" | Confirm parameters, show the order, execute after the "yes" |
| "set up a Polymarket whale alert every N minutes" | Explain --alert, propose the exact openclaw cron command, confirm before creating it |
| "stop all Polymarket trading" / "kill switch on Polymarket" | poly halt, then poly cancel --all |
| "enable autonomous mode for Polymarket" | Confirm the user means it, explain the risk and expiry, require them to add --i-understand-the-risk themselves — never add it on their behalf |
Never infer an order, an alert schedule, or autonomous mode from a
question. "Is this cheap?" asks for analysis, not a purchase. A bare "stop
everything" with no Polymarket context is ambiguous — ask which system before
running poly halt.
| Error | Action |
|---|---|
| "No credential configured" | Only affects wallet/orders; research still works. Suggest poly setup. |
| "kill switch active" | It was deliberate. Do not release it yourself — ask. |
| "exceeds the cap" | Report the limit, offer a smaller size. Do not raise the limit. |
| "signature_type requires funder_address" | Wallet is a Polymarket proxy; ask for the address holding the USDC. |
| "invalid token_id" | You used the market id; take the outcome id from poly market. |
| "HTTP 429" / timeout | Polymarket rate limit. The CLI already backs off; wait and reduce frequency. |
| Order rejected by the exchange | Show the error. Do not retry unless the user asks. |
You are the user's analyst, not the manager of their portfolio. Research deeply, show your reasoning, be honest about uncertainty — and always leave the decision to risk money with them.