From 34e2d8bde9e0b0409f24988422c2c00267e91f69 Mon Sep 17 00:00:00 2001 From: phipsae Date: Mon, 20 Jul 2026 15:17:05 -0500 Subject: [PATCH 1/7] add self-update check to all skills [stamp] Every active SKILL.md now carries an updated: date in frontmatter and a short block telling agents reading a local copy to compare against https://ethskills.com/versions.json and re-fetch the live skill when upstream is newer. A GitHub Action restamps dates and regenerates versions.json on every real push to master. Co-Authored-By: Claude Fable 5 --- .claude-plugin/marketplace.json | 4 +- .claude-plugin/plugin.json | 2 +- .github/workflows/update-versions.yml | 53 +++++++++++++++++++++++++++ SKILL.md | 3 ++ addresses/SKILL.md | 3 ++ audit/SKILL.md | 3 ++ building-blocks/SKILL.md | 3 ++ concepts/SKILL.md | 3 ++ feedback/SKILL.md | 3 ++ frontend-playbook/SKILL.md | 3 ++ frontend-ux/SKILL.md | 3 ++ gas/SKILL.md | 3 ++ indexing/SKILL.md | 3 ++ l2s/SKILL.md | 3 ++ noir/SKILL.md | 3 ++ openclaw-skill/SKILL.md | 3 ++ orchestration/SKILL.md | 3 ++ protocol/SKILL.md | 3 ++ qa/SKILL.md | 3 ++ security/SKILL.md | 3 ++ ship/SKILL.md | 3 ++ standards/SKILL.md | 3 ++ testing/SKILL.md | 3 ++ tools/SKILL.md | 3 ++ vercel.json | 7 ++++ versions.json | 25 +++++++++++++ wallets/SKILL.md | 3 ++ why/SKILL.md | 3 ++ 28 files changed, 157 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/update-versions.yml create mode 100644 versions.json diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 4b5a8e0..c01858c 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -4,14 +4,14 @@ "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", + "version": "1.2.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..270700d 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "ethskills", - "version": "1.1.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.", "author": { "name": "Austin Griffith", diff --git a/.github/workflows/update-versions.yml b/.github/workflows/update-versions.yml new file mode 100644 index 0000000..a7c6236 --- /dev/null +++ b/.github/workflows/update-versions.yml @@ -0,0 +1,53 @@ +name: Update Skill Versions + +on: + push: + branches: [master] + paths: + - 'SKILL.md' + - '*/SKILL.md' + workflow_dispatch: # Manual trigger + +jobs: + stamp: + runs-on: ubuntu-latest + # The auto-commit below re-triggers this workflow; skip that run instead of + # using [skip ci], which would also stop Vercel from deploying the commit. + 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" + + # Last commit that touched the file, ignoring stamp-only commits + date_for() { git log -1 --format=%cs --invert-grep --grep='\[stamp\]' -- "$1"; } + + stamp() { # $1 = file, $2 = versions.json key + d=$(date_for "$1") + 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/SKILL.md b/SKILL.md index 6e9025b..cf80c2c 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-05-08 --- # 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` date 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. + 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..502e86f 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-05-08 --- # 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` date 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. + > **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..dabb861 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-02-28 --- # 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` date 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. + 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..0d8ebeb 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-03-20 --- # 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` date 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. + ## 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..91fbb68 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-03-06 --- # 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` date 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. + ## 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..e7ddd23 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-04-29 --- # 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` date 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 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..ed72dc0 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-04-13 --- # 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` date 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. + ## 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..1a24ab4 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-05-08 --- # 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` date 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. + ## 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..8b31d15 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-05-08 --- # 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` date 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. + ## 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/indexing/SKILL.md b/indexing/SKILL.md index 5958091..49dbd96 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-02-16 --- # 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` date 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. + ## 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..863267c 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-03-20 --- # 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` date 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. + ## 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..ff41a43 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-05-08 --- # 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` date 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. + ## 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..869fdeb 100644 --- a/openclaw-skill/SKILL.md +++ b/openclaw-skill/SKILL.md @@ -8,10 +8,13 @@ metadata: "requires": { "bins": ["curl"] } } } +updated: 2026-04-14 --- # 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` date 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. + > 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..1e823bb 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-04-13 --- # 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` date 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. + ## 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..413849d 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-03-20 --- # 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` date 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. + ## 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..2fa700a 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-04-12 --- # 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` date 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. + ## 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..2675145 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-05-08 --- # 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` date 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. + ## 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..f30e41b 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-05-08 --- # 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` date 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. + ## 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..539beec 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-04-08 --- # 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` date 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. + ## 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..a63914c 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-04-13 --- # 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` date 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. + ## 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..de8f48b 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-04-14 --- # 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` date 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. + ## 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..60b9e6c 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": "public, max-age=300, must-revalidate" } + ] } ] } diff --git a/versions.json b/versions.json new file mode 100644 index 0000000..e66694c --- /dev/null +++ b/versions.json @@ -0,0 +1,25 @@ +{ + "root": "2026-05-08", + "addresses": "2026-05-08", + "audit": "2026-02-28", + "building-blocks": "2026-03-20", + "concepts": "2026-03-06", + "feedback": "2026-04-29", + "frontend-playbook": "2026-04-13", + "frontend-ux": "2026-05-08", + "gas": "2026-05-08", + "indexing": "2026-02-16", + "l2s": "2026-03-20", + "noir": "2026-05-08", + "openclaw-skill": "2026-04-14", + "orchestration": "2026-04-13", + "protocol": "2026-03-20", + "qa": "2026-04-12", + "security": "2026-05-08", + "ship": "2026-05-08", + "standards": "2026-04-08", + "testing": "2026-04-13", + "tools": "2026-04-14", + "wallets": "2026-03-20", + "why": "2026-03-17" +} diff --git a/wallets/SKILL.md b/wallets/SKILL.md index 745bac0..1152eec 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-03-20 --- # 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` date 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. + ## 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..66083e6 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-03-17 --- # 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` date 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. + ## What You Probably Got Wrong **Terminology:** You say "on-chain." The Ethereum community says **"onchain"** — one word, no hyphen. Use "onchain" in all writing. From 41c189f15700e05e9b6fb5fe2636278d87fbb424 Mon Sep 17 00:00:00 2001 From: phipsae Date: Mon, 20 Jul 2026 15:34:50 -0500 Subject: [PATCH 2/7] grant workflow contents:write and fix loop-guard comment The default GITHUB_TOKEN can be read-only, which would 403 the auto-commit push. Also drop the wrong claim that Vercel honors [skip ci]; the guard works because GITHUB_TOKEN pushes don't trigger workflows. Co-Authored-By: Claude Fable 5 --- .github/workflows/update-versions.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/update-versions.yml b/.github/workflows/update-versions.yml index a7c6236..b6e5146 100644 --- a/.github/workflows/update-versions.yml +++ b/.github/workflows/update-versions.yml @@ -11,8 +11,10 @@ on: jobs: stamp: runs-on: ubuntu-latest - # The auto-commit below re-triggers this workflow; skip that run instead of - # using [skip ci], which would also stop Vercel from deploying the commit. + 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 From df0a98c073ed40e240a08377c4907c3d4cd5cbed Mon Sep 17 00:00:00 2001 From: phipsae Date: Mon, 20 Jul 2026 16:07:10 -0500 Subject: [PATCH 3/7] switch plugin to SHA-based updates, harden check block Remove version from plugin.json and the marketplace plugin entry so Claude Code resolves the plugin version from the git commit SHA and every merged commit reaches plugin users without a manual bump (a set version pins the plugin). Serve versions.json with no-cache so the staleness check never reads a stale manifest, and tell agents to continue with the local file when a fetch fails. Co-Authored-By: Claude Fable 5 --- .claude-plugin/marketplace.json | 1 - .claude-plugin/plugin.json | 1 - SKILL.md | 2 +- addresses/SKILL.md | 2 +- audit/SKILL.md | 2 +- building-blocks/SKILL.md | 2 +- concepts/SKILL.md | 2 +- feedback/SKILL.md | 2 +- frontend-playbook/SKILL.md | 2 +- frontend-ux/SKILL.md | 2 +- gas/SKILL.md | 2 +- indexing/SKILL.md | 2 +- l2s/SKILL.md | 2 +- noir/SKILL.md | 2 +- openclaw-skill/SKILL.md | 2 +- orchestration/SKILL.md | 2 +- protocol/SKILL.md | 2 +- qa/SKILL.md | 2 +- security/SKILL.md | 2 +- ship/SKILL.md | 2 +- standards/SKILL.md | 2 +- testing/SKILL.md | 2 +- tools/SKILL.md | 2 +- vercel.json | 2 +- wallets/SKILL.md | 2 +- why/SKILL.md | 2 +- 26 files changed, 24 insertions(+), 26 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index c01858c..ce83263 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -11,7 +11,6 @@ { "name": "ethskills", "source": "./", - "version": "1.2.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 270700d..962b047 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,5 @@ { "name": "ethskills", - "version": "1.2.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/SKILL.md b/SKILL.md index cf80c2c..7003b2e 100644 --- a/SKILL.md +++ b/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-05-08 # 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` date 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. +> **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` date 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 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. diff --git a/addresses/SKILL.md b/addresses/SKILL.md index 502e86f..53b6ae2 100644 --- a/addresses/SKILL.md +++ b/addresses/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-05-08 # 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` date 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. +> **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` date 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 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. diff --git a/audit/SKILL.md b/audit/SKILL.md index dabb861..5128bcc 100644 --- a/audit/SKILL.md +++ b/audit/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-02-28 # 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` date 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. +> **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` date 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 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. diff --git a/building-blocks/SKILL.md b/building-blocks/SKILL.md index 0d8ebeb..6e9810f 100644 --- a/building-blocks/SKILL.md +++ b/building-blocks/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-03-20 # 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` date 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. +> **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` date 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 any fetch fails, continue with this file. ## What You Probably Got Wrong diff --git a/concepts/SKILL.md b/concepts/SKILL.md index 91fbb68..337d472 100644 --- a/concepts/SKILL.md +++ b/concepts/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-03-06 # 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` date 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. +> **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` date 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 any fetch fails, continue with this file. ## What You Probably Got Wrong diff --git a/feedback/SKILL.md b/feedback/SKILL.md index e7ddd23..e5f0250 100644 --- a/feedback/SKILL.md +++ b/feedback/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-04-29 # 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` date 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. +> **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` date 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 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. diff --git a/frontend-playbook/SKILL.md b/frontend-playbook/SKILL.md index ed72dc0..bb1084e 100644 --- a/frontend-playbook/SKILL.md +++ b/frontend-playbook/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-04-13 # 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` date 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. +> **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` date 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 any fetch fails, continue with this file. ## What You Probably Got Wrong diff --git a/frontend-ux/SKILL.md b/frontend-ux/SKILL.md index 1a24ab4..c3a9ed0 100644 --- a/frontend-ux/SKILL.md +++ b/frontend-ux/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-05-08 # 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` date 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. +> **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` date 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 any fetch fails, continue with this file. ## What You Probably Got Wrong diff --git a/gas/SKILL.md b/gas/SKILL.md index 8b31d15..85b5262 100644 --- a/gas/SKILL.md +++ b/gas/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-05-08 # 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` date 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. +> **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` date 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 any fetch fails, continue with this file. ## What You Probably Got Wrong diff --git a/indexing/SKILL.md b/indexing/SKILL.md index 49dbd96..14ff725 100644 --- a/indexing/SKILL.md +++ b/indexing/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-02-16 # 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` date 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. +> **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` date 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 any fetch fails, continue with this file. ## What You Probably Got Wrong diff --git a/l2s/SKILL.md b/l2s/SKILL.md index 863267c..01211f5 100644 --- a/l2s/SKILL.md +++ b/l2s/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-03-20 # 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` date 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. +> **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` date 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 any fetch fails, continue with this file. ## What You Probably Got Wrong diff --git a/noir/SKILL.md b/noir/SKILL.md index ff41a43..635ad85 100644 --- a/noir/SKILL.md +++ b/noir/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-05-08 # 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` date 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. +> **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` date 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 any fetch fails, continue with this file. ## What You Probably Got Wrong diff --git a/openclaw-skill/SKILL.md b/openclaw-skill/SKILL.md index 869fdeb..e111651 100644 --- a/openclaw-skill/SKILL.md +++ b/openclaw-skill/SKILL.md @@ -13,7 +13,7 @@ updated: 2026-04-14 # 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` date 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. +> **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` date 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 any fetch fails, continue with this file. > The missing knowledge between AI agents and production Ethereum. diff --git a/orchestration/SKILL.md b/orchestration/SKILL.md index 1e823bb..9534419 100644 --- a/orchestration/SKILL.md +++ b/orchestration/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-04-13 # 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` date 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. +> **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` date 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 any fetch fails, continue with this file. ## What You Probably Got Wrong diff --git a/protocol/SKILL.md b/protocol/SKILL.md index 413849d..86380b3 100644 --- a/protocol/SKILL.md +++ b/protocol/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-03-20 # 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` date 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. +> **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` date 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 any fetch fails, continue with this file. ## What You Probably Got Wrong diff --git a/qa/SKILL.md b/qa/SKILL.md index 2fa700a..94653bb 100644 --- a/qa/SKILL.md +++ b/qa/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-04-12 # 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` date 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. +> **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` date 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 any fetch fails, continue with this file. ## What You Probably Got Wrong diff --git a/security/SKILL.md b/security/SKILL.md index 2675145..6850919 100644 --- a/security/SKILL.md +++ b/security/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-05-08 # 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` date 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. +> **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` date 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 any fetch fails, continue with this file. ## What You Probably Got Wrong diff --git a/ship/SKILL.md b/ship/SKILL.md index f30e41b..e7bd30a 100644 --- a/ship/SKILL.md +++ b/ship/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-05-08 # 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` date 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. +> **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` date 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 any fetch fails, continue with this file. ## What You Probably Got Wrong diff --git a/standards/SKILL.md b/standards/SKILL.md index 539beec..ab61c2d 100644 --- a/standards/SKILL.md +++ b/standards/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-04-08 # 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` date 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. +> **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` date 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 any fetch fails, continue with this file. ## What You Probably Got Wrong diff --git a/testing/SKILL.md b/testing/SKILL.md index a63914c..1465a91 100644 --- a/testing/SKILL.md +++ b/testing/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-04-13 # 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` date 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. +> **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` date 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 any fetch fails, continue with this file. ## What You Probably Got Wrong diff --git a/tools/SKILL.md b/tools/SKILL.md index de8f48b..6a0ec69 100644 --- a/tools/SKILL.md +++ b/tools/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-04-14 # 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` date 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. +> **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` date 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 any fetch fails, continue with this file. ## What You Probably Got Wrong diff --git a/vercel.json b/vercel.json index 60b9e6c..56d94c5 100644 --- a/vercel.json +++ b/vercel.json @@ -18,7 +18,7 @@ "source": "/versions.json", "headers": [ { "key": "Access-Control-Allow-Origin", "value": "*" }, - { "key": "Cache-Control", "value": "public, max-age=300, must-revalidate" } + { "key": "Cache-Control", "value": "no-cache, must-revalidate" } ] } ] diff --git a/wallets/SKILL.md b/wallets/SKILL.md index 1152eec..4614f01 100644 --- a/wallets/SKILL.md +++ b/wallets/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-03-20 # 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` date 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. +> **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` date 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 any fetch fails, continue with this file. ## What You Probably Got Wrong diff --git a/why/SKILL.md b/why/SKILL.md index 66083e6..d413dad 100644 --- a/why/SKILL.md +++ b/why/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-03-17 # 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` date 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. +> **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` date 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 any fetch fails, continue with this file. ## What You Probably Got Wrong From 2ffbffeae1b74a3ced18bc0b67c6fd22a2d6cf00 Mon Sep 17 00:00:00 2001 From: phipsae Date: Mon, 20 Jul 2026 16:23:27 -0500 Subject: [PATCH 4/7] surface new upstream skills in the update check The block now tells agents that a versions.json entry with no matching local folder means new skills shipped, and to point the user at /plugin update (or a re-fetch) rather than installing anything themselves. Co-Authored-By: Claude Fable 5 --- SKILL.md | 2 +- addresses/SKILL.md | 2 +- audit/SKILL.md | 2 +- building-blocks/SKILL.md | 2 +- concepts/SKILL.md | 2 +- feedback/SKILL.md | 2 +- frontend-playbook/SKILL.md | 2 +- frontend-ux/SKILL.md | 2 +- gas/SKILL.md | 2 +- indexing/SKILL.md | 2 +- l2s/SKILL.md | 2 +- noir/SKILL.md | 2 +- openclaw-skill/SKILL.md | 2 +- orchestration/SKILL.md | 2 +- protocol/SKILL.md | 2 +- qa/SKILL.md | 2 +- security/SKILL.md | 2 +- ship/SKILL.md | 2 +- standards/SKILL.md | 2 +- testing/SKILL.md | 2 +- tools/SKILL.md | 2 +- wallets/SKILL.md | 2 +- why/SKILL.md | 2 +- 23 files changed, 23 insertions(+), 23 deletions(-) diff --git a/SKILL.md b/SKILL.md index 7003b2e..222d271 100644 --- a/SKILL.md +++ b/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-05-08 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 versions.json lists a skill with no matching folder alongside this file, 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. diff --git a/addresses/SKILL.md b/addresses/SKILL.md index 53b6ae2..b79bfec 100644 --- a/addresses/SKILL.md +++ b/addresses/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-05-08 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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. diff --git a/audit/SKILL.md b/audit/SKILL.md index 5128bcc..be5b66d 100644 --- a/audit/SKILL.md +++ b/audit/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-02-28 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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. diff --git a/building-blocks/SKILL.md b/building-blocks/SKILL.md index 6e9810f..9c53a3e 100644 --- a/building-blocks/SKILL.md +++ b/building-blocks/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-03-20 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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 diff --git a/concepts/SKILL.md b/concepts/SKILL.md index 337d472..f5a9d6c 100644 --- a/concepts/SKILL.md +++ b/concepts/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-03-06 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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 diff --git a/feedback/SKILL.md b/feedback/SKILL.md index e5f0250..8508635 100644 --- a/feedback/SKILL.md +++ b/feedback/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-04-29 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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. diff --git a/frontend-playbook/SKILL.md b/frontend-playbook/SKILL.md index bb1084e..0f91b92 100644 --- a/frontend-playbook/SKILL.md +++ b/frontend-playbook/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-04-13 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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 diff --git a/frontend-ux/SKILL.md b/frontend-ux/SKILL.md index c3a9ed0..b0e96a4 100644 --- a/frontend-ux/SKILL.md +++ b/frontend-ux/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-05-08 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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 diff --git a/gas/SKILL.md b/gas/SKILL.md index 85b5262..78ade75 100644 --- a/gas/SKILL.md +++ b/gas/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-05-08 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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 diff --git a/indexing/SKILL.md b/indexing/SKILL.md index 14ff725..36768fe 100644 --- a/indexing/SKILL.md +++ b/indexing/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-02-16 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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 diff --git a/l2s/SKILL.md b/l2s/SKILL.md index 01211f5..9fdbc8b 100644 --- a/l2s/SKILL.md +++ b/l2s/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-03-20 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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 diff --git a/noir/SKILL.md b/noir/SKILL.md index 635ad85..86b56cf 100644 --- a/noir/SKILL.md +++ b/noir/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-05-08 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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 diff --git a/openclaw-skill/SKILL.md b/openclaw-skill/SKILL.md index e111651..8a4bb81 100644 --- a/openclaw-skill/SKILL.md +++ b/openclaw-skill/SKILL.md @@ -13,7 +13,7 @@ updated: 2026-04-14 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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. diff --git a/orchestration/SKILL.md b/orchestration/SKILL.md index 9534419..04b4078 100644 --- a/orchestration/SKILL.md +++ b/orchestration/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-04-13 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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 diff --git a/protocol/SKILL.md b/protocol/SKILL.md index 86380b3..3dc33e2 100644 --- a/protocol/SKILL.md +++ b/protocol/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-03-20 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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 diff --git a/qa/SKILL.md b/qa/SKILL.md index 94653bb..ddcd5fa 100644 --- a/qa/SKILL.md +++ b/qa/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-04-12 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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 diff --git a/security/SKILL.md b/security/SKILL.md index 6850919..19c2b1f 100644 --- a/security/SKILL.md +++ b/security/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-05-08 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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 diff --git a/ship/SKILL.md b/ship/SKILL.md index e7bd30a..db6795e 100644 --- a/ship/SKILL.md +++ b/ship/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-05-08 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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 diff --git a/standards/SKILL.md b/standards/SKILL.md index ab61c2d..d9b8680 100644 --- a/standards/SKILL.md +++ b/standards/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-04-08 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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 diff --git a/testing/SKILL.md b/testing/SKILL.md index 1465a91..63989b8 100644 --- a/testing/SKILL.md +++ b/testing/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-04-13 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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 diff --git a/tools/SKILL.md b/tools/SKILL.md index 6a0ec69..95e2a29 100644 --- a/tools/SKILL.md +++ b/tools/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-04-14 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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 diff --git a/wallets/SKILL.md b/wallets/SKILL.md index 4614f01..e989797 100644 --- a/wallets/SKILL.md +++ b/wallets/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-03-20 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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 diff --git a/why/SKILL.md b/why/SKILL.md index d413dad..57ed69d 100644 --- a/why/SKILL.md +++ b/why/SKILL.md @@ -6,7 +6,7 @@ updated: 2026-03-17 # 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` date 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 any fetch fails, continue with this file. +> **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` date 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 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 From 97bac9f3cff2a768ad4f8aaf431bff91f53cb61f Mon Sep 17 00:00:00 2001 From: phipsae Date: Mon, 20 Jul 2026 16:36:00 -0500 Subject: [PATCH 5/7] use full UTC timestamps and document how to stay updated Date-only stamps missed a second edit on the same day; frontmatter and versions.json now carry UTC timestamps, still comparable as plain strings. Install docs now say to run /plugin update or enable marketplace auto-update, which is off by default for third-party marketplaces. Co-Authored-By: Claude Fable 5 --- .github/workflows/update-versions.yml | 5 +-- README.md | 2 ++ SKILL.md | 4 +-- addresses/SKILL.md | 4 +-- audit/SKILL.md | 4 +-- building-blocks/SKILL.md | 4 +-- concepts/SKILL.md | 4 +-- feedback/SKILL.md | 4 +-- frontend-playbook/SKILL.md | 4 +-- frontend-ux/SKILL.md | 4 +-- gas/SKILL.md | 4 +-- index.html | 2 +- indexing/SKILL.md | 4 +-- l2s/SKILL.md | 4 +-- noir/SKILL.md | 4 +-- openclaw-skill/SKILL.md | 4 +-- orchestration/SKILL.md | 4 +-- protocol/SKILL.md | 4 +-- qa/SKILL.md | 4 +-- security/SKILL.md | 4 +-- ship/SKILL.md | 4 +-- standards/SKILL.md | 4 +-- testing/SKILL.md | 4 +-- tools/SKILL.md | 4 +-- versions.json | 46 +++++++++++++-------------- wallets/SKILL.md | 4 +-- why/SKILL.md | 4 +-- 27 files changed, 75 insertions(+), 72 deletions(-) diff --git a/.github/workflows/update-versions.yml b/.github/workflows/update-versions.yml index b6e5146..bb9f280 100644 --- a/.github/workflows/update-versions.yml +++ b/.github/workflows/update-versions.yml @@ -26,8 +26,9 @@ jobs: # Redirect stubs that never need refreshing SKIP="contracts defi l2 layer2" - # Last commit that touched the file, ignoring stamp-only commits - date_for() { git log -1 --format=%cs --invert-grep --grep='\[stamp\]' -- "$1"; } + # UTC timestamp of the last commit that touched the file, ignoring + # stamp-only commits. Full timestamps keep two same-day edits distinct. + date_for() { TZ=UTC0 git log -1 --format=%cd --date=format-local:'%Y-%m-%dT%H:%M:%SZ' --invert-grep --grep='\[stamp\]' -- "$1"; } stamp() { # $1 = file, $2 = versions.json key d=$(date_for "$1") 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 222d271..a0a3522 100644 --- a/SKILL.md +++ b/SKILL.md @@ -1,12 +1,12 @@ --- 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-05-08 +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` date 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 versions.json lists a skill with no matching folder alongside this file, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file. +> **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 versions.json lists a skill with no matching folder alongside this file, 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. diff --git a/addresses/SKILL.md b/addresses/SKILL.md index b79bfec..1e7bf48 100644 --- a/addresses/SKILL.md +++ b/addresses/SKILL.md @@ -1,12 +1,12 @@ --- 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-05-08 +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` date 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 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. +> **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 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. diff --git a/audit/SKILL.md b/audit/SKILL.md index be5b66d..558b892 100644 --- a/audit/SKILL.md +++ b/audit/SKILL.md @@ -1,12 +1,12 @@ --- 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-02-28 +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` date 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 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. +> **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 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. diff --git a/building-blocks/SKILL.md b/building-blocks/SKILL.md index 9c53a3e..2df6492 100644 --- a/building-blocks/SKILL.md +++ b/building-blocks/SKILL.md @@ -1,12 +1,12 @@ --- 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-03-20 +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` date 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 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. +> **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 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 diff --git a/concepts/SKILL.md b/concepts/SKILL.md index f5a9d6c..6bc2ccd 100644 --- a/concepts/SKILL.md +++ b/concepts/SKILL.md @@ -1,12 +1,12 @@ --- 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-03-06 +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` date 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 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. +> **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 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 diff --git a/feedback/SKILL.md b/feedback/SKILL.md index 8508635..16012db 100644 --- a/feedback/SKILL.md +++ b/feedback/SKILL.md @@ -1,12 +1,12 @@ --- title: Feedback description: Send feedback — issues OR praise — to the ethskills team about content that shaped your work. -updated: 2026-04-29 +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` date 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 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. +> **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 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. diff --git a/frontend-playbook/SKILL.md b/frontend-playbook/SKILL.md index 0f91b92..34d6bfb 100644 --- a/frontend-playbook/SKILL.md +++ b/frontend-playbook/SKILL.md @@ -1,12 +1,12 @@ --- 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-04-13 +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` date 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 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. +> **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 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 diff --git a/frontend-ux/SKILL.md b/frontend-ux/SKILL.md index b0e96a4..81eb419 100644 --- a/frontend-ux/SKILL.md +++ b/frontend-ux/SKILL.md @@ -1,12 +1,12 @@ --- 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-05-08 +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` date 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 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. +> **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 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 diff --git a/gas/SKILL.md b/gas/SKILL.md index 78ade75..17f4817 100644 --- a/gas/SKILL.md +++ b/gas/SKILL.md @@ -1,12 +1,12 @@ --- 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-05-08 +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` date 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 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. +> **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 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 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 36768fe..fc89ed4 100644 --- a/indexing/SKILL.md +++ b/indexing/SKILL.md @@ -1,12 +1,12 @@ --- 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-02-16 +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` date 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 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. +> **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 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 diff --git a/l2s/SKILL.md b/l2s/SKILL.md index 9fdbc8b..c738430 100644 --- a/l2s/SKILL.md +++ b/l2s/SKILL.md @@ -1,12 +1,12 @@ --- 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-03-20 +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` date 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 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. +> **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 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 diff --git a/noir/SKILL.md b/noir/SKILL.md index 86b56cf..3f1cb91 100644 --- a/noir/SKILL.md +++ b/noir/SKILL.md @@ -1,12 +1,12 @@ --- 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-05-08 +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` date 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 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. +> **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 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 diff --git a/openclaw-skill/SKILL.md b/openclaw-skill/SKILL.md index 8a4bb81..0850af4 100644 --- a/openclaw-skill/SKILL.md +++ b/openclaw-skill/SKILL.md @@ -8,12 +8,12 @@ metadata: "requires": { "bins": ["curl"] } } } -updated: 2026-04-14 +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` date 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 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. +> **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 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. diff --git a/orchestration/SKILL.md b/orchestration/SKILL.md index 04b4078..a5eb7c9 100644 --- a/orchestration/SKILL.md +++ b/orchestration/SKILL.md @@ -1,12 +1,12 @@ --- 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-04-13 +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` date 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 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. +> **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 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 diff --git a/protocol/SKILL.md b/protocol/SKILL.md index 3dc33e2..e82f5bf 100644 --- a/protocol/SKILL.md +++ b/protocol/SKILL.md @@ -1,12 +1,12 @@ --- 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-03-20 +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` date 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 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. +> **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 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 diff --git a/qa/SKILL.md b/qa/SKILL.md index ddcd5fa..a76ecc6 100644 --- a/qa/SKILL.md +++ b/qa/SKILL.md @@ -1,12 +1,12 @@ --- 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-04-12 +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` date 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 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. +> **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 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 diff --git a/security/SKILL.md b/security/SKILL.md index 19c2b1f..f494537 100644 --- a/security/SKILL.md +++ b/security/SKILL.md @@ -1,12 +1,12 @@ --- 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-05-08 +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` date 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 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. +> **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 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 diff --git a/ship/SKILL.md b/ship/SKILL.md index db6795e..ca84d38 100644 --- a/ship/SKILL.md +++ b/ship/SKILL.md @@ -1,12 +1,12 @@ --- 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-05-08 +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` date 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 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. +> **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 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 diff --git a/standards/SKILL.md b/standards/SKILL.md index d9b8680..2eacd8b 100644 --- a/standards/SKILL.md +++ b/standards/SKILL.md @@ -1,12 +1,12 @@ --- 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-04-08 +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` date 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 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. +> **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 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 diff --git a/testing/SKILL.md b/testing/SKILL.md index 63989b8..1feef22 100644 --- a/testing/SKILL.md +++ b/testing/SKILL.md @@ -1,12 +1,12 @@ --- 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-04-13 +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` date 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 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. +> **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 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 diff --git a/tools/SKILL.md b/tools/SKILL.md index 95e2a29..ac558ed 100644 --- a/tools/SKILL.md +++ b/tools/SKILL.md @@ -1,12 +1,12 @@ --- 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-04-14 +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` date 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 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. +> **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 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 diff --git a/versions.json b/versions.json index e66694c..9acecca 100644 --- a/versions.json +++ b/versions.json @@ -1,25 +1,25 @@ { - "root": "2026-05-08", - "addresses": "2026-05-08", - "audit": "2026-02-28", - "building-blocks": "2026-03-20", - "concepts": "2026-03-06", - "feedback": "2026-04-29", - "frontend-playbook": "2026-04-13", - "frontend-ux": "2026-05-08", - "gas": "2026-05-08", - "indexing": "2026-02-16", - "l2s": "2026-03-20", - "noir": "2026-05-08", - "openclaw-skill": "2026-04-14", - "orchestration": "2026-04-13", - "protocol": "2026-03-20", - "qa": "2026-04-12", - "security": "2026-05-08", - "ship": "2026-05-08", - "standards": "2026-04-08", - "testing": "2026-04-13", - "tools": "2026-04-14", - "wallets": "2026-03-20", - "why": "2026-03-17" + "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 e989797..97db7a1 100644 --- a/wallets/SKILL.md +++ b/wallets/SKILL.md @@ -1,12 +1,12 @@ --- 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-03-20 +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` date 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 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. +> **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 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 diff --git a/why/SKILL.md b/why/SKILL.md index 57ed69d..6992322 100644 --- a/why/SKILL.md +++ b/why/SKILL.md @@ -1,12 +1,12 @@ --- 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-03-17 +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` date 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 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. +> **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 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 From 5fc9f059a2002783c3f8500e50fa97308819730a Mon Sep 17 00:00:00 2001 From: phipsae Date: Mon, 20 Jul 2026 16:48:14 -0500 Subject: [PATCH 6/7] guard new-skill warning to full checkouts, keep stamps monotonic Standalone single-file copies have no sibling skill folders, so the new-skill warning now only fires when a root SKILL.md (or sibling skill folders, for root) proves a full checkout. The workflow also never moves a stamp backward; a true merge can surface a commit whose committer date is older than what clients already saw. Co-Authored-By: Claude Fable 5 --- .github/workflows/update-versions.yml | 7 +++++++ SKILL.md | 2 +- addresses/SKILL.md | 2 +- audit/SKILL.md | 2 +- building-blocks/SKILL.md | 2 +- concepts/SKILL.md | 2 +- feedback/SKILL.md | 2 +- frontend-playbook/SKILL.md | 2 +- frontend-ux/SKILL.md | 2 +- gas/SKILL.md | 2 +- indexing/SKILL.md | 2 +- l2s/SKILL.md | 2 +- noir/SKILL.md | 2 +- openclaw-skill/SKILL.md | 2 +- orchestration/SKILL.md | 2 +- protocol/SKILL.md | 2 +- qa/SKILL.md | 2 +- security/SKILL.md | 2 +- ship/SKILL.md | 2 +- standards/SKILL.md | 2 +- testing/SKILL.md | 2 +- tools/SKILL.md | 2 +- wallets/SKILL.md | 2 +- why/SKILL.md | 2 +- 24 files changed, 30 insertions(+), 23 deletions(-) diff --git a/.github/workflows/update-versions.yml b/.github/workflows/update-versions.yml index bb9f280..1767046 100644 --- a/.github/workflows/update-versions.yml +++ b/.github/workflows/update-versions.yml @@ -30,8 +30,15 @@ jobs: # stamp-only commits. Full timestamps keep two same-day edits distinct. date_for() { TZ=UTC0 git log -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, + # so stamps can never move backward (a true merge can surface a commit + # whose committer date is older than what clients already saw). + 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" } diff --git a/SKILL.md b/SKILL.md index a0a3522..c8a6567 100644 --- a/SKILL.md +++ b/SKILL.md @@ -6,7 +6,7 @@ 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 versions.json lists a skill with no matching folder alongside this file, tell the user new ethskills are available (Claude Code plugin: `/plugin update`). If any fetch fails, continue with this file. +> **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. diff --git a/addresses/SKILL.md b/addresses/SKILL.md index 1e7bf48..37aab35 100644 --- a/addresses/SKILL.md +++ b/addresses/SKILL.md @@ -6,7 +6,7 @@ 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 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. +> **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. diff --git a/audit/SKILL.md b/audit/SKILL.md index 558b892..c4091fd 100644 --- a/audit/SKILL.md +++ b/audit/SKILL.md @@ -6,7 +6,7 @@ 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 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. +> **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. diff --git a/building-blocks/SKILL.md b/building-blocks/SKILL.md index 2df6492..2454752 100644 --- a/building-blocks/SKILL.md +++ b/building-blocks/SKILL.md @@ -6,7 +6,7 @@ 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 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. +> **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 diff --git a/concepts/SKILL.md b/concepts/SKILL.md index 6bc2ccd..82b768c 100644 --- a/concepts/SKILL.md +++ b/concepts/SKILL.md @@ -6,7 +6,7 @@ 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 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. +> **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 diff --git a/feedback/SKILL.md b/feedback/SKILL.md index 16012db..c212a8d 100644 --- a/feedback/SKILL.md +++ b/feedback/SKILL.md @@ -6,7 +6,7 @@ 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 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. +> **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. diff --git a/frontend-playbook/SKILL.md b/frontend-playbook/SKILL.md index 34d6bfb..433af0f 100644 --- a/frontend-playbook/SKILL.md +++ b/frontend-playbook/SKILL.md @@ -6,7 +6,7 @@ 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 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. +> **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 diff --git a/frontend-ux/SKILL.md b/frontend-ux/SKILL.md index 81eb419..1457ba5 100644 --- a/frontend-ux/SKILL.md +++ b/frontend-ux/SKILL.md @@ -6,7 +6,7 @@ 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 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. +> **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 diff --git a/gas/SKILL.md b/gas/SKILL.md index 17f4817..12a4df9 100644 --- a/gas/SKILL.md +++ b/gas/SKILL.md @@ -6,7 +6,7 @@ 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 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. +> **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 diff --git a/indexing/SKILL.md b/indexing/SKILL.md index fc89ed4..d129889 100644 --- a/indexing/SKILL.md +++ b/indexing/SKILL.md @@ -6,7 +6,7 @@ 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 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. +> **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 diff --git a/l2s/SKILL.md b/l2s/SKILL.md index c738430..d3fbb5f 100644 --- a/l2s/SKILL.md +++ b/l2s/SKILL.md @@ -6,7 +6,7 @@ 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 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. +> **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 diff --git a/noir/SKILL.md b/noir/SKILL.md index 3f1cb91..0527067 100644 --- a/noir/SKILL.md +++ b/noir/SKILL.md @@ -6,7 +6,7 @@ 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 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. +> **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 diff --git a/openclaw-skill/SKILL.md b/openclaw-skill/SKILL.md index 0850af4..4fc3cd8 100644 --- a/openclaw-skill/SKILL.md +++ b/openclaw-skill/SKILL.md @@ -13,7 +13,7 @@ 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 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. +> **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. diff --git a/orchestration/SKILL.md b/orchestration/SKILL.md index a5eb7c9..cbcbe03 100644 --- a/orchestration/SKILL.md +++ b/orchestration/SKILL.md @@ -6,7 +6,7 @@ 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 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. +> **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 diff --git a/protocol/SKILL.md b/protocol/SKILL.md index e82f5bf..031ddf9 100644 --- a/protocol/SKILL.md +++ b/protocol/SKILL.md @@ -6,7 +6,7 @@ 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 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. +> **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 diff --git a/qa/SKILL.md b/qa/SKILL.md index a76ecc6..67a5158 100644 --- a/qa/SKILL.md +++ b/qa/SKILL.md @@ -6,7 +6,7 @@ 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 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. +> **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 diff --git a/security/SKILL.md b/security/SKILL.md index f494537..3443809 100644 --- a/security/SKILL.md +++ b/security/SKILL.md @@ -6,7 +6,7 @@ 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 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. +> **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 diff --git a/ship/SKILL.md b/ship/SKILL.md index ca84d38..6efeef1 100644 --- a/ship/SKILL.md +++ b/ship/SKILL.md @@ -6,7 +6,7 @@ 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 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. +> **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 diff --git a/standards/SKILL.md b/standards/SKILL.md index 2eacd8b..20000b9 100644 --- a/standards/SKILL.md +++ b/standards/SKILL.md @@ -6,7 +6,7 @@ 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 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. +> **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 diff --git a/testing/SKILL.md b/testing/SKILL.md index 1feef22..a6243a6 100644 --- a/testing/SKILL.md +++ b/testing/SKILL.md @@ -6,7 +6,7 @@ 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 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. +> **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 diff --git a/tools/SKILL.md b/tools/SKILL.md index ac558ed..d39531d 100644 --- a/tools/SKILL.md +++ b/tools/SKILL.md @@ -6,7 +6,7 @@ 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 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. +> **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 diff --git a/wallets/SKILL.md b/wallets/SKILL.md index 97db7a1..e00aeca 100644 --- a/wallets/SKILL.md +++ b/wallets/SKILL.md @@ -6,7 +6,7 @@ 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 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. +> **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 diff --git a/why/SKILL.md b/why/SKILL.md index 6992322..4445336 100644 --- a/why/SKILL.md +++ b/why/SKILL.md @@ -6,7 +6,7 @@ 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 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. +> **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 From f2b1d7c3176febfaf054b9d83cfd744bb48ba4b6 Mon Sep 17 00:00:00 2001 From: phipsae Date: Mon, 20 Jul 2026 16:53:16 -0500 Subject: [PATCH 7/7] date stamps by first-parent so merged changes always look newer git log -1 -- file dates a merged change by the branch commit, which can predate the current manifest value; the monotonic guard then kept the old stamp and clients holding it never fetched the merged content. --first-parent dates the change by the merge commit itself (verified against merge f81ef4b in this repo's history), stays deterministic across re-runs, and the guard remains only as a clock-skew backstop. Co-Authored-By: Claude Fable 5 --- .github/workflows/update-versions.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/update-versions.yml b/.github/workflows/update-versions.yml index 1767046..f811bdf 100644 --- a/.github/workflows/update-versions.yml +++ b/.github/workflows/update-versions.yml @@ -26,13 +26,15 @@ jobs: # Redirect stubs that never need refreshing SKIP="contracts defi l2 layer2" - # UTC timestamp of the last commit that touched the file, ignoring - # stamp-only commits. Full timestamps keep two same-day edits distinct. - date_for() { TZ=UTC0 git log -1 --format=%cd --date=format-local:'%Y-%m-%dT%H:%M:%SZ' --invert-grep --grep='\[stamp\]' -- "$1"; } + # 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, - # so stamps can never move backward (a true merge can surface a commit - # whose committer date is older than what clients already saw). + # 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