Skip to content
Back to skills

Setup Dca

ASecurity

Set up a non-custodial dollar-cost averaging strategy on Uniswap. Use when user wants to create recurring swaps, auto-buy ETH/BTC/SOL with USDC on a schedule, or build a DCA bot. Covers USDC approval, swap path selection, frequency configuration, Gelato keeper automation, and monitoring. Works on local testnet for development or mainnet for production.

  • 2,128 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 6, 2026
ai-agentsrustgorailstesting

Works with

  • mcp

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned September 6, 2026

npx -y skills add LeoYeAI/openclaw-master-skills --skill setup-dca --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Setup Dca?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Setup Dca
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/leoyeai-setup-dca/badge)](https://www.skillsdirectory.com/skills/leoyeai-setup-dca)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: setup-dca
description: >-
  Set up a non-custodial dollar-cost averaging strategy on Uniswap. Use when
  user wants to create recurring swaps, auto-buy ETH/BTC/SOL with USDC on a
  schedule, or build a DCA bot. Covers USDC approval, swap path selection,
  frequency configuration, Gelato keeper automation, and monitoring. Works on
  local testnet for development or mainnet for production.
model: opus
allowed-tools:
  - Task(subagent_type:trade-executor)
  - mcp__uniswap__execute_swap
  - mcp__uniswap__get_quote
  - mcp__uniswap__get_token_price
  - mcp__uniswap__get_agent_balance
  - mcp__uniswap__get_pools_by_token_pair
  - mcp__uniswap__check_safety_status
---

# Setup DCA

## Overview

Sets up a complete non-custodial dollar-cost averaging strategy on Uniswap. Instead of manually executing swaps on a schedule, remembering to check prices, finding optimal routes, and managing approvals, this skill configures the entire DCA lifecycle in one command: validates the strategy, selects the best swap path, configures execution frequency, handles Permit2 approvals, executes the first swap, and sets up ongoing automation.

**Why this is 10x better than doing it manually:**

1. **Optimal path selection**: Automatically discovers the best swap route across all Uniswap pool versions and fee tiers for your token pair. Manual DCA often uses suboptimal routes, losing 0.1-0.5% per execution to unnecessary slippage.
2. **Approval management**: Handles the Permit2 approval flow correctly -- a common source of failed DCA executions. One-time setup that covers all future executions.
3. **Two automation modes**: Self-execute mode (agent triggers swaps) for development and testing, or Gelato keeper mode (on-chain automation) for trustless production execution. Without this skill, setting up Gelato keepers requires understanding task creation, resolver contracts, and fee funding.
4. **Built-in safety**: Every execution routes through the safety pipeline with slippage guards, balance checks, and circuit breakers. Manual DCA has no guardrails -- a misconfigured bot can drain a wallet on a single bad swap.
5. **Cost projection**: Before committing, shows projected total cost including gas, slippage, and keeper fees over the full DCA period. No surprises.

## When to Use

Activate when the user says anything like:

- "Set up dollar-cost averaging on Uniswap"
- "Create a recurring swap"
- "Auto-buy ETH with USDC weekly"
- "Build a DCA bot"
- "DCA into ETH every day with $100"
- "Set up weekly buys of WBTC"
- "Accumulate UNI over the next 3 months"
- "Schedule recurring swaps from USDC to ETH"

**Do NOT use** when the user wants a one-time swap (use `execute-swap` instead), wants to manage an existing DCA (not yet supported -- cancel and recreate), or wants to DCA into LP positions (use `full-lp-workflow` instead).

## Parameters

| Parameter            | Required | Default      | How to Extract                                                                  |
| -------------------- | -------- | ------------ | ------------------------------------------------------------------------------- |
| targetAsset          | Yes      | --           | Token to accumulate: "ETH", "WBTC", "UNI", "SOL", or 0x address               |
| amountPerExecution   | Yes      | --           | Amount per swap: "$100", "100 USDC", "0.1 ETH worth"                           |
| inputToken           | No       | USDC         | Token to spend: "USDC", "USDT", "DAI", "WETH"                                 |
| frequency            | No       | weekly       | "daily", "weekly", "biweekly", "monthly"                                       |
| totalExecutions      | No       | --           | Number of executions: "52 weeks", "12 months", "indefinite"                    |
| chain                | No       | ethereum     | Target chain: "ethereum", "base", "arbitrum"                                   |
| slippageTolerance    | No       | 50 (0.5%)    | Max slippage in basis points per execution                                     |
| keeperMode           | No       | self-execute | "self-execute" (agent-triggered) or "gelato" (on-chain keeper automation)      |
| startImmediately     | No       | true         | Whether to execute the first swap now                                          |

If the user doesn't provide `amountPerExecution` or `targetAsset`, **ask for them** -- never guess a DCA strategy.

## Workflow

```
                           DCA SETUP PIPELINE
  ┌──────────────────────────────────────────────────────────────────────┐
  │                                                                      │
  │  Step 1: VALIDATE & ANALYZE                                          │
  │  ├── Check wallet balance (enough for at least 3 executions)         │
  │  ├── Verify target asset exists on chain                             │
  │  ├── Get current price of target asset                               │
  │  └── Output: Balance check + current price baseline                  │
  │          │                                                           │
  │          ▼                                                           │
  │                                                                      │
  │  Step 2: FIND OPTIMAL SWAP PATH                                      │
  │  ├── Discover all pools for inputToken/targetAsset                   │
  │  ├── Get quotes across fee tiers at DCA amount                       │
  │  ├── Select path with lowest price impact at execution size          │
  │  └── Output: Best route + expected slippage per execution            │
  │          │                                                           │
  │          ▼                                                           │
  │                                                                      │
  │  Step 3: COST PROJECTION                                             │
  │  ├── Estimate gas cost per execution                                 │
  │  ├── Calculate total cost over full DCA period                       │
  │  ├── Project keeper fees (if Gelato mode)                            │
  │  ├── Compare DCA vs lump-sum at current price                        │
  │  └── Output: Full cost breakdown + projection                        │
  │          │                                                           │
  │          ▼                                                           │
  │                                                                      │
  │  Step 4: USER CONFIRMATION                                           │
  │  ├── Present: strategy summary + cost projection                     │
  │  ├── Ask: "Proceed with this DCA strategy?"                          │
  │  └── User must explicitly confirm                                    │
  │          │                                                           │
  │          ▼                                                           │
  │                                                                      │
  │  Step 5: CONFIGURE & EXECUTE                                         │
  │  ├── Check/set Permit2 approval for inputToken                       │
  │  ├── If startImmediately: execute first swap via trade-executor      │
  │  ├── If gelato: create Gelato task with resolver + fund keeper       │
  │  ├── If self-execute: write DCA config to .uniswap/dca-config.json  │
  │  └── Output: Configuration + first execution result                  │
  │          │                                                           │
  │          ▼                                                           │
  │                                                                      │
  │  Step 6: MONITORING SETUP                                            │
  │  ├── Record baseline: price, balance, execution count                │
  │  ├── Set up execution tracking                                       │
  │  └── Output: DCA dashboard with next execution time                  │
  │                                                                      │
  └──────────────────────────────────────────────────────────────────────┘
```

### Step 1: Validate & Analyze

Check prerequisites before committing to a strategy:

1. Call `mcp__uniswap__get_agent_balance` to verify the wallet has sufficient `inputToken` balance for at least 3 executions (safety buffer).
2. Call `mcp__uniswap__get_token_price` for the `targetAsset` to establish a price baseline.
3. Call `mcp__uniswap__check_safety_status` to verify spending limits can accommodate the DCA.

**Present to user:**

```text
Step 1/6: Validation

  Wallet Balance: 5,200 USDC on Ethereum
  DCA Budget:     $100/week x 52 weeks = $5,200 total
  Balance Check:  PASS (covers full DCA period)

  Target Asset:   ETH at $1,960.00
  Per Execution:  ~0.051 ETH per $100

  Proceeding to path selection...
```

**Gate check:** If the wallet balance covers fewer than 3 executions, warn the user and ask if they want to proceed with a shorter DCA period.

### Step 2: Find Optimal Swap Path

1. Call `mcp__uniswap__get_pools_by_token_pair` for `inputToken`/`targetAsset` on the target chain.
2. Call `mcp__uniswap__get_quote` at the `amountPerExecution` size for the top 2-3 pools to compare price impact.
3. Select the route with the lowest price impact at the DCA execution size.

**Present to user:**

```text
Step 2/6: Path Selection

  Best Route: USDC -> WETH via 0.05% pool (V3, Ethereum)
  Pool TVL:   $285M
  Impact:     ~0.01% per $100 execution
  Alternative: 0.3% pool (0.02% impact -- slightly worse)

  Proceeding to cost projection...
```

### Step 3: Cost Projection

Calculate the full cost of the DCA strategy:

```text
Step 3/6: Cost Projection

  DCA Strategy: $100 USDC -> ETH weekly for 52 weeks

  Per Execution:
    Swap Amount:   $100.00
    Est. Slippage: ~$0.01 (0.01%)
    Gas Cost:      ~$2.50 (at current gas)
    Net Purchase:  ~$97.49 of ETH

  Full Period (52 weeks):
    Total Spent:   $5,200.00
    Est. Gas:      ~$130.00 (2.5%)
    Est. Slippage: ~$0.52 (0.01%)
    Net Invested:  ~$5,069.48

  At Current Price ($1,960/ETH):
    Lump Sum Now:  2.653 ETH for $5,200
    DCA Estimate:  ~2.587 ETH (varies with price)

  Ready for your confirmation...
```

### Step 4: User Confirmation

Present the full strategy summary and ask for explicit confirmation:

```text
DCA Strategy Confirmation

  Buy:        ETH with USDC
  Amount:     $100 per execution
  Frequency:  Weekly (every 7 days)
  Duration:   52 executions
  Chain:      Ethereum
  Route:      USDC/WETH 0.05% (V3)
  Slippage:   0.5% max
  Mode:       Self-execute (agent-triggered)
  Start:      Immediately (first swap now)
  Total Cost: ~$5,200 + ~$130 gas

  Proceed with this DCA strategy? (yes/no)
```

**Only proceed to Step 5 if the user explicitly confirms.**

### Step 5: Configure & Execute

Delegate the first execution to `Task(subagent_type:trade-executor)`:

```
Execute this swap as the first DCA execution:
- Sell: {amountPerExecution} {inputToken}
- Buy: {targetAsset}
- Chain: {chain}
- Slippage tolerance: {slippageTolerance} bps
- Context: This is execution 1 of {totalExecutions} in a DCA strategy.
  Route through the {fee}% pool for optimal execution at this size.
```

After execution, write the DCA configuration:

**For self-execute mode**, write `.uniswap/dca-config.json`:

```json
{
  "strategy": "dca",
  "inputToken": "USDC",
  "targetAsset": "WETH",
  "amountPerExecution": "100000000",
  "frequency": "weekly",
  "nextExecution": "2026-02-17T00:00:00Z",
  "totalExecutions": 52,
  "completedExecutions": 1,
  "chain": "ethereum",
  "chainId": 1,
  "route": {
    "pool": "0x...",
    "fee": 500,
    "version": "v3"
  },
  "slippageTolerance": 50,
  "status": "active",
  "createdAt": "2026-02-10T00:00:00Z",
  "executionHistory": []
}
```

**For Gelato mode**, create a Gelato Automate task with:
- Resolver: check if `block.timestamp >= nextExecution`
- Executor: swap via Universal Router with the configured route
- Fund the Gelato task with ETH for keeper fees

### Step 6: Monitoring Setup

```text
Step 6/6: DCA Active

  First Execution:
    Sold:     100 USDC
    Received: 0.0510 WETH ($99.96)
    Gas:      $2.30
    Tx:       https://etherscan.io/tx/0x...

  Schedule:
    Next:     2026-02-17 (7 days)
    Remaining: 51 executions
    Mode:     Self-execute

  Config: .uniswap/dca-config.json
```

## Output Format

### Successful Setup

```text
DCA Strategy Active

  Strategy:
    Buy:        ETH with USDC
    Amount:     $100 per execution
    Frequency:  Weekly
    Duration:   52 executions (~1 year)
    Chain:      Ethereum
    Route:      USDC/WETH 0.05% (V3)
    Mode:       Self-execute

  First Execution:
    Sold:       100 USDC
    Received:   0.0510 WETH ($99.96)
    Slippage:   0.04%
    Gas:        $2.30
    Tx:         https://etherscan.io/tx/0x...

  Projections:
    Total Budget:    $5,200 + ~$130 gas
    Est. ETH:        ~2.59 ETH (at current prices)
    Next Execution:  2026-02-17

  Config: .uniswap/dca-config.json
  Status: ACTIVE -- 1/52 executions complete
```

### Setup Without Immediate Execution

```text
DCA Strategy Configured (Not Started)

  Strategy:
    Buy:        ETH with USDC
    Amount:     $100 per execution
    Frequency:  Weekly
    Chain:      Ethereum
    Route:      USDC/WETH 0.05% (V3)
    Mode:       Self-execute

  First Execution: 2026-02-17 (scheduled)
  Config: .uniswap/dca-config.json
  Status: CONFIGURED -- awaiting first execution
```

## Important Notes

- **DCA is a long-term strategy.** This skill sets up the configuration and optionally executes the first swap. Subsequent executions depend on the keeper mode: self-execute requires the agent to be running, Gelato mode runs autonomously on-chain.
- **Self-execute mode requires the agent to be online.** If the agent is offline when an execution is due, it will execute on the next run. Gelato mode is fully autonomous and does not require the agent.
- **Gas costs matter for small DCA amounts.** At $2-5 per swap on Ethereum mainnet, a $10/week DCA loses 20-50% to gas. The skill warns if gas exceeds 5% of the execution amount and suggests Base or Arbitrum for cheaper execution.
- **Slippage is typically negligible for DCA.** DCA amounts are usually small relative to pool TVL, so price impact is minimal. The skill still enforces the slippage tolerance as a safety guard.
- **The DCA config file is the source of truth.** The `.uniswap/dca-config.json` file tracks execution history, next execution time, and strategy parameters. Deleting it effectively cancels the DCA.
- **To cancel a DCA**, delete the config file or set `status` to `"cancelled"`. For Gelato mode, the Gelato task must also be cancelled on-chain.
- **L2 chains are recommended for small DCA amounts.** Base and Arbitrum have gas costs 10-100x lower than Ethereum mainnet, making small DCA strategies viable.

## Error Handling

| Error                      | User-Facing Message                                                                | Suggested Action                                      |
| -------------------------- | ---------------------------------------------------------------------------------- | ----------------------------------------------------- |
| Insufficient balance       | "Wallet has {X} {inputToken} but DCA needs at least {Y} for 3 executions."        | Fund wallet or reduce amount per execution            |
| Target asset not found     | "Could not find {targetAsset} on {chain}."                                         | Check spelling or provide contract address            |
| No pools found             | "No Uniswap pools found for {inputToken}/{targetAsset} on {chain}."                | Try a different chain or token pair                   |
| Gas too high               | "Gas cost (~${X}) exceeds 5% of execution amount (${Y}). Consider using Base."    | Switch to an L2 chain for cheaper execution           |
| Safety check failed        | "Safety limits would be exceeded by this DCA strategy."                            | Adjust spending limits or reduce DCA amount           |
| Approval failed            | "Could not approve {inputToken} for Permit2: {reason}."                            | Check wallet permissions and retry                    |
| First execution failed     | "First DCA execution failed: {reason}. Strategy configured but not started."       | Fix the issue and manually trigger first execution    |
| Gelato setup failed        | "Could not create Gelato automation task: {reason}."                               | Use self-execute mode instead                         |
| Config write failed        | "Could not write DCA configuration: {reason}."                                     | Check file permissions                                |
| Wallet not configured      | "No wallet configured. Cannot execute DCA."                                        | Set up wallet with setup-agent-wallet                 |
| Spending limit exceeded    | "DCA total (${X}) exceeds daily spending limit (${Y})."                            | Adjust spending limits or reduce DCA frequency/amount |

Files in this skill

  • README.md976 B
  • SKILL.md17.4 KB
  • _meta.json277 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…