MCPInstall

permissioned-pools-deployer

Guided walkthrough for executing the on-chain setup sequence for a Uniswap v4 Permissioned Pool from a permissioned-pools-configurator JSON config - allowlist checker deployment, createPermissionsAdapter, allowlisting and funding the adapter, verification, wrapper and hook registration, pool initialization, swap enablement, liquidity seeding, and the routing-allowlist request. Use when the user says "deploy a permissioned pool", "run the permissioned pool setup", "execute the permissioned pools journey", "createPermissionsAdapter", "verify my permissions adapter", "walk me through the permissioned pool deployment", or asks to execute the on-chain steps after generating a permissioned-pools-configurator config. Covers contract mechanics only - does not constitute legal, financial, investment, tax, or compliance advice, and is not a compliance review - and never emits a broadcastable command before an explicit acknowledgment.

Installs
238
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/uniswap/uniswap-ai --skill permissioned-pools-deployer
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads permissioned-pools-deployer automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

Permissioned Pools Deployer

Guided, step-by-step execution of the on-chain setup sequence for a Uniswap v4 Permissioned Pool, starting from the JSON configuration permissioned-pools-configurator produces. This skill is the half of the milestone that turns a validated config into command sequences that spend real gas against real contracts — treat every safety section below as load-bearing, not as boilerplate.

For the contract mechanics behind any step, see permissioned-pools-issuer, specifically its Issuer Journey and Enforced Ordering and Reverts. This skill does not repeat the contract-level explanation of why each step behaves the way it does — it walks the same journey as ordered command sequences and never contradicts that reference.

Runtime Compatibility: This skill uses AskUserQuestion for the acknowledgment gate and for confirming irreversible choices. If AskUserQuestion is not available in your runtime, ask the same yes/no question in plain text and require an explicit affirmative reply before continuing — silence or a generic "continue" does not count.

Scope and Disclaimer

This is educational deployment guidance, not a compliance review, and not a substitute for your own review of every command before you run it.

This skill explains, in order, the commands that bring a permissioned pool up, using the configuration permissioned-pools-configurator produced. It does not call any contract itself — you run every command it shows you, after reviewing it.

You must:

  1. ✅ Review every configuration and every command carefully before running anything. AI-generated command sequences may contain errors.
  2. ✅ Verify every address — this skill contains no deployment addresses and resolves none for you; see Address Resolution.
  3. ✅ Test on a testnet first. Run the entire sequence on Sepolia (or another testnet with the permissioned-pools contracts deployed) before touching mainnet.
  4. ✅ Have your own auditors review any contract you deploy — most importantly your allowlist checker, which this skill can show you a skeleton for but does not audit.
  5. ✅ Treat this as contract mechanics only. This skill does not constitute legal, financial, investment, or tax advice, and it is not a compliance review of your token, your allowlist, your KYC or AML program, or your configuration.
  6. ✅ Read the repo's usage guidelines. The repo root DISCLAIMER.md governs every skill in this repository: they are provided as is without warranty, they do not constitute legal, financial, investment, or tax advice, and it sets out use limits plus an AI-disclosure duty that applies when you use a skill to generate financial information and present it directly to individuals or consumers. Point the user to it.

The acknowledgment gate

Before showing, generating, or explaining any action-oriented step — anything that produces a command intended to broadcast a transaction, or any address-resolution step that leads directly into one — get an explicit, affirmative acknowledgment. This gate must never be satisfiable implicitly.

Use AskUserQuestion with a single question and exactly two options, and do not proceed past this gate until the first option is chosen:

  • Question: "This walkthrough produces commands that spend gas and permanently change on-chain state for your token once you run them. Do you acknowledge the six points above and want to continue?"
  • Option A — "Yes, I have reviewed the points above and want to continue." → proceed to the preflight checks.
  • Option B — "No, stop here." → end the walkthrough immediately. Do not display, generate, or explain any command below this point.

