deploy-uni-hook

Installation
SKILL.md

${var} — the hook brief. Grammar: [arm:][template:<name>] [chain:<name>] <brief>

  • `` (empty) → print help and exit DEPLOY_HOOK_EMPTY.
  • <brief>dry-run: generate, compile, mine, and simulate. Never broadcasts. [default — no prefix]
  • arm:<brief>broadcast: do the full dry-run first, then deploy for real if the simulation passes.
  • template:<name> → force a mode: dynamic | noop | skim (pre-audited templates) or freeform (build a whole hook from the prompt). Omit to auto-pick: a brief that matches a template uses it; anything else → freeform.
  • chain:<name> → any Uniswap v4 chain in chains.tsv (run ./hook-deploy.sh chains to list). Default base-sepolia. Testnets: base-sepolia, unichain-sepolia, arbitrum-sepolia. Mainnets (testnet: false, e.g. base, ethereum, unichain, arbitrum, optimism, polygon, bnb, avalanche, ...) require BOTH arm: and an explicit chain: — the skill never targets mainnet by default. base-mainnet is accepted as an alias for base.

Today is ${today}. This skill turns a one-line brief into a live Uniswap v4 hook. It is built to be safe: it simulates every deploy before it broadcasts, it defaults to a dry-run on testnet, and it needs an explicit arm: to move on-chain.

Why this design

A hook binding is immutable and a bad hook can brick a pool or steal funds. So the gates sit BEFORE the deploy: two of them (dry-run then arm:), a mandatory simulation, and idempotent state. Everything after the broadcast is just recording what already happened — appended to memory/state/hook-deploys.json on main, no PR (there is nothing left to review). The Foundry flow is the proven one — mine a CREATE2 salt so the address carries the right hook-flag bits, deploy, initialize the pool, add liquidity, run one swap.

Safety contract (do not skip)

Installs
8
Repository
aeonfun/aeon
GitHub Stars
715
First Seen
Aug 20, 2026
deploy-uni-hook — aeonfun/aeon