feat: deploy-uni-hook skill (Uniswap v4 hook generate+audit+simulate+deploy) - #805
Merged
Conversation
Port the deploy-uni-hook skill from the aeon-uni instance. Turns a one-line brief into a live Uniswap v4 hook on any v4 chain: pre-audited templates or a freeform hook (flags auto-derived), gated by a static audit, a dangerous-pattern scan, a behavioral forge test, and a fork simulation. Dry-run by default; an explicit arm: broadcasts. Testnet-only unless arm: + explicit chain: + HOOK_MAINNET_OK=1 (triple lock). Authenticated Alchemy RPC, deploy receipt, explorer auto-verify with CREATE2-indexing retry, and idempotency detection. Dashboard: catalog the two new HOOK_* secrets (burner key + mainnet lock) with key glyphs, and add a general per-skill run-input hint (varHint) parsed from each SKILL.md var: and surfaced under the Skill-settings input.
Regenerate skills.json + packs.json (66 skills; crypto pack 13 to 14) and sync the README catalog tables and counts. Separate commit per the convention that per-skill sha/updated are git-log-derived.
…rant The skill's ./hook-deploy.sh exits 3 unless a pre-run step stages Foundry and a built v4 project - the claude -p sandbox denies in-run toolchain installs and an in-run PATH export doesn't survive Claude's per-call shells. Mirror the vuln-scanner staging pattern: - scripts/stage-deploy-uni-hook.sh: install Foundry, build a v4 project (v4-core + v4-periphery + templates) at $HOOKBUILD_DIR, append ~/.foundry/bin to the PATH file, and copy the key-safe ./hook-deploy.sh + chains.tsv to the repo root. Self-guards to the skill; best-effort (never fails the run). - aeon.yml workflow: a "Stage deploy-uni-hook toolchain" step gated on the skill name, right after the vuln-scanner staging step. - skill_mode.sh: grant the write tier the forge / cast / ./hook-deploy.sh bare-names so the sandbox doesn't deny the skill's own tool use. - .gitignore: the repo-root run-time copies (/hook-deploy.sh, /chains.tsv).
4 tasks
aaronjmars
added a commit
that referenced
this pull request
Jul 31, 2026
Propagate the deploy-uni-hook skill (#805) to the aeon repo docs, and correct the pre-existing skill-count / pack-count drift the catalog change surfaces. - CHANGELOG.md: new [Unreleased] entry for deploy-uni-hook (catalog 65 -> 66). - docs/skill-packs.md: total 65 -> 66; Crypto pack 13 -> 14; also Dev 8 -> 10 (a stale count from #802 that left the table summing to 63, not its header). - docs/aeon-setup.md, docs/examples/README.md: "65 skills" -> "66 skills". #804 (the prior batch's own aeon-side docs sync) carries no new capability and is not narrated.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Ports the
deploy-uni-hookskill (proven on theaeon-uniinstance) into canon, plus the dashboard support it needs. Turns a one-line brief into a live Uniswap v4 hook + test pool on any v4 chain.dynamic/noop/skim) or a from-scratch freeform hook. Hook flags are auto-derived from the generated code and CREATE2-mined (HookMiner) so the address carries the right permission bits.forge test-> fork simulation. A failure at any gate blocks the broadcast.arm:.Mainnet triple-lock
A mainnet broadcast needs all three, or it degrades with a named code:
arm:on the brief, andchain:<mainnet>(never defaulted), andHOOK_MAINNET_OK=1secret.Testnet (
base-sepoliadefault) needs onlyarm:. Also enforced pre-broadcast: a funding floor, aMAX_GAS_GWEIceiling, and a spend cap.Other hardening (all live-validated on
aeon-uni)RPC_URLoverride), host-only redaction in logs.ALREADY_DEPLOYEDinstead of mining a fresh one.Dashboard
HOOK_*secrets on the Access Keys vault (HOOK_DEPLOYER_PRIVATE_KEYburner,HOOK_MAINNET_OKlock), each with a key glyph so they don't render as a grey initials badge.varHint): parsed from eachSKILL.mdvar:and shown as help text under the Skill-settings input. General mechanism, no per-slug special-casing; empty for skills that don't set it.Config
enabled: false,workflow_dispatchonly, Opus-pinned (claude-opus-5) - freeform hook generation is the hard part.requires: [HOOK_DEPLOYER_PRIVATE_KEY?, ALCHEMY_API_KEY?, ETHERSCAN_API_KEY?, HOOK_MAINNET_OK?]- all optional; a dry-run needs none.Runtime wiring (mirrors the vuln-scanner staging pattern)
The skill's
./hook-deploy.shexits 3 unless a pre-run step stages the toolchain - theclaude -psandbox denies in-run toolchain installs, and an in-runPATHexport doesn't survive Claude's per-call fresh shells. So, exactly likevuln-scanner:scripts/stage-deploy-uni-hook.sh- a workflow step (full capability) that installs Foundry, builds a v4 project (v4-core+v4-periphery+ templates) at$HOOKBUILD_DIR, appends~/.foundry/binto$GITHUB_PATH, and copies the key-safe./hook-deploy.sh+chains.tsvto the repo root. Self-guards to the skill; best-effort (never fails the run).aeon.ymlworkflow - aStage deploy-uni-hook toolchainstep gated onsteps.skill.outputs.name == 'deploy-uni-hook', right after the vuln-scanner staging step.scripts/skill_mode.sh- grants the write tier theforge/cast/./hook-deploy.shbare-names so the sandbox doesn't deny the skill's own tool use..gitignore- the repo-root run-time copies (/hook-deploy.sh,/chains.tsv), which are copies of the templates, never sources.Validated locally
Canon Actions are disabled, so every relevant CI gate was run by hand and is green:
ci-apps: dashboardtypecheckclean,test176/176,buildclean,apps/clitypecheck clean.ci-skills-json/ci-packs-json: regenerated viabin/generate-*-json(66 skills; crypto pack 13 -> 14).ci-readme-catalog: OK (summary + full-catalog tables + counts synced).ci-skill-category: OK (category: crypto).ci-okf: OK (108 concepts conform).ci-tests:validate-config7/7; config invariants CLEAN.ci-skill-packs: OK (community registry unaffected).ci-tests(workflow + scripts):test_skill_mode.shALL PASS,test_skill_requires.shPASS,actionlintclean onaeon.yml,bash -nclean on both scripts.Notes for the operator
enabled: true. Mainnet stays locked untilHOOK_MAINNET_OK=1is set explicitly.