swap-planner
Plans token swaps and generates execution links for Uniswap.
Install
mkdir -p .claude/skills/swap-planner && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/16444" && unzip -o skill.zip -d .claude/skills/swap-planner && rm skill.zipInstalls to .claude/skills/swap-planner
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
This skill should be used when the user asks to "swap tokens", "trade ETH for USDC", "exchange tokens on Uniswap", "buy tokens", "sell tokens", "convert ETH to stablecoins", "find memecoins", "discover tokens", "research tokens", "tokens to buy", "find tokens to swap", "what should I buy", or mentions swapping, trading, researching, discovering, buying, or exchanging tokens on any Uniswap-supported chain. Supports both known token swaps and token discovery workflows (discovery uses keyword search and web search — there is no live "trending" feed). Generates deep links to execute swaps in the Uniswap interface.Key capabilities
- →Gather swap intent including tokens, amounts, and chain
- →Verify token contracts on-chain
- →Research tokens via web search if needed
- →Generate deep links for Uniswap interface
- →Support token discovery by keyword search
- →Present token options to the user
How it works
The skill gathers swap details, verifies token contracts, researches tokens if necessary, and then generates a deep link that opens the Uniswap interface with the swap parameters pre-filled.
Inputs & outputs
When to use swap-planner
- →Trading ETH for USDC
- →Discovering new tokens
- →Researching token contracts
- →Planning a token swap
About this skill
Swap Planning
Plan and generate deep links for token swaps on Uniswap across all supported chains.
Runtime Compatibility: This skill uses
AskUserQuestionfor interactive prompts. IfAskUserQuestionis 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:
# Search for tokens by name/category (e.g., "degen", "pepe", "ai agent")
curl -s "https://api.dexscreener.com/latest/dex/search?q=degen" | \
jq '[.pairs[] | select(.chainId == "base" and .dexId == "uniswap")] |
sort_by(-.volume.h24) | .[0:5] | map({
token: .baseToken.symbol,
address: .baseToken.address,
price: .priceUsd,
volume24h: .volume.h24,
liquidity: .liquidity.usd
})'
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 chain
curl -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 exists
curl -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 | N/A | 0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f |
For unknown tokens, use web search to find the contract address, then verify on-chain.
Step 3: Verify Token Contracts (Basic)
Input Validation (Required Before Any Shell Command):
Before interpolating user-provided values into any shell command, validate all inputs:
- Token addresses MUST match:
^0x[a-fA-F0-9]{40}$ - Chain/network names MUST be from the allowed list in
../../references/chains.md - Amounts MUST be valid decimal
Content truncated.
When not to use it
- →When the user does not want to swap, trade, research, or discover tokens on Uniswap-supported chains
- →When the user wants to execute a swap directly without using the Uniswap interface
Limitations
- →Browser opening may fail in SSH, containerized, or headless environments
- →DexScreener coverage varies by chain, with limited data for some chains
- →DexScreener's public API does not have a 'trending' or 'top gainers' endpoint
How it compares
This skill automates the research and link generation process for Uniswap swaps, providing a direct link for execution, which is more efficient than manually navigating and inputting details on the Uniswap platform.
Compared to similar skills
swap-planner side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| swap-planner (this skill) | 0 | 4mo | Review | Beginner |
| estoque-inventory | 0 | 1mo | Review | Beginner |
| billing-automation | 10 | 2mo | No flags | Intermediate |
| paypal-integration | 10 | 2mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by NickVanzo
View all by NickVanzo →You might also like
estoque-inventory
migueldsants
Gerencia o inventário do mini-ERP Estoque — listar/buscar itens, criar/editar, ajustar quantidade, sinalizar estoque baixo e somar totais via a API REST local.
billing-automation
wshobson
Build automated billing systems for recurring payments, invoicing, subscription lifecycle, and dunning management. Use when implementing subscription billing, automating invoicing, or managing recurring payment systems.
paypal-integration
wshobson
Integrate PayPal payment processing with support for express checkout, subscriptions, and refund management. Use when implementing PayPal payments, processing online transactions, or building e-commerce checkout flows.
ccxt-php
ccxt
CCXT cryptocurrency exchange library for PHP developers. Covers both REST API (standard) and WebSocket API (real-time). Helps install CCXT, connect to exchanges, fetch market data, place orders, stream live tickers/orderbooks, handle authentication, and manage errors in PHP 8.1+. Use when working with crypto exchanges in PHP projects, trading bots, or web applications. Supports both sync and async (ReactPHP) usage.
openrouter-cost-controls
jeremylongshore
Implement budget controls and cost limits for OpenRouter. Use when managing spending or preventing overruns. Trigger with phrases like 'openrouter budget', 'openrouter spending limit', 'cost control', 'openrouter billing alert'.
plaid-fintech
davila7
Expert patterns for Plaid API integration including Link token flows, transactions sync, identity verification, Auth for ACH, balance checks, webhook handling, and fintech compliance best practices. Use when: plaid, bank account linking, bank connection, ach, account aggregation.