Install any skill in seconds. Free to start, no credit card required.
Get Started Free →This is the most complex multi-agent orchestration in the system. It turns a single intent -- "I have $20K, find me the best yield" -- into a fully researched, risk-assessed, optimally-structured LP position through a 6-agent pipeline.
.claude/skills/full-lp-workflow/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-14 | ✗→✓ | ▲ Improved | — | — |
| case-18 | ✗→✓ | ▲ Improved | — | — |
| case-19 | ✗→✓ | ▲ Improved | — | — |
| case-04 | ✗→✓ | ▲ Improved | — | — |
| case-12 | ✗→✓ | ▲ Improved | — | — |
This is the most complex multi-agent orchestration in the system. It turns a single intent -- "I have $20K, find me the best yield" -- into a fully researched, risk-assessed, optimally-structured LP position through a 6-agent pipeline.
Why this is 10x better than calling agents individually:
Activate when the user says anything like:
Do NOT use when the user already knows which pool they want (use manage-liquidity instead), just wants strategy comparison without execution (use lp-strategy), or just wants to scan without entering (use scan-opportunities).
| Parameter | Required | Default | How to Extract | | --------------- | -------- | ---------- | ------------------------------------------------------------------ | | capital | Yes | -- | Total capital to deploy: "$20,000", "10 ETH", "$5K" | | chain | No | all | Target chain or "all" for cross-chain scan | | riskTolerance | No | moderate | "conservative", "moderate", "aggressive" | | pairPreference | No | -- | Optional token pair preference: "ETH/USDC", "stablecoin pairs" | | excludeTokens | No | -- | Tokens to exclude: "PEPE, SHIB" (avoid memecoins, etc.) | | capitalToken | No | auto-detect| What token the capital is in: "USDC", "ETH", auto-detect from wallet |
If the user doesn't provide capital amount, ask for it -- never guess how much to deploy.
FULL LP WORKFLOW PIPELINE
┌─────────────────────────────────────────────────────────────────────┐
│ │
│ Step 1: SCAN (opportunity-scanner) │
│ ├── Scan LP opportunities across chains │
│ ├── Filter by risk tolerance and capital size │
│ ├── Rank top 3-5 by risk-adjusted yield │
│ └── Output: Ranked Opportunity List │
│ │ │
│ ▼ USER CHOICE POINT │
│ ┌───────────────────────────────────────────────────┐ │
│ │ Present top opportunities to user. │ │
│ │ User picks one OR accepts recommendation (#1). │ │
│ └───────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ │
│ Step 2: STRATEGIZE (lp-strategist) │
│ ├── Design optimal strategy for chosen opportunity │
│ ├── Version, fee tier, range width, rebalance plan │
│ ├── Conservative/moderate/optimistic APY estimates │
│ └── Output: LP Strategy Recommendation │
│ │ │
│ ▼ │
│ │
│ Step 3: RISK CHECK (risk-assessor) │
│ ├── Receives: opportunity data + strategy details │
│ ├── Evaluates: IL, slippage, liquidity, smart contract │
│ ├── Decision: APPROVE / CONDITIONAL / VETO / HARD_VETO │
│ └── Output: Risk Assessment Report │
│ │ │
│ ▼ CONDITIONAL GATE │
│ ┌───────────────────────────────────────────────────┐ │
│ │ APPROVE / COND. APPROVE → Continue │ │
│ │ VETO / HARD_VETO → STOP with full report │ │
│ └───────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ │
│ Step 4: SWAP IF NEEDED (trade-executor) -- CONDITIONAL │
│ ├── Check wallet balances vs required tokens │
│ ├── If tokens needed: calculate swap amounts │
│ ├── USER CONFIRMATION #1: "Swap X for Y to prepare for LP?" │
│ ├── Execute swap(s) if confirmed │
│ └── Output: Swap result OR "tokens already held" │
│ │ │
│ ▼ │
│ │
│ Step 5: ENTER POSITION (liquidity-manager) │
│ ├── USER CONFIRMATION #2: "Add liquidity with these params?" │
│ ├── Handle approvals (Permit2) │
│ ├── Add liquidity at recommended range │
│ ├── Wait for transaction confirmation │
│ └── Output: Position ID, amounts deposited, tick range │
│ │ │
│ ▼ │
│ │
│ Step 6: CONFIRM & REPORT (portfolio-analyst) │
│ ├── Verify position was created successfully │
│ ├── Show portfolio impact (before vs after) │
│ ├── Monitoring instructions │
│ └── Output: Portfolio Report + Next Steps │
│ │
└─────────────────────────────────────────────────────────────────────┘Before starting the pipeline:
mcp__uniswap__check_safety_status -- verify spending limits can accommodate the capital amount.mcp__uniswap__get_agent_balance on the target chain(s) -- verify the wallet has the stated capital.Delegate to Task(subagent_type:opportunity-scanner) with:
Scan for LP opportunities with these parameters:
- Available capital: {capital}
- Chains: {chain or "all supported chains"}
- Risk tolerance: {riskTolerance}
- Type: "lp" (LP opportunities only)
- Minimum TVL: $50,000
- Top N: 5
Additional filters:
- Pair preference: {pairPreference or "none"}
- Exclude tokens: {excludeTokens or "none"}
Return the top 5 LP opportunities ranked by risk-adjusted yield.
Each opportunity must include fee APY, estimated IL, risk-adjusted yield,
TVL, volume, and risk rating.Present to user with a choice:
textStep 1/6: Opportunity Scan Complete Found 5 LP opportunities (filtered from 200+ pools): # Pool Chain Fee APY Est. IL Net APY Risk TVL 1 WETH/USDC 0.05% ETH 21% -6% 15% MEDIUM $332M 2 WETH/USDC 0.05% Base 18% -5% 13% MEDIUM $45M 3 ARB/WETH 0.30% Arb 35% -12% 23% HIGH $12M 4 USDC/USDT 0.01% ETH 8% -0.1% 7.9% LOW $200M 5 cbETH/WETH 0.05% Base 12% -3% 9% LOW $28M Recommended: #1 (WETH/USDC 0.05% on Ethereum) — best balance of yield and risk Which opportunity would you like to pursue? (1-5, or "1" to accept recommendation)
Wait for user selection before proceeding.
Delegate to Task(subagent_type:lp-strategist) with the chosen opportunity:
Design an optimal LP strategy for this opportunity:
Opportunity details (from opportunity-scanner):
{Full opportunity data from Step 1 for chosen pool}
LP parameters:
- Capital: {capital}
- Risk tolerance: {riskTolerance}
- Chain: {chain of chosen opportunity}
Provide:
1. Recommended version and fee tier (with rationale)
2. Optimal tick range (lower/upper prices, width %)
3. Conservative/moderate/optimistic APY and IL estimates
4. Rebalance strategy (trigger, frequency, estimated cost)
5. Comparison to the next-best alternativePresent to user:
textStep 2/6: Strategy Designed Pool: WETH/USDC 0.05% (V3, Ethereum) Range: $1,700 - $2,300 (±15%, medium width) Expected: 15% net APY (moderate estimate) Strategy Details: Fee APY (moderate): 21% Estimated IL: -6% Net APY: 15% Rebalance: every 2-3 weeks (trigger: price within 10% of boundary) Rebalance cost: ~$15/rebalance on Ethereum Proceeding to risk assessment...
Delegate to Task(subagent_type:risk-assessor) with compound context:
Evaluate risk for this LP strategy:
Operation: add liquidity
Token pair: {token0}/{token1}
Pool: {pool address}
Chain: {chain}
Capital: {capital}
Risk tolerance: {riskTolerance}
Strategy context (from lp-strategist):
{Full strategy recommendation from Step 2}
Opportunity context (from opportunity-scanner):
{Key metrics from Step 1: TVL, volume trend, risk rating}
Evaluate: impermanent loss risk, slippage risk (entry/exit), liquidity risk,
smart contract risk. Provide APPROVE/CONDITIONAL_APPROVE/VETO/HARD_VETO.Conditional gate (same logic as research-and-trade):
| Decision | Action | | -------------------- | ----------------------------------------------------------------------- | | APPROVE | Present risk summary, proceed to Step 4 | | CONDITIONAL_APPROVE | Show conditions, ask user if they accept | | VETO | STOP. Show opportunity + strategy + veto reason. Suggest fallbacks. | | HARD_VETO | STOP. Show reason. Non-negotiable. |
Present to user (APPROVE case):
textStep 3/6: Risk Assessment Passed Decision: APPROVE Composite Risk: MEDIUM IL Risk: MEDIUM (8.2% annual estimate for volatile pair) Slippage: LOW (deep pool, entry < 0.1% impact) Liquidity: LOW (TVL 6,640x your position) Smart Contract: LOW (V3, established pool) Proceeding to prepare tokens...
Check wallet balances against required token amounts for the LP position:
mcp__uniswap__get_agent_balance.If no swaps needed:
textStep 4/6: Token Preparation — Skipped You already hold sufficient WETH and USDC for this position. No swaps required.
If swaps needed, present and ask USER CONFIRMATION #1:
textStep 4/6: Token Preparation Required Your position needs: 0.5 WETH (~$980) 980 USDC (~$980) You currently hold: 2.0 WETH ($3,920) 0 USDC ($0) Proposed swap: Sell 0.5 WETH → Buy ~980 USDC Estimated slippage: 0.05% Gas: ~$8 Approve this swap to prepare tokens for LP? (yes/no)
Only execute the swap if the user explicitly confirms. If the user declines, stop the pipeline and present what was accomplished (scan + strategy + risk assessment).
Present the full LP entry details and ask USER CONFIRMATION #2:
textStep 5/6: Ready to Add Liquidity Pool: WETH/USDC 0.05% (V3, Ethereum) Deposit: 0.5 WETH (~$980) 980 USDC (~$980) Total: ~$1,960 Range: Lower: $1,700 (tick -204714) Upper: $2,300 (tick -199514) Current: $1,963 — IN RANGE Width: ±15% (medium) Expected Fee APY: ~15-21% (based on 7d pool data) Add liquidity with these parameters? (yes/no)
Only proceed if the user confirms. Then delegate to Task(subagent_type:liquidity-manager):
Add liquidity to this pool:
Pool: {pool address}
Chain: {chain}
Version: {version}
Token0: {token0 address} — Amount: {amount0}
Token1: {token1 address} — Amount: {amount1}
Tick lower: {tick_lower}
Tick upper: {tick_upper}
Strategy context:
- Range strategy: {medium/narrow/wide}
- From lp-strategist recommendation
Execute: handle approvals, simulate, route through safety-guardian, add liquidity,
wait for confirmation. Return position ID and actual amounts deposited.Delegate to Task(subagent_type:portfolio-analyst) with the new position:
Report on the portfolio impact of this new LP position:
New position:
- Position ID: {position_id from Step 5}
- Pool: {pool_address}
- Chain: {chain}
- Tokens deposited: {amounts}
- Tick range: {lower} to {upper}
- Transaction: {tx_hash}
Wallet address: {wallet_address}
Provide:
1. New position details and current status (in-range confirmation)
2. Portfolio impact (if other positions exist, show before/after composition)
3. Total portfolio value across all chains
4. Monitoring recommendationsPresent final result:
textStep 6/6: Position Confirmed & Portfolio Updated New Position: #456789 Pool: WETH/USDC 0.05% (V3, Ethereum) Status: IN RANGE Value: $1,960 Deposited: 0.5 WETH ($980) 980 USDC ($980) Range: $1,700 — $2,300 (current: $1,963) Expected Returns: Fee APY: 15-21% (moderate-optimistic) Est. IL: -5 to -8% annualized Net: 9-15% annualized Portfolio Impact: Total LP Value: $1,960 (new) + $45,000 (existing) = $46,960 LP Allocation: 42% WETH, 35% USDC, 23% other Chain Split: 85% Ethereum, 15% Base ────────────────────────────────────── Pipeline Summary ────────────────────────────────────── Scan: 5 opportunities found, #1 selected Strategy: V3 0.05%, ±15% range, bi-weekly rebalance Risk: APPROVED (MEDIUM composite) Swap: 0.5 WETH → 980 USDC (preparation) Position: #456789 — IN RANGE Cost: $15.20 total gas (swap + LP entry) Next Steps: - Monitor: "How are my positions doing?" - Rebalance when needed: "Rebalance position #456789" - Collect fees: "Collect fees from position #456789"
These are the moments where the skill must stop and ask rather than assume:
| Situation | Action | | ------------------------------------- | ---------------------------------------------------------------- | | Capital amount not specified | Ask: "How much capital would you like to deploy?" | | Multiple good opportunities | Present top 3-5, let user choose | | Risk-assessor VETO | Stop. Show research + strategy + veto reason. | | Swap needed for token preparation | USER CONFIRMATION #1: show swap details, ask to proceed | | Ready to add liquidity | USER CONFIRMATION #2: show position details, ask to proceed | | Capital exceeds safety spending limit | Stop. Show limit. Suggest reducing amount or adjusting limits. | | Wallet doesn't have stated capital | Stop. Show actual balance. Ask to adjust amount. | | Best opportunity is on a different chain than wallet funds | Explain cross-chain situation, suggest bridge or chain choice |
If the pipeline fails mid-way, report what was accomplished and what remains:
textLP Workflow — Partial Completion Completed: [done] Step 1: Scan — 5 opportunities found, #1 selected [done] Step 2: Strategy — V3 0.05%, ±15% range designed [done] Step 3: Risk — APPROVED (MEDIUM) [FAIL] Step 4: Swap — Transaction reverted (insufficient gas) Remaining: [ ] Step 5: Add liquidity [ ] Step 6: Portfolio report Recovery Options: - Ensure sufficient ETH for gas and retry: "Continue LP workflow" - Add liquidity manually with the strategy above: "Add liquidity to WETH/USDC 0.05%" - Start over: "Full LP workflow with $X"
textFull LP Workflow Complete Opportunity: {pool_pair} {fee}% on {chain} Strategy: {version}, {range_width} range, {rebalance_frequency} rebalance Risk: {decision} ({composite_risk}) Position: #{position_id} — {status} Value: ${total_value} Returns (moderate estimate): Fee APY: {fee_apy}% Est. IL: {il}% Net APY: {net_apy}% Cost: ${total_gas} gas across {n} transactions Pipeline: Scan -> Strategy -> Risk -> Swap -> Enter -> Confirm (all passed)
| Error | User-Facing Message | Suggested Action | | ---------------------------------- | -------------------------------------------------------------------------- | --------------------------------------- | | No opportunities found | "No LP opportunities match your criteria on {chain}." | Broaden chain filter or lower minTVL | | Opportunity-scanner fails | "Opportunity scan failed. Cannot identify LP targets." | Try scan-opportunities directly | | LP-strategist fails | "Strategy design failed for {pool}. Scan results preserved." | Try lp-strategy or optimize-lp directly | | Risk-assessor VETO | "Risk assessment vetoed: {reason}. Strategy: {summary}." | Pick a different opportunity or reduce size | | Risk-assessor HARD_VETO | "Strategy blocked: {reason}. This cannot be overridden." | Choose a lower-risk opportunity | | Insufficient balance for swap | "Not enough {token} to prepare for LP. Have {X}, need {Y}." | Reduce capital or acquire tokens | | Swap execution fails | "Token swap failed: {reason}. Strategy and risk data preserved." | Retry or swap manually | | Liquidity add fails | "Failed to add liquidity: {reason}. Tokens are still in your wallet." | Retry or use manage-liquidity directly | | Position not confirmed | "Position created but not yet confirmed on-chain. Check back in a moment." | Wait and check with track-performance | | Safety spending limit exceeded | "Capital of ${X} exceeds spending limit of ${Y}." | Reduce amount or adjust safety config | | Wallet not configured | "No wallet configured. Cannot execute transactions." | Set up wallet with setup-agent-wallet | | User declines swap confirmation | "Token swap cancelled. Strategy preserved — you can proceed manually." | Use manage-liquidity with manual prep | | User declines LP confirmation | "LP entry cancelled. All prior research is shown above." | Adjust parameters and retry |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-17 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 15 counted toward the lift figure. The other 7 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +23 percentage points is the difference between those two pass rates over the 15 comparable cases. 7 cases got worse with the skill loaded, and they are included in that figure.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.