1390/woofi-bot/SKILL.md
Complete WOOFi bot — DEX analytics, swap quotes, swap execution — DEX analytics, swap quotes, swap execution with tx generation, pool states, protocol revenue across 16 chains. Updated from woonetwork/woofi-skills v1.1.
npx skillsauth add starchild-ai-agent/community-skills @1390/woofi-botInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Fetch WOOFi DEX metrics for market analysis, reporting, and DeFi research.
Updated: 2026-03-23 — Aligned with woonetwork/woofi-skills v1.1 (2026-03-20)
v4.0.0 adds complete swap functionality:
POST /v1/quote) — Get exchange rates without executingPOST /v1/swap) — Generate on-chain transaction data with approval stepstx_steps array for sequential signing and broadcastWhat's New in v4.0.0:
POST /v1/quote — Token swap quotes with slippage protection (sapi.woofi.com)POST /v1/swap — Complete swap execution with tx step generation and approval handling/swap endpoint documentation (legacy api.woofi.com)| Detail | Value |
|--------|-------|
| Base URL | https://api.woofi.com |
| Auth | None (fully public) |
| Rate Limit | 5 requests/second |
| Chains | bsc, avalanche, polygon, arbitrum, optimism, linea, base, mantle, sonic, berachain, hyperevm, monad, solana, fantom, zksync, polygon_zkevm, sei |
/swap_supportQuery supported networks, DEXs, and tokens for WOOFi swaps.
Trigger phrases: "swap support", "supported networks", "supported tokens", "which chains"
Example:
curl "https://api.woofi.com/swap_support"
Response fields:
dexs — List of DEX integrations per chain (uni_swap, sushi_swap, curve, woofi, etc.)network_infos — Chain metadata (name, RPC URL, chain ID, explorer, bridge support)token_infos — Supported tokens with address, symbol, decimals, swap_enable flagswap_enable — Whether swapping is currently active for this token/networkbridge_enable — Whether cross-chain bridging is supported⚠️ Note: Paused networks (fantom, zksync, polygon_zkevm) have swap_enable=false for all tokens.
POST /v1/quote 🆕Get token exchange rates and expected receive amounts without executing a trade. Uses the new sapi.woofi.com API.
Base URL: https://sapi.woofi.com
Endpoint: POST /v1/quote
Content-Type: application/json
Trigger phrases: "quote", "price", "exchange rate", "token price", "how much will I get"
All parameters are passed in the JSON body.
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| chain_id | integer | Yes | — | Network chain ID (e.g., Base: 8453, Arbitrum: 42161, BSC: 56, Polygon: 137) |
| sell_token | string | Yes | — | Address or symbol of token to sell (Native ETH/BNB/etc is 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) |
| buy_token | string | Yes | — | Address or symbol of token to buy |
| sell_amount | string | Yes | — | Human-readable amount to sell (e.g., "1.5") |
| slippage_pct | float | No | 0.5 | Max allowed slippage percentage |
| woofi_only | boolean | No | false | If true, only sources quotes directly from WOOFi |
| Field | Type | Description |
|-------|------|-------------|
| chain_id | integer | Chain ID |
| sell_token | string | Sell token address |
| buy_token | string | Buy token address |
| sell_amount | string | Sell amount requested |
| buy_amount | string | Expected buy amount |
| price | string | Current execution price |
| guaranteed_price | string | Minimum guaranteed price after considering slippage |
Example:
curl -X POST "https://sapi.woofi.com/v1/quote" \
-H "Content-Type: application/json" \
-d '{
"chain_id": 42161,
"sell_token": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"buy_token": "0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f",
"sell_amount": "1000"
}'
Response:
{
"chain_id": 42161,
"sell_token": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"buy_token": "0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f",
"sell_amount": "1000",
"buy_amount": "0.01524300",
"price": "0.000015243",
"guaranteed_price": "0.000015167"
}
⚠️ Important:
swap execution to verify expectations0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeEPOST /v1/swap 🆕Generate blockchain-ready transaction data for swaps, including necessary token approvals.
Base URL: https://sapi.woofi.com
Endpoint: POST /v1/swap
Content-Type: application/json
Trigger phrases: "swap", "trade", "execute swap", "build transaction", "swap tokens"
This endpoint inherits all parameters from the Quote endpoint, plus execution-specific ones:
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| chain_id | integer | Yes | Network chain ID (e.g., Base: 8453, Arbitrum: 42161) |
| sell_token | string | Yes | Token address/symbol to sell (Native is 0xEeeeeE...) |
| buy_token | string | Yes | Token address/symbol to buy |
| sell_amount | string | Yes | Human-readable amount to sell (e.g., "1.5") |
| to | string | Yes | The wallet address that will receive the purchased tokens |
| rebate_to | string | Yes | Rebate receiving address (typically same as to) |
| slippage_pct | float | No | Max allowed slippage percentage (default: 0.5) |
| signer_address | string | No | User's wallet address initiating the swap. Used to check if an Approve is required. |
| Field | Type | Description |
|-------|------|-------------|
| needs_approve | boolean | If true, user must approve the router contract before swapping |
| tx_steps | array | List of transaction steps to be signed and submitted on-chain |
| buy_amount | string | Expected buy amount |
| price | string | Current execution price |
| guaranteed_price | string | Minimum guaranteed price |
Each item in tx_steps represents an on-chain call:
to: Target contract address for this stepdata: Hex string representing the transaction data payloadvalue: Amount of native token to send in Weidesc: Human-readable description (e.g., "Approve USDC for WOOFi Router")Example:
curl -X POST "https://sapi.woofi.com/v1/swap" \
-H "Content-Type: application/json" \
-d '{
"chain_id": 42161,
"sell_token": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"buy_token": "0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f",
"sell_amount": "1000",
"to": "0xYourWalletAddress",
"rebate_to": "0xYourWalletAddress",
"signer_address": "0xYourWalletAddress"
}'
Response:
{
"chain_id": 42161,
"sell_token": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"buy_token": "0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f",
"sell_amount": "1000",
"buy_amount": "0.01524300",
"price": "0.000015243",
"guaranteed_price": "0.000015167",
"needs_approve": true,
"tx_steps": [
{
"to": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"data": "0x095ea7b3...",
"value": "0",
"desc": "Approve USDC for WOOFi Router"
},
{
"to": "0x4c4AF8DBc524681930a27b2F1Af5bcC8062E6fB7",
"data": "0x...",
"value": "0",
"desc": "Swap 1000 USDC for WBTC via WOOFi"
}
]
}
⚠️ Critical:
tx_steps contains multiple items, they MUST be submitted to the blockchain in the exact order provided (Approve must confirm before Swap)0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeEneeds_approve: If true, the approval transaction must be executed first/swapGet swap quote for token exchange using the legacy api.woofi.com endpoint. Returns routing info, expected output amount, and price impact.
Trigger phrases: "swap quote", "quote ETH to USDC", "how much USDC for 1 ETH", "swap price"
Parameters:
from_token (required): Source token contract address (or 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE for native ETH)to_token (required): Destination token contract addressfrom_amount (required): Amount in smallest unit (wei for ETH, 6 decimals for USDC)network (required): Chain name (e.g., "arbitrum", "bsc", "base")slippage (optional): Slippage tolerance in basis points (e.g., 50 = 0.5%, default: 50)Example:
# Quote: 0.1 ETH → USDC on Arbitrum
curl "https://api.woofi.com/swap?from_token=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&to_token=0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8&from_amount=100000000000000000&network=arbitrum"
Response structure:
{
"status": "ok",
"data": {
"from_token": {...},
"to_token": {...},
"from_amount": "100000000000000000",
"to_amount": "245000000", # Expected output (in to_token decimals)
"price_impact": "0.15", # Price impact percentage
"routing_info": {
"sources": [
{"name": "woofi", "percentage": "60.5"},
{"name": "uni_swap", "percentage": "39.5"}
]
},
"gas_estimate": "150000"
}
}
⚠️ Important:
from_amount must be in the token's smallest unit (wei for 18-decimal tokens)to_amount will be in the destination token's decimal precision0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE/multi_total_stat, /total_stat, /cumulate_statCross-chain aggregated trading statistics.
Trigger phrases: "total volume", "total stats", "cross chain stats", "24h stats", "overall volume"
Example:
# Cross-chain total
curl "https://api.woofi.com/multi_total_stat"
# Single chain total
curl "https://api.woofi.com/total_stat?network=arbitrum"
# Cumulative stat
curl "https://api.woofi.com/cumulate_stat?network=bsc"
/statVolume, trader count, and transaction count by period and chain.
Trigger phrases: "trading stats", "trading volume", "woofi stats", "how much volume", "trader count"
Parameters:
period (required): 1d, 1w, 1m, 3m, 1y, allnetwork (required): chain name from list above⚠️ CRITICAL: volume_usd is in wei — divide by 10^18 to get USD value
Example:
curl "https://api.woofi.com/stat?period=1d&network=arbitrum"
Response:
{
"status": "ok",
"data": [
{
"timestamp": 1710892800,
"volume_usd": "1234567890123456789012",
"traders": 1523,
"txns": 8942
}
]
}
/source_statVolume breakdown by integrator/aggregator source.
Trigger phrases: "volume by source", "top integrators", "who is sending volume", "traffic source"
Parameters:
period (required): 1d, 1w, 1m, 3m, 1y, allnetwork (required): chain nameExample:
curl "https://api.woofi.com/source_stat?period=1m&network=arbitrum"
Response fields per source:
name — Source name (e.g. "1inch", "0x", "Paraswap", "WOOFi", "KyberSwap", "ODOS")volume_usd — Volume in wei (÷ 10^18 = USD)percentage — Share of total volume (string, e.g. "45.2")traders, txs — Unique wallets and tx countKnown integrators: 1inch, 0x, ODOS, KyberSwap, Paraswap, THORSwap, OKX, BitKeep, Firebird, Transit Swap, Hera Fireance, Yeti, Joy, ZetaFarm, Slingshot, unizen, 1delta, KALM, ONTO, Velora, Nativo, etc.
/token_statPer-token 24-hour trading statistics including TVL, volume, and turnover rate.
Trigger phrases: "token stats", "token volume", "token tvl", "top tokens"
Parameters:
network (required): chain nameExample:
curl "https://api.woofi.com/token_stat?network=arbitrum"
/solana_statSolana-specific raw pool statistics.
Trigger phrases: "solana stats", "solana pool", "solana trading"
Example:
curl "https://api.woofi.com/solana_stat"
/yieldVault TVL, APY, and yield composition per chain.
Trigger phrases: "earn tvl", "earn vault", "yield farming", "woofi earn", "tvl", "apy"
Parameters:
network (required): chain nameExample:
curl "https://api.woofi.com/yield?network=base"
Response structure:
auto_compounding — Map of vault address → vault data
total_deposit — TVL in wei (÷ 10^18 = USD)apy — Current APY (decimal, e.g. 0.045 = 4.5%)source_apy — Breakdown of yield sourcestotal_deposit — Chain-wide total TVL in wei/earn_summarySupercharger vault APR summary across all networks, sorted by APR.
Trigger phrases: "earn summary", "supercharger", "earn apr", "best earn vault", "vault ranking"
Example:
curl "https://api.woofi.com/earn_summary"
⚠️ Note: Paused networks (fantom, zksync, polygon_zkevm) are excluded.
/stakingv2Global WOO token staking statistics including base APR and Multiplier Point boost.
Trigger phrases: "woo staking", "staking apr", "staked woo", "multiplier points"
Example:
curl "https://api.woofi.com/stakingv2"
Response fields:
total_woo_staked — Total WOO staked in wei (÷ 10^18)avg_apr — Current average staking APRbase_apr — Base APR componentmp_boosted_apr — Multiplier-boosted APR component/user_balances, /user_supercharger_infos, /user_stakingv2_infos, /boosted_apr_infoUser portfolio data including token balances, Supercharger positions, staking info, and boosted APR status.
Trigger phrases: "user balance", "user portfolio", "my position", "user staking", "boosted apr"
Parameters:
user or user_address (required): User wallet address (checksummed for EVM)Example:
curl "https://api.woofi.com/user_balances?user_address=0x..."
curl "https://api.woofi.com/user_supercharger_infos?user_address=0x..."
curl "https://api.woofi.com/user_stakingv2_infos?user_address=0x..."
curl "https://api.woofi.com/boosted_apr_info?user_address=0x..."
/user_trading_volumes, /user_perp_volumesUser swap and perpetual trading volume history.
Trigger phrases: "user trading volume", "my volume", "user perp volume", "trading history"
Parameters:
user or user_address (required): User wallet addressperiod (required): 7d, 14d, 30d (different from stat endpoints!)Example:
curl "https://api.woofi.com/user_trading_volumes?user_address=0x...&period=30d"
curl "https://api.woofi.com/user_perp_volumes?user_address=0x...&period=7d"
/woofi_pro/perps_volumeWOOFi Pro daily perpetual trading volume.
Trigger phrases: "perps volume", "woofi pro", "woofi dex", "perpetual volume"
Example:
curl "https://api.woofi.com/woofi_pro/perps_volume"
/integration/pairs, /integration/tickers, /integration/pool_states 🆕Trading pairs, 24-hour ticker data, and pool states for third-party integrations.
Trigger phrases: "trading pairs", "ticker data", "pool state", "integration pairs", "fee rate", "pool liquidity"
Example:
curl "https://api.woofi.com/integration/pairs?network=arbitrum"
curl "https://api.woofi.com/integration/tickers?network=arbitrum"
curl "https://api.woofi.com/integration/pool_states?network=arbitrum"
Pool states response includes:
reserve — Token reserve in the WooPP poolfee_rate — Trading fee rate (in basis points)max_gamma — Maximum gamma parameter for sPMM pricingmax_notional_swap — Maximum notional swap sizecap_bal — Maximum balance cap for the tokenprice — Current oracle price (18-decimal fixed point)spread — Price spread from the oracle/analytics/daily_fee 🆕Daily net protocol revenue breakdown for WOOFi Swap and WOOFi Pro.
Trigger phrases: "protocol revenue", "daily fee", "woofi revenue", "fee breakdown"
Parameters:
start_date (required): Start date in YYYY-MM-DD formatend_date (required): End date in YYYY-MM-DD formatExample:
curl "https://api.woofi.com/analytics/daily_fee?start_date=2026-03-01&end_date=2026-03-20"
Response:
{
"status": "ok",
"data": [
{
"date": "2026-03-20",
"swap": 1732.845286, # Swap revenue (USD)
"pro": 845.123456 # Pro perps revenue (USD)
}
]
}
| Network | /stat | /source_stat | /token_stat | /yield | /earn_summary | /stakingv2 | /user_* | /integration | /swap | |---------|-------|--------------|-------------|--------|---------------|------------|---------|--------------|-------| | BSC | Yes | Yes | Yes | Yes | Yes | — | Yes | Yes | Yes | | Avalanche | Yes | Yes | Yes | Yes | Yes | — | Yes | Yes | Yes | | Polygon | Yes | Yes | Yes | Yes | Yes | — | Yes | Yes | Yes | | Arbitrum | Yes | Yes | Yes | Yes | Yes | — | Yes | Yes | Yes | | Optimism | Yes | Yes | Yes | Yes | Yes | — | Yes | Yes | Yes | | Linea | Yes | Yes | Yes | Yes | Yes | — | Yes | Yes | Yes | | Base | Yes | Yes | Yes | Yes | Yes | — | Yes | Yes | Yes | | Mantle | Yes | Yes | Yes | Yes | Yes | — | Yes | Yes | Yes | | Sonic | Yes | Yes | Yes | Yes | Yes | — | Yes | Yes | Yes | | Berachain | Yes | Yes | Yes | Yes | Yes | — | Yes | Yes | Yes | | HyperEVM | Yes | Yes | Yes | No | — | — | Yes | Yes | Yes | | Monad | Yes | Yes | Yes | No | — | — | Yes | Yes | Yes | | Solana | Yes | Yes | Yes | No | — | — | No | No | Yes | | Fantom | Yes | Yes | Yes | Yes | Paused | — | Yes | Yes | Paused | | zkSync | Yes | Yes | Yes | Yes | Paused | — | Yes | Yes | Paused | | Polygon zkEVM | Yes | Yes | Yes | Yes | Paused | — | Yes | Yes | Paused | | Sei | — | — | — | — | — | — | — | — | Pro only | | (global) | — | — | — | — | — | Yes | — | — | — |
| Network | Chain ID | /v1/quote | /v1/swap | |---------|----------|-----------|----------| | BSC | 56 | Yes | Yes | | Avalanche | 43114 | Yes | Yes | | Polygon | 137 | Yes | Yes | | Arbitrum | 42161 | Yes | Yes | | Optimism | 10 | Yes | Yes | | Linea | 59144 | Yes | Yes | | Base | 8453 | Yes | Yes | | Mantle | 5000 | Yes | Yes | | Sonic | 146 | Yes | Yes | | Berachain | 80094 | Yes | Yes | | HyperEVM | 714 | Yes | Yes | | Monad | 10143 | Yes | Yes | | Fantom | 250 | Yes | Yes | | Polygon zkEVM | 1101 | Yes | Yes |
Note: v1 API uses chain_id instead of network name. Solana and Sei are not yet supported on v1 API.
import requests
# Get quote (read-only, no execution)
response = requests.post(
"https://sapi.woofi.com/v1/quote",
json={
"chain_id": 42161,
"sell_token": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831", # USDC
"buy_token": "0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f", # WBTC
"sell_amount": "1000",
"slippage_pct": 0.5
}
).json()
print(f"Expected receive: {response['buy_amount']} WBTC")
print(f"Price: {response['price']}")
print(f"Guaranteed price: {response['guaranteed_price']}")
import requests
# Build swap transaction
response = requests.post(
"https://sapi.woofi.com/v1/swap",
json={
"chain_id": 42161,
"sell_token": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"buy_token": "0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f",
"sell_amount": "1000",
"to": "0xYourWalletAddress",
"rebate_to": "0xYourWalletAddress",
"signer_address": "0xYourWalletAddress"
}
).json()
# Check if approval needed
if response["needs_approve"]:
print("⚠️ Approval required first!")
approve_tx = response["tx_steps"][0]
print(f"Approve: {approve_tx['desc']}")
print(f" To: {approve_tx['to']}")
print(f" Data: {approve_tx['data']}")
# Swap transaction
swap_tx = response["tx_steps"][-1]
print(f"\nSwap: {swap_tx['desc']}")
print(f" To: {swap_tx['to']}")
print(f" Data: {swap_tx['data']}")
print(f" Expected: {response['buy_amount']} WBTC")
import requests
# First, get token addresses from swap_support
r = requests.get("https://api.woofi.com/swap_support").json()
arb_tokens = r["data"]["arbitrum"]["token_infos"]
eth_addr = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
usdc_addr = "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8"
# Get quote
r = requests.get(
"https://api.woofi.com/swap",
params={
"from_token": eth_addr,
"to_token": usdc_addr,
"from_amount": "100000000000000000", # 0.1 ETH in wei
"network": "arbitrum"
}
).json()
if r["status"] == "ok":
to_amount = int(r["data"]["to_amount"]) / 1e6 # USDC has 6 decimals
print(f"0.1 ETH → ${to_amount:,.2f} USDC")
print(f"Price impact: {r['data']['price_impact']}%")
Use the script in scripts/total_volume.py:
python skills/woofi-data/scripts/total_volume.py --period 1m
Use the script in scripts/total_tvl.py:
python skills/woofi-data/scripts/total_tvl.py
import requests
r = requests.get(
"https://api.woofi.com/analytics/daily_fee",
params={"start_date": "2026-03-01", "end_date": "2026-03-20"}
).json()
total_swap = sum(d["swap"] for d in r["data"])
total_pro = sum(d["pro"] for d in r["data"])
print(f"Swap revenue: ${total_swap:,.2f}")
print(f"Pro revenue: ${total_pro:,.2f}")
import requests
# Trading stats
r = requests.get("https://api.woofi.com/stat?period=1d&network=arbitrum").json()
volume_usd = int(r["data"][0]["volume_usd"]) / 1e18
print(f"Arbitrum 24h volume: ${volume_usd:,.0f}")
# Earn yields
r = requests.get("https://api.woofi.com/yield?network=base").json()
tvl = int(r["data"]["total_deposit"]) / 1e18
print(f"Base Earn TVL: ${tvl:,.0f}")
# WOO staking
r = requests.get("https://api.woofi.com/stakingv2").json()
woo_staked = int(r["data"]["total_woo_staked"]) / 1e18
print(f"Total WOO staked: {woo_staked:,.0f} WOO")
# Pool states
r = requests.get("https://api.woofi.com/integration/pool_states?network=arbitrum").json()
print(f"Pool data: {r['data']}")
chain_id (e.g., 42161), not network namessell_amount uses decimal format (e.g., "1.5"), NOT weitx_steps has multiple items, execute in order (approve → swap)needs_approve check — Always check this flag before attempting swap0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE for ETH, BNB, etc.volume_usd, total_deposit) are in wei. Always divide by 10^18.from_amount and parse to_amount accordingly.1m returns 30 days of daily buckets, not a single aggregated value. Sum all buckets for total./stakingv2 doesn't take a network param — it's the same across all chains.trader_count across time buckets — each bucket is independently unique-per-period.1d — Returns hourly buckets. All other periods return daily buckets.7d, 14d, 30d (different from stat endpoints)./multi_total_stat and /user_trading_volumes aggregate automatically.fantom, zksync, polygon_zkevm are excluded from /earn_summary and have swap_enable=false.0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE as the token address for ETH.sell_amount is human-readable (e.g., "1.5"), NOT wei. But buy_amount in response still needs decimal parsing based on token decimals.https://api.woofi.com/llms.txthttps://learn.woo.orghttps://github.com/woonetwork/woofi-skillshttps://github.com/woonetwork/woofi-python-sdkdevelopment
OpenSea API integration for NFT and token discovery, marketplace intelligence, and order/transaction workflows. Use when working with OpenSea data or trading flows (e.g. collection stats, trending collections/tokens, NFT metadata, listings/offers, swap quotes, transaction receipt polling).
development
Generate a warm, healing parallel-universe fairy tale (~1000 words) plus 3 cohesive storybook illustrations, themed "if this person had never been born, what would the world miss." Output is a polished HTML storybook that can be previewed and published. Use when the user wants a personalized "if I had never been born" / "如果我没出生" tale for a real person — input is a name, age, and 3 key life events. Great for birthdays, memorials, encouragement gifts, or healing keepsakes.
development
Onboard a user to Phala Cloud and deploy a verifiable Starchild TEE agent — a minimal FastAPI runtime running inside an Intel TDX confidential VM, plus a published chat dashboard with attestation verification. Use when the user wants to "try TEE", "run an agent in a confidential VM", "deploy to Phala", or replicate the internal Starchild TEE test setup.
tools
Trade on Polymarket prediction markets (CLOB V2) from a Privy EOA wallet. Search markets, place/cancel orders, manage positions. No private key handling. Use when the user wants to bet on event outcomes (e.g. "buy YES at 0.65 on the ceasefire market", "what are my open positions", "close my Trump bet").