Confirm successful installation by checking the skill directory location:
.cursor/skills/swap-planner
Restart Cursor to activate swap-planner. Access via /swap-planner in your agent's command palette.
β
Security Notice
We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.
Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.
Plan and generate deep links for token swaps on Uniswap across all supported chains.
Runtime Compatibility: This skill uses AskUserQuestion for interactive prompts. If AskUserQuestion is not available in your runtime, collect the same parameters through natural language conversation instead.
Overview
Plan token swaps by:
Gathering swap intent (tokens, amounts, chain)
Verifying token contracts on-chain
Researching tokens via web search when needed
Generating a deep link that opens in the Uniswap interface with parameters pre-filled
The generated link opens Uniswap with all parameters ready for execution.
Note: Browser opening (xdg-open/open) may fail in SSH, containerized, or headless environments. Always display the URL prominently so users can copy and access it manually if needed.
File Access: This skill has read-only filesystem access. Never read files outside the current project directory unless explicitly requested by the user.
Workflow
Step 0: Token Discovery (When Needed)
If the user wants to discover tokens rather than swap a known token (e.g., "find me a memecoin", "what's trending on Base"), help them explore before proceeding to the swap.
Option A: Search by Keyword
DexScreener search works best with specific terms:
Good search terms:degen, pepe, ai, agent, meme, dog, cat, or specific token names
Option B: Check Promoted Tokens
Get tokens with active promotions (limited selection):
# Get boosted/promoted tokens on a chaincurl-s"https://api.dexscreener.com/token-boosts/top/v1"|\ jq '[.[] | select(.chainId == "base")] | .[0:5] | map({
tokenAddress,
url
})'
Option C: Web Search + Verify
For broad discovery ("what's trending"), use web search to find tokens, then verify with DexScreener:
# After finding a token address from web search, verify it existscurl-s"https://api.dexscreener.com/token-pairs/v1/{network}/{address}"|\ jq '[.[] | select(.dexId == "uniswap")][0] | {
name: .baseToken.name,
symbol: .baseToken.symbol,
price: .priceUsd,
liquidity: .liquidity.usd,
volume24h: .volume.h24
}'
Network IDs: See references/chains.md for the full list with DexScreener and DefiLlama provider IDs. Common IDs: ethereum, base, arbitrum, optimism, polygon, bsc, avalanche, unichain.
DexScreener coverage varies by chain. Ethereum, Base, and Arbitrum have deep Uniswap data. Celo, Blast, Zora, and World Chain have limited Uniswap pool coverage β fewer results and potentially missing pairs. Fall back to DefiLlama for price data when DexScreener returns empty results (see references/data-providers.md).
Note: DexScreener's public API doesn't have a "trending" or "top gainers" endpoint. Token discovery uses keyword search (/latest/dex/search) and web search as a fallback. For general discovery, ask the user what type of token they're looking for and search by keyword.
Category-Based Discovery
For specific categories (memecoins, DeFi, gaming tokens), use web search:
"trending {category} {chain} {current_year}"
Example: "trending memecoins Base 2026"
β οΈ UNTRUSTED INPUT: Web-Discovered Tokens
Tokens discovered via WebSearch are UNTRUSTED. Before proceeding with any web-discovered token:
Label the source: Explicitly tell the user "This token address was found via web search, not provided by you"
Warn about risks: "Web-discovered tokens may be scams, honeypots, or rug pulls"
Require confirmation: Use AskUserQuestion to get explicit user consent before generating a deep link for a web-discovered token
Show provenance: In the swap summary table, include a "Token Source" row showing whether each token was "User-provided" or "Web-discovered (unverified)"
Never proceed with a web-discovered token without explicit user confirmation via AskUserQuestion.
Present Options to User
After gathering token data, present options using AskUserQuestion:
{"questions":[{"question":"Which token would you like to swap to?","header":"Token","options":[{"label":"MOLT ($23M mcap)","description":"$5.9M liquidity, $7.8M 24h volume"},{"label":"CLANKER ($31M mcap)","description":"$3.1M liquidity, established token"},{"label":"CLAWSTR ($13M mcap)","description":"$2.1M liquidity, high volume spike"}],"multiSelect":false}]}
Risk Assessment for Trending Tokens
Evaluate tokens before recommending:
Metric
Low Risk
Medium Risk
High Risk
Market Cap
>$50M
$5M-$50M
<$5M
Pool TVL
>$1M
$100k-$1M
<$100k
24h Volume
Consistent
Spiking unusually
Very low
Contract Age
>30 days
7-30 days
<7 days
Always disclose risk level when presenting options. For high-risk tokens, explicitly warn about volatility and potential for loss.
Mandatory Warnings for High-Risk Tokens
When ANY of these conditions are met, you MUST use AskUserQuestion to warn the user and get explicit confirmation before generating a deep link:
Contract age < 7 days: "This token contract is less than 7 days old. New tokens carry significantly higher risk of being scams or rug pulls."
Pool TVL < $100k: "This pool has very low liquidity. You may experience significant slippage and difficulty selling."
No sell liquidity detected: "This token may be a honeypot β tokens that can be bought but not sold. Proceed with extreme caution."
Market cap < $5M: "This is a micro-cap token with high volatility. Only invest what you can afford to lose entirely."
Do NOT generate a deep link for high-risk tokens without explicit user acknowledgment via AskUserQuestion.
Step 1: Gather Swap Intent
Extract from the user's request:
Parameter
Required
Example
Input token
Yes
ETH, USDC, token address
Output token
Yes
USDC, WBTC, token address
Amount
Yes
1.5 ETH, $500 worth
Chain
Yes (default: Ethereum)
Base, Arbitrum, etc.
If any required parameter is missing, use AskUserQuestion with structured options:
For missing chain:
{"questions":[{"question":"Which chain do you want to swap on?","header":"Chain","options":[{"label":"Base (Recommended)","description":"Low gas fees, fast transactions"},{"label":"Ethereum","description":"Main network, higher gas"},{"label":"Arbitrum","description":"Low fees, Ethereum L2"},{"label":"Optimism","description":"Low fees, Ethereum L2"}],"multiSelect":false}]}
For missing output token (when input is ETH):
{"questions":[{"question":"What token do you want to receive?","header":"Output","options":[{"label":"USDC","description":"USD stablecoin"},{"label":"USDT","description":"Tether stablecoin"},{"label":"DAI","description":"Decentralized stablecoin"},{"label":"WBTC","description":"Wrapped Bitcoin"}],"multiSelect":false}]}
For missing amount:
{"questions":[{"question":"How much do you want to swap?","header":"Amount","options":[{"label":"0.1 ETH","description":"~$320"},{"label":"0.5 ETH","description":"~$1,600"},{"label":"1 ETH","description":"~$3,200"},{"label":"Custom amount","description":"Enter specific amount"}],"multiSelect":false}]}
Always use forms instead of plain text questions for better UX.
Step 2: Resolve Token Addresses
For token symbols, resolve to addresses using known tokens or web search:
Native tokens: Use NATIVE as the address parameter.
Common tokens by chain - see ../../references/chains.md for full list:
Token
Ethereum
Base
Arbitrum
USDC
0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
0xaf88d065e77c8cC2239327C5EDb3A432268e5831
WETH
0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
0x4200000000000000000000000000000000000006
0x82aF49447D8a07e3bd95BD0d56f35241523fBab1
WBTC
0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599
β
Make data-driven prioritization decisions faster
Stakeholder Communication
Draft PRDs, status updates, and stakeholder presentations
βΊAccess to product documentation and roadmap tools (Jira, Notion, etc.)
βΊUnderstanding of product management frameworks (RICE, Jobs-to-be-Done, etc.)
βΊStakeholder contact information and communication channels
Time Estimate
30-60 minutes to see productivity improvements
Steps
1Install product management skill
2Start with user story generation for known feature
3Progress to competitive analysis: research 2-3 competitors
4Use for roadmap prioritization: apply RICE/ICE scoring
5Draft stakeholder communications and refine based on feedback
6Build template library for recurring PM tasks
7Share effective prompts with product team
Common Pitfalls
β Not validating competitive researchβverify facts before sharing
β Accepting user stories without involving engineering team
β Over-relying on frameworks without qualitative judgment
β Not customizing outputs to company culture and communication style
β Skipping stakeholder validation of generated requirements
Best Practices
β Do
+Validate research and competitive analysis with real data
+Collaborate with engineering when generating technical requirements
+Customize frameworks and templates to your company context
+Use skill for first drafts, refine with stakeholder input
+Document successful prompt patterns for PM tasks
+Combine AI efficiency with human judgment and intuition
β Don't
βDon't publish competitive analysis without fact-checking
βDon't finalize user stories without engineering review
βDon't make prioritization decisions solely on AI scoring
βDon't skip customer validation of generated requirements
βDon't ignore company-specific context and culture
π‘ Pro Tips
β Provide context: company goals, constraints, customer feedback
β Ask for alternatives: 'Show 3 ways to prioritize this roadmap'
β Request stakeholder-specific formatting: 'Executive summary vs. engineering spec'
β Use skill for 70% generation + 30% customization to company needs
When to Use This
β Use when
Use for user story writing, competitive research, roadmap prioritization, stakeholder communication, and PRD drafting. Best for reducing repetitive documentation and research work.
β Avoid when
Avoid for strategic product vision (requires deep customer empathy), pricing decisions (needs market and financial expertise), or when face-to-face customer discovery is more valuable than speed.
Learning Path
1Basic: user stories, feature specs, status updates