Conversation
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 <noreply@anthropic.com>
|
@phipsae is attempting to deploy a commit to the BuidlGuidl Team on Vercel. A member of the Team first needs to authorize it. |
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 <noreply@anthropic.com>
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 <noreply@anthropic.com>
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 <noreply@anthropic.com>
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 <noreply@anthropic.com>
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 <noreply@anthropic.com>
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 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Installed copies of ethskills (Claude Code plugin, ClawHub) go stale the day after install, while the pointer setups (Codex, Cursor, curl) always fetch live. This PR gives every skill a way to notice it's outdated and refresh itself, and makes the Claude Code plugin itself update per commit.
Four pieces:
Per-skill stamp. Every active SKILL.md gets an
updated:UTC timestamp in frontmatter (its last real content change from git history) and a short blockquote after the H1. The block tells an agent reading a local copy to fetchhttps://ethskills.com/versions.jsononce per session, compare timestamps, and on a newer upstream fetch the live SKILL.md, follow it, and overwrite the local file if writable. In full checkouts, a versions.json entry with no local folder means new skills shipped and the agent tells the user (standalone single-file copies skip this, so they never false-alarm). If any fetch fails, the agent continues with the local copy. ISO UTC timestamps compare as plain strings and keep two same-day edits distinct. The opening clause ("skip if you fetched this live just now") keeps pointer installs from wasting a fetch.versions.jsonmanifest at the repo root, served statically athttps://ethskills.com/versions.json(static files win over the/:skillrewrite, so no rewrite change). Served with CORS andCache-Control: no-cache, must-revalidateso the check never reads a stale manifest (the file is tiny and revalidates via ETag).update-versions.ymlworkflow. On every real push to master it recomputes each skill's UTC timestamp withgit log --first-parent -1 --invert-grep --grep='\[stamp\]' -- <file>(first-parent dates a merged change by the merge commit itself, so merged content always stamps newer than what clients hold), restamps frontmatter, regenerates versions.json, and auto-commits with[stamp]in the message. The--invert-grepkeeps stamp-only commits from advancing timestamps, and a monotonic backstop keeps stamps from ever moving backward (committer clock skew). The job setspermissions: contents: writeso the auto-commit can push even where the default token is read-only. It can't loop, since GITHUB_TOKEN pushes don't trigger workflows, and an actor guard (github.actor != 'github-actions[bot]') adds a second layer. New skills are picked up automatically by the*/SKILL.mdglob. The four deprecated redirect stubs (contracts, defi, l2, layer2) are excluded.SHA-based plugin updates. The
versionfields are removed from plugin.json and the marketplace plugin entry. Per the Claude Code plugin docs, a set version pins the plugin (new commits don't reach users until someone bumps it), while omitting it makes the git commit SHA the version, so/plugin update(and marketplace auto-update where users enabled it) delivers every merged commit with no manual bumps. This also resolves the old 1.0.0/1.1.0 mismatch between the two files.claude plugin validate .passes, the only warning is the intentionally absent version. The install docs (README and homepage table) now tell users to run/plugin update ethskillsor enable marketplace auto-update, which is off by default for third-party marketplaces.Limitations
/plugin updatefixes Claude Code installs permanently. Pre-existing ClawHub and curl-baked copies need a manual re-fetch once.[stamp]marker is dropped from the squash message, all timestamps collapse to the merge time on the next workflow run. Functionally harmless, and oneworkflow_dispatchrun restamps consistently.Side finding (out of scope)
update-gas.ymlhas failed every weekly run since at least 2026-06-22, erroring in the "Check current gas" step with a jq parse error on the eth.llamarpc.com response, which is why the freshness stamp in gas/SKILL.md has been frozen at 2026-03-17. Probably deserves a fallback RPC or error handling in a separate fix.Verified
claude plugin validate .passes.contents: write, check the repo's Actions default token setting.🤖 Generated with Claude Code