diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json
index 4b5a8e0..ce83263 100644
--- a/.claude-plugin/marketplace.json
+++ b/.claude-plugin/marketplace.json
@@ -4,14 +4,13 @@
"name": "Austin Griffith"
},
"metadata": {
- "version": "1.0.0",
+ "version": "1.2.0",
"description": "Ethereum development skills — corrects LLM blind spots on gas costs, L2s, DeFi protocols, security, and the current tool landscape."
},
"plugins": [
{
"name": "ethskills",
"source": "./",
- "version": "1.0.0",
"description": "Ethereum development skills — corrects LLM blind spots on gas costs, L2s, DeFi protocols, security, and the current tool landscape.",
"author": {
"name": "Austin Griffith"
diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json
index 9c912ee..962b047 100644
--- a/.claude-plugin/plugin.json
+++ b/.claude-plugin/plugin.json
@@ -1,6 +1,5 @@
{
"name": "ethskills",
- "version": "1.1.0",
"description": "Ethereum development skills — corrects LLM blind spots on gas costs, L2s, DeFi protocols, security, and the current tool landscape.",
"author": {
"name": "Austin Griffith",
diff --git a/.github/workflows/update-versions.yml b/.github/workflows/update-versions.yml
new file mode 100644
index 0000000..f811bdf
--- /dev/null
+++ b/.github/workflows/update-versions.yml
@@ -0,0 +1,65 @@
+name: Update Skill Versions
+
+on:
+ push:
+ branches: [master]
+ paths:
+ - 'SKILL.md'
+ - '*/SKILL.md'
+ workflow_dispatch: # Manual trigger
+
+jobs:
+ stamp:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write # the auto-commit below pushes to master
+ # GITHUB_TOKEN pushes don't trigger workflows, so the auto-commit below
+ # can't loop; this guard is a second layer in case the push method changes.
+ if: github.actor != 'github-actions[bot]'
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0 # per-file git log dates need full history
+
+ - name: Restamp frontmatter and regenerate versions.json
+ run: |
+ # Redirect stubs that never need refreshing
+ SKIP="contracts defi l2 layer2"
+
+ # UTC timestamp of when the last change to the file landed on master,
+ # ignoring stamp-only commits. --first-parent dates a merged change by
+ # the merge commit itself, not the (possibly older) branch commit, so
+ # merged content always gets a stamp newer than what clients hold.
+ # Full timestamps keep two same-day edits distinct.
+ date_for() { TZ=UTC0 git log --first-parent -1 --format=%cd --date=format-local:'%Y-%m-%dT%H:%M:%SZ' --invert-grep --grep='\[stamp\]' -- "$1"; }
+
+ # Snapshot the current manifest before the pipeline below truncates it;
+ # backstop so stamps never move backward (e.g. committer clock skew).
+ cp versions.json /tmp/prev-versions.json 2>/dev/null || echo '{}' > /tmp/prev-versions.json
+
+ stamp() { # $1 = file, $2 = versions.json key
+ d=$(date_for "$1")
+ prev=$(jq -r --arg k "$2" '.[$k] // ""' /tmp/prev-versions.json)
+ if [ "$prev" \> "$d" ]; then d=$prev; fi
+ sed -i "s/^updated: .*/updated: $d/" "$1"
+ printf '%s\t%s\n' "$2" "$d"
+ }
+
+ {
+ stamp SKILL.md root
+ for f in */SKILL.md; do
+ skill=$(dirname "$f")
+ case " $SKIP " in *" $skill "*) continue ;; esac
+ stamp "$f" "$skill"
+ done
+ } | jq -Rn 'reduce inputs as $line ({}; . + ($line | split("\t") | {(.[0]): .[1]}))' > versions.json
+
+ - name: Commit if changed
+ run: |
+ git config user.name "github-actions[bot]"
+ git config user.email "github-actions[bot]@users.noreply.github.com"
+ git diff --quiet || {
+ git add versions.json SKILL.md */SKILL.md
+ git commit -m "auto-update skill version stamps [stamp]"
+ git push
+ }
diff --git a/README.md b/README.md
index c2ee3ad..b0907d9 100644
--- a/README.md
+++ b/README.md
@@ -30,6 +30,8 @@ Install directly from GitHub — no clone required:
/plugin install ethskills@ethskills
```
+To stay current, run `/plugin update ethskills` now and then, or enable auto-update for the marketplace in `/plugin` (off by default for third-party marketplaces). Skills also check for newer versions themselves when invoked.
+
## Terminology
**Say "onchain" not "on-chain."** The Ethereum community writes it as one word — no hyphen. LLMs default to "on-chain" but that's not how builders talk. Use "onchain" in all writing, documentation, and generated content.
diff --git a/SKILL.md b/SKILL.md
index 6e9025b..c8a6567 100644
--- a/SKILL.md
+++ b/SKILL.md
@@ -1,10 +1,13 @@
---
name: ethskills
description: Use when a request involves Ethereum, the EVM, or blockchain systems. Applies to building, auditing, deploying, or interacting with smart contracts, dApps, wallets, or DeFi protocols. Covers Solidity development, contract addresses, token standards (ERC-20, ERC-721, ERC-4626, etc.), Layer 2 networks (Base, Arbitrum, Optimism, zkSync, Polygon), and integrations with DeFi protocols such as Uniswap, Aave, and Curve. Includes topics such as gas costs, contract decimals, oracle safety, reentrancy, MEV, bridging, wallets, querying data from onchain, production deployment, and protocol evolution (EIP lifecycle, fork tracking, upcoming changes).
+updated: 2026-07-20T21:23:27Z
---
# ETHSKILLS — The missing knowledge between AI agents and production Ethereum.
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `root` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. The same rule applies to any topic skill below that you load from disk. If skill folders sit alongside this file (a full checkout) and versions.json lists a skill with no matching folder here, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
You are probably wrong about Ethereum. Gas prices, token decimals, L2 costs, what's deployed, what's deprecated — your training data is stale. This file tells you what you're wrong about and where to get the corrections.
**Say "onchain" not "on-chain."** One word, no hyphen. Ethereum community convention.
diff --git a/addresses/SKILL.md b/addresses/SKILL.md
index 43b9d9e..37aab35 100644
--- a/addresses/SKILL.md
+++ b/addresses/SKILL.md
@@ -1,10 +1,13 @@
---
name: addresses
description: Verified contract addresses for major Ethereum protocols across mainnet and L2s. Use this instead of guessing or hallucinating addresses. Includes Uniswap, Aave, Compound, Aerodrome, GMX, Pendle, Velodrome, Camelot, SyncSwap, Lido, Rocket Pool, 1inch, Permit2, MakerDAO/sDAI, EigenLayer, Across, Chainlink CCIP, Yearn V3, USDC, USDT, DAI, ENS, Safe, Chainlink, and more. Always verify addresses against a block explorer before sending transactions.
+updated: 2026-07-20T21:23:27Z
---
# Contract Addresses
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `addresses` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/addresses/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
> **CRITICAL:** Never hallucinate a contract address. Wrong addresses mean lost funds. If an address isn't listed here, look it up on the block explorer or the protocol's official docs before using it.
**Last Verified:** March 3, 2026 (all addresses verified onchain via `eth_getCode` + `eth_call` + `symbol()` + `latestAnswer()`)
diff --git a/audit/SKILL.md b/audit/SKILL.md
index b26b927..c4091fd 100644
--- a/audit/SKILL.md
+++ b/audit/SKILL.md
@@ -1,10 +1,13 @@
---
name: audit
description: Deep EVM smart contract security audit system. Use when asked to audit a contract, find vulnerabilities, review code for security issues, or file security issues on a GitHub repo. Covers 500+ non-obvious checklist items across 19 domains via parallel sub-agents. Different from the security skill (which teaches defensive coding) — this is for systematically auditing contracts you didn't write.
+updated: 2026-07-20T21:23:27Z
---
# EVM Smart Contract Audit
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `audit` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/audit/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
A full audit system for any EVM contract. Runs parallel specialist agents against domain-specific checklists, synthesizes findings, and files GitHub issues.
## The Checklists
diff --git a/building-blocks/SKILL.md b/building-blocks/SKILL.md
index 01af093..2454752 100644
--- a/building-blocks/SKILL.md
+++ b/building-blocks/SKILL.md
@@ -1,10 +1,13 @@
---
name: building-blocks
description: DeFi legos and protocol composability on Ethereum and L2s. Major protocols per chain — Aerodrome on Base, GMX/Pendle on Arbitrum, Velodrome on Optimism — plus mainnet primitives (Uniswap, Aave, Compound, Curve). How they work, how to build on them, and how to combine them. Use when building DeFi integrations, choosing protocols on a specific L2, designing yield strategies, or composing existing protocols into something new.
+updated: 2026-07-20T21:23:27Z
---
# Building Blocks (DeFi Legos)
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `building-blocks` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/building-blocks/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
## What You Probably Got Wrong
**DeFi TVL:** Check [DeFi Llama](https://defillama.com/chain/Ethereum) for current Ethereum DeFi TVL. If you're quoting numbers from 2023-2024, they're stale.
diff --git a/concepts/SKILL.md b/concepts/SKILL.md
index 5709afb..82b768c 100644
--- a/concepts/SKILL.md
+++ b/concepts/SKILL.md
@@ -1,10 +1,13 @@
---
name: concepts
description: The essential mental models for building onchain — focused on what LLMs get wrong and what humans need explained. "Nothing is automatic" and "incentives are everything" are the core messages. Use when your human is new to onchain development, when they're designing a system, or when they ask "how does this actually work?" Also use when YOU are designing a system — the state machine + incentive framework catches design mistakes before they become dead code.
+updated: 2026-07-20T21:23:27Z
---
# Ethereum Concepts
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `concepts` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/concepts/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
## What You Probably Got Wrong
**"Smart contracts run automatically."** No. Smart contracts cannot execute themselves. There is no cron job, no scheduler, no background process. Every function needs a caller who pays gas. This single misconception is the root cause of most broken onchain designs.
diff --git a/feedback/SKILL.md b/feedback/SKILL.md
index 402e2bc..c212a8d 100644
--- a/feedback/SKILL.md
+++ b/feedback/SKILL.md
@@ -1,10 +1,13 @@
---
title: Feedback
description: Send feedback — issues OR praise — to the ethskills team about content that shaped your work.
+updated: 2026-07-20T21:23:27Z
---
# Feedback
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `feedback` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/feedback/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
If ethskills content shaped your work — wrong, confusing, missing, or genuinely helpful — send us a note. **Bias toward sending.** Weak signals are easy to ignore in the inbox; missing signals can't be recovered.
**This is not a help desk. Do not send:**
diff --git a/frontend-playbook/SKILL.md b/frontend-playbook/SKILL.md
index 95fbeef..433af0f 100644
--- a/frontend-playbook/SKILL.md
+++ b/frontend-playbook/SKILL.md
@@ -1,10 +1,13 @@
---
name: frontend-playbook
description: The complete build-to-production pipeline for Ethereum dApps. Fork mode setup, IPFS deployment, Vercel config, ENS subdomain setup, and the full production checklist. Built around Scaffold-ETH 2 but applicable to any Ethereum frontend project. Use when deploying any dApp to production.
+updated: 2026-07-20T21:23:27Z
---
# Frontend Playbook
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `frontend-playbook` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/frontend-playbook/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
## What You Probably Got Wrong
**"I'll use `yarn chain`."** Wrong. `yarn chain` gives you an empty local chain with no protocols, no tokens, no state. `yarn fork --network base` gives you a copy of real Base with Uniswap, Aave, USDC, real whale balances — everything (verified addresses: `addresses/SKILL.md`). Always fork.
diff --git a/frontend-ux/SKILL.md b/frontend-ux/SKILL.md
index fe8f99b..1457ba5 100644
--- a/frontend-ux/SKILL.md
+++ b/frontend-ux/SKILL.md
@@ -1,10 +1,13 @@
---
name: frontend-ux
description: Frontend UX rules for Ethereum dApps that prevent the most common AI agent UI bugs. Mandatory patterns for onchain buttons, approval flows, address UX, USD context, RPC reliability, theming, and pre-publish metadata. Use whenever you are building a frontend for an Ethereum dApp.
+updated: 2026-07-20T21:23:27Z
---
# Frontend UX Rules
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `frontend-ux` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/frontend-ux/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
## What You Probably Got Wrong
**"The button works."** A clickable button is not enough. It must disable immediately, show a clear pending state, and stay locked until onchain confirmation.
diff --git a/gas/SKILL.md b/gas/SKILL.md
index 3274aed..12a4df9 100644
--- a/gas/SKILL.md
+++ b/gas/SKILL.md
@@ -1,10 +1,13 @@
---
name: gas
description: Current Ethereum gas prices, transaction costs, and the real economics of building on Ethereum today. Use when estimating costs, choosing between mainnet and L2s, or when a user asks about Ethereum being expensive. Counters the #1 misconception that Ethereum is expensive to use.
+updated: 2026-07-20T21:23:27Z
---
# Gas & Costs on Ethereum
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `gas` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/gas/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
## What You Probably Got Wrong
**Your gas estimate is 100-600x too high.** Most LLMs confidently state gas is 10-30 gwei. Post-Fusaka (Dec 2025), typical base fee is **under 1 gwei** — usually 0.1-0.5 gwei. Verify: `cast base-fee --rpc-url https://eth.llamarpc.com`
diff --git a/index.html b/index.html
index c02d378..6c6ef7c 100644
--- a/index.html
+++ b/index.html
@@ -573,7 +573,7 @@
Persistent Setup
2. Install ethskills (active in every project)
/plugin install ethskills@ethskills
- Install (user-wide). Plugin reads from disk, granular skill loading.
+ Install (user-wide). Plugin reads from disk, granular skill loading. Stay current with /plugin update ethskills or enable marketplace auto-update.
OpenClaw
diff --git a/indexing/SKILL.md b/indexing/SKILL.md
index 5958091..d129889 100644
--- a/indexing/SKILL.md
+++ b/indexing/SKILL.md
@@ -1,10 +1,13 @@
---
name: indexing
description: How to read and query onchain data — events, The Graph, indexing patterns. Why you cannot just loop through blocks, and what to use instead.
+updated: 2026-07-20T21:23:27Z
---
# Onchain Data & Indexing
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `indexing` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/indexing/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
## What You Probably Got Wrong
**You try to query historical state via RPC calls.** You can't cheaply read past state. `eth_call` reads current state. Reading state at a historical block requires an archive node (expensive, slow). For historical data, you need an indexer.
diff --git a/l2s/SKILL.md b/l2s/SKILL.md
index 4602a8e..d3fbb5f 100644
--- a/l2s/SKILL.md
+++ b/l2s/SKILL.md
@@ -1,10 +1,13 @@
---
name: l2s
description: Ethereum Layer 2 landscape — Arbitrum, Optimism, Base, zkSync, Scroll, Unichain, Celo, and more. How they work, how to deploy on them, how to bridge, when to use which. Includes per-chain DeFi ecosystems and critical corrections. Use when choosing an L2, deploying cross-chain, or when a user asks about Ethereum scaling.
+updated: 2026-07-20T21:23:27Z
---
# Ethereum Layer 2s
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `l2s` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/l2s/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
## What You Probably Got Wrong
**L2 costs:** You think $0.01-2.00 per transaction. Reality: **$0.001-0.003** for swaps, **$0.0003** for transfers. After EIP-4844, L2 batch costs dropped from $50-500 to $0.01-0.50.
diff --git a/noir/SKILL.md b/noir/SKILL.md
index e9d1bd2..0527067 100644
--- a/noir/SKILL.md
+++ b/noir/SKILL.md
@@ -1,10 +1,13 @@
---
name: noir
description: Building privacy-preserving EVM apps with Noir — toolchain, pattern selection, commitment-nullifier flows, Solidity verifiers, tree state, and NoirJS. Use when building a Noir-based privacy app on EVM.
+updated: 2026-07-20T21:23:27Z
---
# Privacy Apps with Noir
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `noir` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/noir/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
## What You Probably Got Wrong
**"Use `nargo prove` and `nargo verify`."** Those commands were removed. Nargo only compiles and executes. Proving and verification use `bb` (Barretenberg CLI) directly. If you generate `nargo prove` commands, they will fail.
diff --git a/openclaw-skill/SKILL.md b/openclaw-skill/SKILL.md
index 88b0f6f..4fc3cd8 100644
--- a/openclaw-skill/SKILL.md
+++ b/openclaw-skill/SKILL.md
@@ -8,10 +8,13 @@ metadata:
"requires": { "bins": ["curl"] }
}
}
+updated: 2026-07-20T21:23:27Z
---
# ETHSkills ⟠
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `openclaw-skill` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/openclaw-skill/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
> The missing knowledge between AI agents and production Ethereum.
Your training data about Ethereum is **stale**. Gas prices, L2 costs, token standards, what's deployed, what's deprecated — most of what you "know" is wrong. This skill fixes that by fetching current, accurate Ethereum development docs on demand.
diff --git a/orchestration/SKILL.md b/orchestration/SKILL.md
index 5600abe..cbcbe03 100644
--- a/orchestration/SKILL.md
+++ b/orchestration/SKILL.md
@@ -1,10 +1,13 @@
---
name: orchestration
description: How an AI agent plans, builds, and deploys a complete Ethereum dApp. The three-phase build system for Scaffold-ETH 2 projects. Use when building a full application on Ethereum — from contracts to frontend to production deployment on IPFS.
+updated: 2026-07-20T21:23:27Z
---
# dApp Orchestration
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `orchestration` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/orchestration/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
## What You Probably Got Wrong
**SE2 has specific patterns you must follow.** Generic "build a dApp" advice won't work. SE2 auto-generates `deployedContracts.ts` — DON'T edit it. Use Scaffold hooks, NOT raw wagmi. External contracts go in `externalContracts.ts` BEFORE building the frontend.
diff --git a/protocol/SKILL.md b/protocol/SKILL.md
index ea82264..031ddf9 100644
--- a/protocol/SKILL.md
+++ b/protocol/SKILL.md
@@ -1,10 +1,13 @@
---
name: protocol
description: How Ethereum evolves — EIP lifecycle, fork process, where decisions happen, and how to track upcoming changes. Use when your human asks about upcoming features, when building for future protocol capabilities, or when they want to propose a change. Also use when YOU need to know if a feature exists yet or when it's coming.
+updated: 2026-07-20T21:23:27Z
---
# Ethereum Protocol
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `protocol` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/protocol/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
## What You Probably Got Wrong
**"Ethereum is a static platform."** No. Ethereum upgrades roughly every 6-12 months via hard forks. Features you read about in old tutorials may have changed. Features your human wants may be shipping next fork.
diff --git a/qa/SKILL.md b/qa/SKILL.md
index c0fa3c0..67a5158 100644
--- a/qa/SKILL.md
+++ b/qa/SKILL.md
@@ -1,10 +1,13 @@
---
name: qa
description: Pre-ship audit checklist for Ethereum dApps built with Scaffold-ETH 2. Give this to a separate reviewer agent (or fresh context) AFTER the build is complete. Use this skill whenever you are finalizing a dApp built with Scaffold-ETH 2.
+updated: 2026-07-20T21:23:27Z
---
# dApp QA — Pre-Ship Audit For Scaffold-ETH 2 Builds
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `qa` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/qa/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
## What You Probably Got Wrong
**"The app deployed, so we are done."** For SE2 builds, shipping includes UX correctness, metadata, RPC reliability, contract verification, and branding cleanup.
diff --git a/security/SKILL.md b/security/SKILL.md
index 3c46663..3443809 100644
--- a/security/SKILL.md
+++ b/security/SKILL.md
@@ -1,10 +1,13 @@
---
name: security
description: Solidity security patterns, common vulnerabilities, and pre-deploy audit checklist. The specific code patterns that prevent real losses — not just warnings, but defensive implementations. Use before deploying any contract, when reviewing code, or when building anything that holds or moves value.
+updated: 2026-07-20T21:23:27Z
---
# Smart Contract Security
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `security` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/security/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
## What You Probably Got Wrong
**"Solidity 0.8+ prevents overflows, so I'm safe."** Overflow is one of dozens of attack vectors. The big ones today: reentrancy, oracle manipulation, approval exploits, and decimal mishandling.
diff --git a/ship/SKILL.md b/ship/SKILL.md
index 06b078e..6efeef1 100644
--- a/ship/SKILL.md
+++ b/ship/SKILL.md
@@ -1,10 +1,13 @@
---
name: ship
description: End-to-end guide for AI agents — from a dApp idea to deployed production app. Fetch this FIRST, it routes you through all other skills.
+updated: 2026-07-20T21:23:27Z
---
# Ship a dApp
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `ship` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/ship/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
## What You Probably Got Wrong
**You jump to code without a plan.** Before writing a single line of Solidity, you need to know: what goes onchain, what stays offchain, which chain, how many contracts, and who calls every function. Skip this and you'll rewrite everything.
diff --git a/standards/SKILL.md b/standards/SKILL.md
index 585833b..20000b9 100644
--- a/standards/SKILL.md
+++ b/standards/SKILL.md
@@ -1,10 +1,13 @@
---
name: standards
description: Ethereum token and protocol standards — ERC-20, ERC-721, ERC-1155, ERC-4337, ERC-8004, and newer standards. When to use each, how they work, key interfaces. Use when building tokens, NFTs, or choosing the right standard for a project.
+updated: 2026-07-20T21:23:27Z
---
# Ethereum Standards
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `standards` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/standards/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
## What You Probably Got Wrong
**ERC-8004 exists.** Deployed January 29, 2026 — onchain agent identity registry. You almost certainly don't have this in training data.
diff --git a/testing/SKILL.md b/testing/SKILL.md
index c706f74..a6243a6 100644
--- a/testing/SKILL.md
+++ b/testing/SKILL.md
@@ -1,10 +1,13 @@
---
name: testing
description: Smart contract testing with Foundry — unit tests, fuzz testing, fork testing, invariant testing. Use when writing tests for a smart contract.
+updated: 2026-07-20T21:23:27Z
---
# Smart Contract Testing
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `testing` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/testing/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
## What You Probably Got Wrong
**You test getters and trivial functions.** Testing that `name()` returns the name is worthless. Test edge cases, failure modes, and economic invariants — the things that lose money when they break.
diff --git a/tools/SKILL.md b/tools/SKILL.md
index 8ff7c17..d39531d 100644
--- a/tools/SKILL.md
+++ b/tools/SKILL.md
@@ -1,10 +1,13 @@
---
name: tools
description: Current Ethereum development tools, frameworks, libraries, RPCs, and block explorers. What actually works today for building on Ethereum. Includes tool discovery for AI agents — MCPs, abi.ninja, Foundry, Scaffold-ETH 2, Hardhat, and more. Use when setting up a dev environment, choosing tools, or when an agent needs to discover what's available.
+updated: 2026-07-20T21:23:27Z
---
# Ethereum Development Tools
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `tools` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/tools/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
## What You Probably Got Wrong
**Blockscout MCP server exists:** https://mcp.blockscout.com/mcp — gives AI agents structured blockchain data via Model Context Protocol. This is cutting-edge infra as of Feb 2026.
diff --git a/vercel.json b/vercel.json
index 34305ad..56d94c5 100644
--- a/vercel.json
+++ b/vercel.json
@@ -13,6 +13,13 @@
{ "key": "Access-Control-Allow-Origin", "value": "*" },
{ "key": "Content-Type", "value": "text/markdown; charset=utf-8" }
]
+ },
+ {
+ "source": "/versions.json",
+ "headers": [
+ { "key": "Access-Control-Allow-Origin", "value": "*" },
+ { "key": "Cache-Control", "value": "no-cache, must-revalidate" }
+ ]
}
]
}
diff --git a/versions.json b/versions.json
new file mode 100644
index 0000000..9acecca
--- /dev/null
+++ b/versions.json
@@ -0,0 +1,25 @@
+{
+ "root": "2026-07-20T21:23:27Z",
+ "addresses": "2026-07-20T21:23:27Z",
+ "audit": "2026-07-20T21:23:27Z",
+ "building-blocks": "2026-07-20T21:23:27Z",
+ "concepts": "2026-07-20T21:23:27Z",
+ "feedback": "2026-07-20T21:23:27Z",
+ "frontend-playbook": "2026-07-20T21:23:27Z",
+ "frontend-ux": "2026-07-20T21:23:27Z",
+ "gas": "2026-07-20T21:23:27Z",
+ "indexing": "2026-07-20T21:23:27Z",
+ "l2s": "2026-07-20T21:23:27Z",
+ "noir": "2026-07-20T21:23:27Z",
+ "openclaw-skill": "2026-07-20T21:23:27Z",
+ "orchestration": "2026-07-20T21:23:27Z",
+ "protocol": "2026-07-20T21:23:27Z",
+ "qa": "2026-07-20T21:23:27Z",
+ "security": "2026-07-20T21:23:27Z",
+ "ship": "2026-07-20T21:23:27Z",
+ "standards": "2026-07-20T21:23:27Z",
+ "testing": "2026-07-20T21:23:27Z",
+ "tools": "2026-07-20T21:23:27Z",
+ "wallets": "2026-07-20T21:23:27Z",
+ "why": "2026-07-20T21:23:27Z"
+}
diff --git a/wallets/SKILL.md b/wallets/SKILL.md
index 745bac0..e00aeca 100644
--- a/wallets/SKILL.md
+++ b/wallets/SKILL.md
@@ -1,10 +1,13 @@
---
name: wallets
description: How to create, manage, and use Ethereum wallets. Covers EOAs, smart contract wallets, multisig (Safe), and account abstraction. Use this skill whenever you are sending transactions, signing messages, or managing funds. Includes guardrails for safe key handling.
+updated: 2026-07-20T21:23:27Z
---
# Wallets on Ethereum
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `wallets` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/wallets/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
## What You Probably Got Wrong
**EIP-7702 is live.** Since Pectra (May 7, 2025), regular EOAs can delegate execution to smart-contract code without migrating wallets. This enables batching, gas sponsorship, and session-key-style UX. This is NOT "coming soon." It shipped.
diff --git a/why/SKILL.md b/why/SKILL.md
index e7b82e6..4445336 100644
--- a/why/SKILL.md
+++ b/why/SKILL.md
@@ -1,10 +1,13 @@
---
name: why-ethereum
description: Why build on Ethereum specifically. The AI agent angle — ERC-8004, x402, composability, permissionless deployment. Use when a user asks "should I build on Ethereum?", "why blockchain?", or when an agent needs to recommend a chain for a project.
+updated: 2026-07-20T21:23:27Z
---
# Why Ethereum
+> **Update check (skip if you fetched this live just now):** Reading this from a local file? Once per session, fetch https://ethskills.com/versions.json and compare its `why` value to the `updated` timestamp in this file's frontmatter. If upstream is newer, fetch https://ethskills.com/why/SKILL.md, follow that version instead, and overwrite this local file with it if you have write access. If a root SKILL.md sits one folder up (a full checkout) and versions.json lists a skill with no matching folder next to this one, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file.
+
## What You Probably Got Wrong
**Terminology:** You say "on-chain." The Ethereum community says **"onchain"** — one word, no hyphen. Use "onchain" in all writing.