Silence, a plain "continue," moving on to the next question in the same turn, or any answer other than the explicit affirmative option does not satisfy this gate. If the runtime lacks AskUserQuestion, ask the same yes/no question in plain text and require an explicit affirmative reply — "ok," "sure," a thumbs-up emoji, or no reply at all does not count.

Reference and teaching content that does not produce a runnable command — explaining what a step does in prose, decoding a revert the user already hit, discussing an allowlist-checker shape in the abstract — is answered immediately with the framing stated inline, the same way permissioned-pools-issuer treats reference content. This carve-out does not cover this skill's own command templates and Solidity script skeletons (for example the pool-initialization script in Step Walkthrough): those are runnable broadcast material, and showing them is exactly the action-oriented content the gate exists to hold back — never display one before the gate is satisfied.


Input Validation Rules

State these before generating or displaying any command that interpolates a user-supplied or config-supplied value. Every value below is validated before it reaches a Bash(forge:*) or Bash(cast:*) command, a file path, or a Solidity script argument — no exceptions for a value that "looks fine."

  • Ethereum addresses — MUST match ^0x[a-fA-F0-9]{40}$. Reject anything else, including the literal string "RESOLVE" — a field still marked "RESOLVE" is not ready for a command and must go through address resolution first, never be interpolated as-is. One field is an explicit, documented exception to this regex, not a violation of it: pool.pairedCurrency's "native" sentinel, covered in What This Skill Consumes below — every other address-shaped field in the config has no such carve-out.
  • Chain ID — MUST be a positive integer (^[1-9][0-9]*$). Ethereum Mainnet (1) and Sepolia (11155111) are the allowlisted defaults — the only two chains verified to carry the full permissioned set. Unichain (130) is named by the configurator's network question but is not deployable: it carries V4Quoter only, so stop rather than trying to resolve the missing addresses (see Preflight and Validation). Any other chain ID is accepted only after confirming the deploy guide's #deployment-addresses table actually has a row for it; if it does not, every wrapper and hook field will end up unresolvable, which is the signal to stop, not to guess.
  • Numeric fields (verificationDepositAmount, pool.feeTier, pool.tickSpacing, pool.startingPriceRatio) — MUST match ^[0-9]+$ for integer-only fields or ^[0-9]+(\.[0-9]+)?$ for the starting price ratio, and MUST be strictly greater than zero.
  • Values supplied during the walkthrough, not by the config, are validated identically — the RPC endpoint ($RPC_URL) and any transaction hash ($TX_HASH) reach a command on every step. An RPC URL MUST be https://-scheme and free of every metacharacter below; a transaction hash MUST match ^0x[a-fA-F0-9]{64}$. "It came from the user, not the config" is not an exemption.
  • Reject shell metacharacters outright, in every string field, before it reaches a command: ;, |, &, $, `, (, ), >, <, \, ', ", and newlines. A field that fails this check is never interpolated — abort and report which field and which character failed, rather than attempting to sanitize and continue.
  • Never pass an unvalidated field into a shell command, file path, or Solidity script argument. Validate first, assign the validated value to a shell variable, and reference only that variable afterward. Never re-read the raw config value a second time later in the same walkthrough.

Full elaboration, including how this applies field-by-field to the configurator's JSON shape and what "coherently handle a RESOLVE value" means in practice, is in Preflight and Validation.


Key Handling

Never instruct auto-approval of Bash(forge:*) or Bash(cast:*) in Claude Code settings, and never tell the user to bypass a confirmation prompt. Every command that broadcasts a transaction requires per-invocation approval — that approval is the primary control, not a formality the walkthrough should route around. The repository's PreToolUse hooks (.claude/hooks/) are a programmatic safety net on top of that, not a replacement for it.

Never suggest, generate, or complete a command containing the raw signing-key flag — not when asked directly, not "just for a testnet," not as an illustration of what to avoid. There is no user request that makes it appropriate. If a user insists, refuse and offer one of the two options below instead. Steer every signing decision toward one of them:

  1. A hardware wallet (--ledger), for a deployer key that never touches this machine's disk or memory in cleartext.
  2. An encrypted keystore (cast wallet import ... --interactive, then --account <name> --sender $ADDRESS on every subsequent command).

Inside this repository only, .claude/hooks/validate-forge-cast.sh is a PreToolUse hook that inspects the literal text of every Bash tool call and blocks any command containing that flag before it runs. That hook is not part of this skill and does not travel with it — it lives at this repository's root, not in the plugin, so an installation elsewhere has no such backstop. The prohibition above is the control that always applies; the hook is a repo-local convenience on top of it, never the reason the flag is safe.

Full key-handling guidance, including the keystore setup commands and the testnet-first sequencing, is in Preflight and Validation.

Testnet first

Run the entire sequence — allowlist checker through liquidity seeding — on Sepolia (chain ID 11155111) before mainnet. Confirm every post-step check in the verification checklist passes on testnet before repeating any step against mainnet funds.


What This Skill Consumes

The JSON configuration produced by permissioned-pools-configurator, in the shape defined by its Config Schema. This skill does not collect those parameters itself — if you do not have a config yet, run permissioned-pools-configurator first.

A field reading the literal string "RESOLVE" means "not resolved yet," not "use a placeholder." Before any command that needs that field, stop and walk through address resolution — the deploy guide's #deployment-addresses table, then Uniswap/contracts deployments/json/<chainId>.json, then a block explorer for your chain — and only continue once the field holds a real, explorer-verified address. Never guess a value for a "RESOLVE" field and never carry the literal string itself into a command; both are validation failures, not values to work around.

pool.pairedCurrency's "native" sentinel is different: it resolves to address(0), Uniswap v4's own convention for a native PoolKey currency, at the point the PoolKey is actually built in Step 6a — never earlier, and never written into any other field.


The Deployment Journey

The published guide's seven steps, in the order it recommends. Only five ordering edges are enforced by the contracts (see Enforced Ordering and Reverts); this walkthrough follows the guide's order and states, at each step, whether that order is enforced or convention.

StepCovered whereSummary
1Preflight and ValidationConfirm or deploy the allowlist checker
2Step WalkthroughcreatePermissionsAdapter
3Step WalkthroughAllowlist the adapter on your token, approve, depositForVerification
4Step WalkthroughverifyPermissionsAdapter
5Step WalkthroughThe four updateAllowedWrapper registrations, then setAllowedHook
6Step WalkthroughPool initialize, updateSwappingEnabled, liquidity seeding
7Step WalkthroughThe routing-allowlist request

Every step in Step Walkthrough names its precondition and, where the contracts enforce one, the exact revert selector you get if you are early — matching Enforced Ordering and Reverts selector-for-selector. Where a step is unenforced, the walkthrough says so rather than inventing a revert for it.


Post-Deployment Verification

After the sequence completes (or after any individual step, to confirm it landed), run the read-only checks in Post-Setup Verification Checklist. Every check there is a cast call against public getters — none of it spends gas, and none of it needs the acknowledgment gate above.


Notes for Implementers of This Flow

  • The acknowledgment gate is once per session, not once per step. Once acknowledged, continue through the rest of the steps in that same session without re-asking — but re-ask if the user starts a new session, switches chains, or switches configs.
  • Never hardcode a contract address. Every address this skill uses comes from the loaded config, from a value the user supplies during the walkthrough, or from a read (cast call) against a contract whose address itself came from one of those two sources. See Preflight and Validation for why this skill ships no address table.
  • Decode an unexpected revert by call site, not by name. Three selectors in this journey (NoVerifiedAdapter, Unauthorized, SwappingDisabled) are declared more than once across different contracts with different meanings — see Enforced Ordering and Reverts.
  • This skill does not fetch RPC state on its own initiative. Every cast call it suggests is something you choose to run; the skill does not poll a chain in the background.

FAQ

What does the permissioned-pools-deployer skill do?

Guided walkthrough for executing the on-chain setup sequence for a Uniswap v4 Permissioned Pool from a permissioned-pools-configurator JSON config - allowlist checker deployment, createPermissionsAdapter, allowlisting and funding the adapter, verification, wrapper and hook registration, pool initialization, swap enablement, liquidity seeding, and the routing-allowlist request. Use when the user says "deploy a permissioned pool", "run the permissioned pool setup", "execute the permissioned pools journey", "createPermissionsAdapter", "verify my permissions adapter", "walk me through the permissioned pool deployment", or asks to execute the on-chain steps after generating a permissioned-pools-configurator config. Covers contract mechanics only - does not constitute legal, financial, investment, tax, or compliance advice, and is not a compliance review - and never emits a broadcastable command before an explicit acknowledgment.

How do I install permissioned-pools-deployer?

Run npx skills add https://github.com/uniswap/uniswap-ai --skill permissioned-pools-deployer in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/permissioned-pools-deployer/ (personal) or .claude/skills/permissioned-pools-deployer/ (project).

Which AI agents can use permissioned-pools-deployer?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is permissioned-pools-deployer safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains permissioned-pools-deployer?

It is published by uniswap in uniswap/uniswap-ai. It has 238 recorded installs.

More from uniswap/uniswap-ai

View all →

swap-integration

uniswap/uniswap-ai

Integrate Uniswap swaps into applications. Use when user says "integrate swaps", "uniswap", "trading api", "add swap functionality", "build a swap frontend", "create a swap script", "smart contract swap integration", "use Universal Router", "Trading API", or mentions swapping tokens via Uniswap.

Business & Finance2.2K installs

viem-integration

uniswap/uniswap-ai

Integrate EVM blockchains using viem. Use when user says "read blockchain data", "send transaction", "interact with smart contract", "connect to Ethereum", "use viem", "use wagmi", "wallet integration", "viem setup", or mentions blockchain/EVM development with TypeScript.

Business & Finance1.7K installs

liquidity-planner

uniswap/uniswap-ai

This skill should be used when the user asks to "provide liquidity", "create LP position", "add liquidity to pool", "become a liquidity provider", "create v3 position", "create v4 position", "concentrated liquidity", "set price range", or mentions providing liquidity, LP positions, or liquidity pools on Uniswap. Generates deep links to create positions in the Uniswap interface.

1.2K installs

swap-planner

uniswap/uniswap-ai

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.

v4-security-foundations

uniswap/uniswap-ai

Security-first Uniswap v4 hook development. Use when user mentions "v4 hooks", "hook security", "PoolManager", "beforeSwap", "afterSwap", or asks about V4 hook best practices, vulnerabilities, or audit requirements.

Security1.2K installs

deployer

uniswap/uniswap-ai

Deploy CCA (Continuous Clearing Auction) smart contracts using the Factory pattern. Use when user says "deploy auction", "deploy cca", "factory deployment", or wants to deploy a configured auction.

DevOps & Cloud1.1K installs

Popular devops & cloud skills

View category →

microsoft-foundry

microsoft/azure-skills

Build, deploy, evaluate, optimize, fine-tune, and manage Microsoft Foundry agents, models, and resources end to end. USE FOR: foundry, azd ai agent, azd provision/deploy, hosted agent scaffold/develop/run/deploy/troubleshoot, prompt agent create, managed harness agent create, GitHub Copilot harness agent, create agent, update agent, add tool to agent, invoke agent, agent insights, evaluate agent, batch eval, continuous eval, continuous monitoring, agent CI/CD, optimize prompt, improve prompt, optimize agent instructions, Agent Optimizer scaffold, dataset curation from traces, deploy model, model fine-tuning (SFT/DPO/RFT), Foundry project, RBAC, role assignment, permissions, quota, capacity, region, deployment failure, AI Services, create Foundry resource, knowledge index, customize deployment, onboard, availability, training-data, grader, distillation, large file upload. DO NOT USE FOR: Azure Functions, App Service, general Azure deploy (use azure-deploy), general Azure prep (use azure

OfficialDevOps & Cloud579.1K installs

azure-diagnostics

microsoft/azure-skills

Debug Azure production issues on Azure using AppLens, Azure Monitor, resource health, and safe triage. WHEN: debug production issues, troubleshoot app service, app service high CPU, app service deployment failure, troubleshoot container apps, container app 503 or target port mismatch, troubleshoot functions, function telemetry missing or stopped after a config/connection-string change, troubleshoot AKS, VM RDP, Linux SSH, VM black screen, can't connect to VM, reset VM password, NSG or firewall blocking, kubectl cannot connect, kube-system/CoreDNS failures, pod pending, crashloop, node not ready, upgrade failures, analyze logs, KQL, insights, image pull failures, cold start issues, health probe failures, resource health, root cause of errors, troubleshoot event hubs, troubleshoot service bus, messaging SDK error, AMQP connection failure, message lock lost, lock renewal during long-running processing, service bus dead letter.

OfficialDevOps & Cloud569.8K installs

azure-prepare

microsoft/azure-skills

Prepare azd-based Azure projects for deployment: generates azure.yaml, infrastructure (Bicep/Terraform), and Dockerfiles for the Azure Developer CLI (azd) workflow. USE ONLY when the user explicitly wants to use azd as the deployment tool, or the project already has an azure.yaml file. DO NOT USE FOR: non-azd deployments, Python App Service code-only deploys (use python-appservice-deploy), or cross-cloud migration (use azure-cloud-migrate). WHEN: prepare app for azd, create azure.yaml, set up azd infrastructure, modernize app for Azure with azd, deploy with azd, function app, timer trigger, service bus trigger, event-driven function, managed identity, generate Bicep, generate Terraform, create and deploy to Azure.

OfficialDevOps & Cloud569K installs

azure-ai

microsoft/azure-skills

Use for Azure AI: Search, Speech, OpenAI, Document Intelligence. Helps with search, vector/hybrid search, speech-to-text, text-to-speech, transcription, OCR. WHEN: AI Search, query search, vector search, hybrid search, semantic search, speech-to-text, text-to-speech, transcribe, OCR, convert text to speech.

OfficialDevOps & Cloud568.8K installs

azure-deploy

microsoft/azure-skills

Execute Azure deployments for ALREADY-PREPARED applications that have existing .azure/deployment-plan.md and infrastructure files. DO NOT use this skill when the user asks to CREATE a new application — use azure-prepare instead. This skill runs azd up, azd deploy, terraform apply, and az deployment commands with built-in error recovery. Requires .azure/deployment-plan.md from azure-prepare and validated status from azure-validate. WHEN: "run azd up", "run azd deploy", "execute deployment", "push to production", "push to cloud", "go live", "ship it", "bicep deploy", "terraform apply", "publish to Azure", "launch on Azure". DO NOT USE WHEN: "create and deploy", "build and deploy", "create a new app", "set up infrastructure", "create and deploy to Azure using Terraform" — use azure-prepare for these.

OfficialDevOps & Cloud568.6K installs

azure-validate

microsoft/azure-skills

Pre-deployment validation for Azure readiness. Run deep checks on configuration, infrastructure (Bicep or Terraform), RBAC role assignments, managed identity permissions, and prerequisites before deploying. WHEN: validate my app, check deployment readiness, run preflight checks, verify configuration, check if ready to deploy, validate azure.yaml, validate Bicep, test before deploying, troubleshoot deployment errors, validate Azure Functions, validate function app, validate serverless deployment, verify RBAC roles, check role assignments, review managed identity permissions, what-if analysis, validate Container Apps deployment.

OfficialDevOps & Cloud568K installs