
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- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads permissioned-pools-deployer automatically when relevant.
- 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
AskUserQuestionfor the acknowledgment gate and for confirming irreversible choices. IfAskUserQuestionis 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:
- ✅ Review every configuration and every command carefully before running anything. AI-generated command sequences may contain errors.
- ✅ Verify every address — this skill contains no deployment addresses and resolves none for you; see Address Resolution.
- ✅ Test on a testnet first. Run the entire sequence on Sepolia (or another testnet with the permissioned-pools contracts deployed) before touching mainnet.
- ✅ 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.
- ✅ 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.
- ✅ Read the repo's usage guidelines. The repo root
DISCLAIMER.mdgoverns 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 carriesV4Quoteronly, 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-addressestable 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 behttps://-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:
- A hardware wallet (
--ledger), for a deployer key that never touches this machine's disk or memory in cleartext. - An encrypted keystore (
cast wallet import ... --interactive, then--account <name> --sender $ADDRESSon 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.
| Step | Covered where | Summary |
|---|---|---|
| 1 | Preflight and Validation | Confirm or deploy the allowlist checker |
| 2 | Step Walkthrough | createPermissionsAdapter |
| 3 | Step Walkthrough | Allowlist the adapter on your token, approve, depositForVerification |
| 4 | Step Walkthrough | verifyPermissionsAdapter |
| 5 | Step Walkthrough | The four updateAllowedWrapper registrations, then setAllowedHook |
| 6 | Step Walkthrough | Pool initialize, updateSwappingEnabled, liquidity seeding |
| 7 | Step Walkthrough | The 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 callit 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
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.
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.
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.
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.
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.
Popular devops & cloud skills
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
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.
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.
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.
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.
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.