uniswap/uniswap-aiMIT1 file

Configurator

Configure CCA (Continuous Clearing Auction) smart contract parameters through an interactive bulk form flow. Use when user says "configure auction", "cca auction", "setup token auction", "auction configuration", "continuous auction", or mentions CCA contracts.

Specification
Skill ID
uniswap/uniswap-ai/configurator
Publisher
uniswap
Repository
uniswap-ai
Installs
0
Files
1
License
MIT
Synced
Sep 23, 2026
How to use it

Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.

uniswap/uniswap-ai/configuratorInstalls these files
  • SKILL.md

What this skill tells the agent

CCA Configuration

Configure Continuous Clearing Auction (CCA) smart contract parameters for fair and transparent token distribution.

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.

Instructions for Claude Code

When the user invokes this skill, guide them through a bulk interactive form configuration flow using AskUserQuestion. Collect parameters in batches to minimize user interaction rounds.

Bulk Interactive Form Rules

  1. Batch questions - Ask up to 4 questions at once using a single AskUserQuestion call
  2. Allow direct input - For fields requiring custom values (addresses, numbers):
  • Provide a "Not available yet" or "Skip for now" option
  • The "Other" option (automatically provided) allows direct custom input
  • NEVER ask "Do you have X?" as a separate question
  1. Store answers - Keep track of all collected values in a configuration object
  2. Validate after collection - After each batch, validate all inputs before proceeding
  3. Show progress - After each batch, show which parameters are collected and which remain

Input Validation Rules

Rule 4 above says validate after each batch. This is what validating means. Most values below arrive by selecting one of the preset options, but any of them can instead arrive as free text: through the "Other" option, which AskUserQuestion provides on every question, and through plain conversation whenever AskUserQuestion is unavailable and the runtime-compatibility fallback above applies. A custom RPC endpoint is the clearest case, because the Network question lists named networks and no endpoint field, yet a user who rejects the public endpoints still supplies one through "Other" or in conversation. Validate every value against the checks below before writing it into the configuration file or interpolating it into a curl command. Do not look for an exemption: a value that really is one of the presets this skill offered passes every check trivially, and under the conversational fallback there is no way to establish where a value came from in the first place.

  • Ethereum addresses (token, currency, tokensRecipient, fundsRecipient, validationHook): MUST match ^0x[a-fA-F0-9]{40}$ — reject otherwise
  • Chain IDs: MUST be from the supported chains list (1, 130, 1301, 8453, 42161, 11155111)
  • Numeric values (supply, prices, blocks, MPS, block deltas): MUST be non-negative and match ^[0-9]+\.?[0-9]*$
  • RPC endpoint URL: prefer a public endpoint from the Available Public RPCs table. A custom endpoint, however it arrives, MUST be https://-scheme and MUST NOT contain any metacharacter or whitespace from the rule below before it reaches the curl command in Fetch Block Number. "It came from the user, not the table" is not an exemption.
  • REJECT any input containing shell metacharacters or whitespace: ;, |, &, $, ` `, (, ), >, <, \, ', ", spaces, tabs, newlines. $(...) and backticks execute even inside double quotes, and a space splits one value into extra curl` flags, so neither is ever safe to interpolate. Abort and report which value and which character failed rather than stripping the offending characters and continuing.
  • Never pass raw user input directly to a shell command without validation, and always double-quote the interpolation in any command shown to the user.

A value that fails any check is never written to the configuration file either. The deployer skill reads that file and interpolates its fields into forge and cast commands, so an unvalidated value stored here becomes an injected command there.

Configuration Flow

Collect parameters in these batches:

Batch 1: Task Selection (1 question)

Question 1: Task Type

  • Prompt: "What would you like to do with CCA?"
  • Options: "Configure auction parameters", "Generate supply schedule only", "Review existing config", "Deploy existing config"

After collection: If not "Configure auction parameters", skip to appropriate section.


Batch 2: Basic Configuration (4 questions)

