Skip to content

Make the skills work when installed from skills.sh, and keep the listing current - #7

Merged
mgrabina merged 4 commits into
mainfrom
skills-sh-listing
Sep 7, 2026
Merged

mgrabina merged 4 commits into
mainfrom
skills-sh-listing

Conversation

@mgrabina

@mgrabina mgrabina commented Sep 4, 2026 •

Copy link
Copy Markdown
Contributor

Makes the repo work when it is installed the way skills.sh users install it, and keeps that listing current.

Based on main, independent of #6.

This used to stack on that PR, on the grounds that the CI added here runs claude plugin validate ., which fails on main until a renames fix lands. That reason was wrong: the failure was a local CLI on 2.1.114, and renames has been a valid marketplace key since 2.1.193. The step installs the current CLI, so it passes against main as it stands.

The skills were broken from skills.sh

npx skills add aave/skills works today and installs all five. It does not install the server: the skills CLI reads SKILL.md and nothing else, and ignores plugins/mcp/.mcp.json. There is no MCP handling anywhere in its source. So an agent that installs from the directory gets five files whose every step names a tool it does not have.

Each skill now opens with the server it needs and the command to add it, for Claude Code, Codex, or any other MCP client. The same three lines in all five, because skills install individually — someone can take yield-analysis alone.

skills.sh does not follow pushes

The page serves a snapshot from when the telemetry service last saw the repo, not a live read of GitHub. Three repos in the directory are 404 on GitHub right now and still render their full SKILL.md text, which is how I confirmed it rather than inferring it.

The only documented trigger for a re-read is an install through the CLI, so refresh-listing.yml runs one on every push to main that touches a file the page shows, then polls the page to confirm the snapshot actually moved. The verification reports without failing the run — the index is a third-party service and its lag is not a reason to redden main.

The same call increments the public install counter, which is why the workflow is paths-filtered instead of running on every push. GitHub Actions sets CI, which the CLI stamps on the event, so Vercel can discount it if they choose to.

CI

There was no .github directory. scripts/validate.mjs checks that every manifest parses, that mcp.json and .mcp.json have not drifted apart, that each skill's frontmatter name matches its directory, that each one names mcp.aave.com (guarding the bug above from coming back), and that skills.sh.json groups only skills that exist and leaves none ungrouped.

The workflow also runs npx skills add . --list, which parses the repo exactly as an installer would and asserts all five are discovered. Checked the CLI source first: --list exits before any telemetry, so it validates discovery without recording an install.

skills.sh.json

Groups the repo page into Transactions, Positions and Markets. Display only, documented here.

Also adds the install badge to the README. Drop that line if it is unwanted.

Context

A search for "aave" on skills.sh returns around a hundred skills from 45 third-party repos and none of them is ours. Some hardcode a UiPoolDataProvider address that no longer matches the address book. Separately opened vercel-labs/skills#2153 asking for Aave on the Official Creators list.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 45179d0bb4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +42 to +44
probe=$(grep -ho 'mcp\.aave\.com' plugins/mcp/skills/yield-analysis/SKILL.md | head -1)
for i in $(seq 1 10); do
if curl -sf "https://www.skills.sh/aave/skills/yield-analysis" | grep -qF "$probe"; then

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Make the refresh probe revision-specific

After the first successful refresh, every published snapshot will contain the fixed mcp.aave.com string. On any later push that changes a skill, the check therefore succeeds against the previous snapshot even if the install failed to refresh the listing, so it neither polls nor emits the intended warning. Compare revision-specific content, such as a current content hash or newly introduced text, instead.

Useful? React with 👍 / 👎.

Martin Grabina added 4 commits September 4, 2026 14:08
The skills CLI reads SKILL.md and ignores plugins/mcp/.mcp.json, so a
skills.sh install lands five files naming tools the agent does not have.
Each skill now opens with the server it needs and the command to add it.

Adds skills.sh.json to group the repo page, and a README section for the
npx route with the same caveat.
The repo had no workflows. validate.mjs checks every manifest parses, that
each skill's frontmatter name matches its directory, that each one names the
MCP server a skills-CLI install does not bring, and that skills.sh.json only
groups skills that exist. The workflow also runs the skills CLI in --list mode
(which exits before telemetry) and claude plugin validate.

skills.sh serves a snapshot from the last time telemetry saw the repo, so a
push does not update the page. README says so and gives the one command that
does, and says why it is not automated.
Paths-filtered to the files that show on the page, and it verifies the
snapshot moved rather than assuming it did.
The refresh is the install event, so DISABLE_TELEMETRY or DO_NOT_TRACK
would make the job pass while doing nothing. GITHUB_TOKEN is optional for
a public repo but keeps the CLI off the runner's shared rate limit.
@mgrabina
mgrabina changed the base branch from contributing-guide to main September 4, 2026 17:10
@mgrabina mgrabina mentioned this pull request Sep 4, 2026
@mgrabina
mgrabina merged commit e1d0bc5 into main Sep 7, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants