submit-hook
SkillCloud & infraLets your agent list a deployed Uniswap v4 hook on the public hook marketplace by formatting it and opening a pull request.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the submit-hook skill
About this capability
Submit a deployed Uniswap v4 hook to the public univ4-hooks registry - format the listing, open a PR (issue fallback) so it lists on the hook marketplace.
What this skill tells your AI
The instructions your AI receives, as published by aeonfun/aeon in skills/submit-hook/SKILL.md and read by ahel’s review.
${var} - a hook address (
0x...) to submit. Empty means the most recent live mainnet deploy inmemory/state/hook-deploys.json.
Today is ${today}. This skill takes a hook this instance already deployed and lists it on the public registry aeonfun/univ4-hooks (the source behind the aeon hook marketplace). It does the formatting the registry expects, then opens a PR. The flags and callbacks are decoded from the address by the registry, so this skill only supplies the address, the chain, and the human-readable listing.
The mechanics (clone, write the entry, regenerate the registry, open the PR, fall back to an issue when there is no push access) live in skills/submit-hook/submit-univ4.py, so all GitHub egress stays inside that helper.
What lists, and what does not
- Only live mainnet deploys. A dry-run or a testnet deploy is never submitted (the registry lists real, verifiable hooks). Skip with
SUBMIT_HOOK_SKIP. - Only registry-supported chains. The registry's
chains.jsoncoversethereum base robinhood monad bnb arbitrum unichain. A deploy on any other chain is skipped (SUBMIT_HOOK_UNSUPPORTED_CHAIN); note it and stop. - Idempotent. The helper skips if the address (any chain) or the slug is already listed, so re-running is safe.
Steps
-
Pick the deploy. Read
memory/state/hook-deploys.json(a list of deploy records). If${var}is a0x...address, select the record whosehookAddressmatches it; else select the most recent record withnetwork: "mainnet". No matching record means notify and exitSUBMIT_HOOK_NONE. -
Gate it. If the record's
networkis notmainnet, exitSUBMIT_HOOK_SKIP. If itschainis not one ofethereum base robinhood monad bnb arbitrum unichain, exitSUBMIT_HOOK_UNSUPPORTED_CHAIN(the registry cannot list it yet). Confirmint(hookAddress,16) & 0x3FFF == int(flags,16); if not, the record is inconsistent, so notify and exitSUBMIT_HOOK_BAD_RECORD. -
Name it. Derive a PascalCase contract-style
namefrom the record'sbrief/feature (a market-hours gate becomesMarketHoursGate). This is the marketplace title and thehooks/<slug>.jsonfilename. -
Classify it. From the
briefandflagNames, choose:category: one ofFees Rewards Access Games Orders Launch. A gate/allowlist isAccess; a fee/volatility hook isFees; a tribute/buyback/leaderboard isRewards; a block/price/volume game isGames; limit/async/MEV ordering isOrders; launch/anti-bot/anti-rug isLaunch.klass:VALUEif the hook returns a delta or moves tokens (a*ReturnDeltaflag),FEEif it sets a dynamic LP fee, elseGATE.template: map the record's template.dynamicstaysdynamic,noopstaysnoop, anything else (freeform/skim) becomesfreeform.
-
Write the listing prose from the brief:
mechanic: one punchy line for the tile.plain: 2-4 plain-language sentences a non-dev follows, for the modal.rules: the exact rules the hook enforces, one per line (2-4).
-
Submit. Run the helper (a live mainnet deploy that cleared this instance's deploy gates lists as an aeon, verified hook):
python3 skills/submit-hook/submit-univ4.py \ --address "$HOOK_ADDRESS" --chain "$CHAIN" \ --name "$NAME" --category "$CATEGORY" --klass "$KLASS" \ --template "$TEMPLATE" --stage deployed --source aeon --verified \ --date "$(echo "$TIMESTAMP" | cut -c1-10)" \ --mechanic "$MECHANIC" --plain "$PLAIN" \ --rule "$RULE1" --rule "$RULE2" [--rule "$RULE3"]Add
--dry-runfirst to print the entry and the intended action without touching the registry, then drop it to actually open the PR. The helper prints the PR URL (or the issue URL on a fallback, oralready listed). -
Notify + exit. Send a short note (hook name, chain, PR/issue URL). Exit
SUBMIT_HOOK_OK(PR/issue opened or already listed).
Degrade rules
- No ledger or no matching record:
SUBMIT_HOOK_NONE(notify, never fail hard). - Testnet or dry-run deploy:
SUBMIT_HOOK_SKIP. - Chain not in the registry:
SUBMIT_HOOK_UNSUPPORTED_CHAIN. flags != address & 0x3FFFin the record:SUBMIT_HOOK_BAD_RECORD.- No push access to the registry: the helper files the structured submission issue instead and still exits
SUBMIT_HOOK_OK.
Notes
- The registry validates every PR: flags/callbacks are recomputed from the address, the schema is enforced, and the aggregated
hooklist.jsonis checked. The helper regenerateshooklist.json+HOOKS.mdbefore pushing so that check passes. deploy-uni-hookcalls this same helper on a successful live deploy, so a hook usually lists itself the moment it lands. Run this skill by hand to resubmit an older deploy or one that failed to auto-list.- The helper never puts a token on a command line. It uses the
ghCLI, which readsGH_TOKENfrom the environment.
Signals
- GitHub stars
- 750
- Forks
- 264
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
submit-hook- Source
- github.com/aeonfun/aeon