Question 1: Network

  • Prompt: "Which network to deploy on?"
  • Options: "Ethereum Mainnet", "Unichain (Mainnet)", "Unichain Sepolia (Testnet)", "Base", "Arbitrum", "Sepolia"
  • Store: chainId, blockTime, rpcUrl, currencyDecimals (for selected currency)

Question 2: Token Address

  • Prompt: "Token to be auctioned?"
  • Options: "Token not deployed yet" (placeholder), Custom address (via "Other")
  • Validation: Must be 42 chars starting with 0x
  • Store: token

Question 3: Total Supply

  • Prompt: "How many tokens to auction?"
  • Options: "100 million tokens (18 decimals)", "1 billion tokens (18 decimals)", "10 billion tokens (18 decimals)", Custom (via "Other")
  • Validation: Must be <= 1e30 wei
  • Store: totalSupply

Question 4: Currency

  • Prompt: "What currency should bidders use?"
  • Options: "ETH (Native)", "USDC on [network]", "USDT on [network]", Custom ERC20 (via "Other")
  • Validation: Must be 42 chars starting with 0x or address(0)
  • Store: currency

After collection: Validate all inputs, show summary of basic configuration.


Batch 3: Timing & Pricing (4 questions)

Question 1: Auction Duration

  • Prompt: "How long should the auction run?"
  • Options: "1 day", "2 days", "3 days", "7 days", Custom blocks (via "Other")
  • Calculate blocks based on network block time
  • Store: auctionBlocks

Question 2: Prebid Period

  • Prompt: "Include a prebid period? (time when no tokens are sold)"
  • Options: "No prebid period (0 blocks)", "12 hours", "1 day", Custom blocks (via "Other")
  • Calculate blocks based on network block time
  • Store: prebidBlocks

Question 3: Floor Price

  • Prompt: "Starting floor price? (ratio of currency per token)"
  • Options: "0.10x (10% of 1:1 ratio)", "0.01x (1% of 1:1 ratio)", "0.001x (0.1% of 1:1 ratio)", Custom ratio (via "Other")
  • Calculate Q96 value accounting for decimal differences: Q96 * ratio / 10^(tokenDecimals - currencyDecimals)
  • For USDC (6 decimals) and 18-decimal token: Q96 * ratio / 10^12
  • For native ETH (18 decimals) and 18-decimal token: Q96 * ratio / 10^0 = Q96 * ratio
  • Store: floorPriceRatio, floorPrice (Q96), tokenDecimals, currencyDecimals

Question 4: Tick Spacing

  • Prompt: "Tick spacing as percentage of floor price?"
  • Options: "1% of floor price (Recommended)", "10% of floor price", "0.1% of floor price", Custom percentage (via "Other")
  • Calculate: tickSpacing = int(floorPrice * percentage)
  • CRITICAL: Round floor price DOWN to be evenly divisible by tick spacing:
  • roundedFloorPrice = (floorPrice // tickSpacing) * tickSpacing
  • Verify: roundedFloorPrice % tickSpacing == 0 must be true
  • Validate: Tick spacing must be >= 1 basis point of floor price
  • Store: tickSpacingPercentage, tickSpacing (Q96), roundedFloorPrice

After collection: Validate inputs, verify floor price divisibility, calculate and display Q96 values, show timing summary.


Batch 4: Recipients & Launch (4 questions)

Question 1: Tokens Recipient

  • Prompt: "Where should unsold tokens be sent?"
  • Options: "Same as funds recipient", Custom address (via "Other")
  • Validation: Must be 42 chars starting with 0x
  • Store: tokensRecipient

Question 2: Funds Recipient

  • Prompt: "Where should raised funds be sent?"
  • Options: "Same as tokens recipient", Custom address (via "Other")
  • Validation: Must be 42 chars starting with 0x
  • Store: fundsRecipient

Question 3: Start Time

  • Prompt: "When should the auction start?"
  • Options: "In 1 hour", "In 6 hours", "In 24 hours", Custom block number (via "Other")
  • Fetch current block number from RPC and calculate
  • Store: startBlock

Use this skill in a project

Open any RiverX project, search the Skills panel for uniswap/uniswap-ai/configurator, and install it in one click.

Use this skill