This skill describes how to contribute a new skill (or update an existing one) to the yusukebe/skills repo from a different working project, without leaving that project.
Owner-only. The flow uses the gh CLI authenticated as yusukebe. If you are an agent working on someone else's machine, you cannot push to yusukebe/skills — skip this skill.
When to do this
You are in the middle of working on some other repo with Yusuke.
Yusuke just confirmed an opinionated way to do something that would be reusable across future projects.
Ask first. "Want me to add a skill for this on skills.yusuke.run?" Proceed only on explicit yes — the catalog reflects Yusuke's opinions and must not silently grow.
The flow
The catalog uses the vercel-labs/skills layout: each skill is a directory under skills/ with a SKILL.md inside. The registry is regenerated automatically before each deploy from skills/*/SKILL.md, so all you need to add is one Markdown file in the right place. PR → auto-merge → Cloudflare Workers Builds deploys.
1. Pick a name
kebab-case, short, descriptive. The name doubles as the directory name and the URL slug. Look at https://skills.yusuke.run/skills.json to keep naming consistent with the existing catalog.
2. Write the skill body locally
Save it as /tmp/SKILL.md (or any temp path). Required frontmatter — the name field is what npx skills add looks for:
Follow the prose conventions: one paragraph per line, no hard wraps, English. Aim for "opinionated guidance + links into the web" rather than a tutorial. If the topic has no good web resource, write the guidance out in full.
3. Create a branch and add the file via the GitHub API
NAME=<name>
BRANCH=add-skill-$NAME
MAIN_SHA=$(gh api repos/yusukebe/skills/git/refs/heads/main --jq '.object.sha')
gh api repos/yusukebe/skills/git/refs \
-f ref="refs/heads/$BRANCH" \
-f sha="$MAIN_SHA"
gh api -X PUT "repos/yusukebe/skills/contents/skills/$NAME/SKILL.md" \
-f message="add $NAME skill" \
-f branch="$BRANCH" \
-f content="$(base64 < /tmp/SKILL.md)"
Creating the file at the nested path skills/$NAME/SKILL.md implicitly creates the skills/$NAME/ directory — there is no separate "create directory" call.
4. Open the PR and enable auto-merge
gh pr create \
--repo yusukebe/skills \
--base main \
--head"$BRANCH" \
--title "add $NAME skill" \
--body "Adds the \`$NAME\` skill. Auto-proposed from another project."
gh pr merge --repo yusukebe/skills "$BRANCH" --squash --auto
Cloudflare Workers Builds picks up the merged commit on main and deploys.
Updating an existing skill
Same flow, but step 3 looks like this — fetch the current file's sha first and pass it in:
NAME=<name>
BRANCH=update-skill-$NAME
MAIN_SHA=$(gh api repos/yusukebe/skills/git/refs/heads/main --jq '.object.sha')
FILE_SHA=$(gh api "repos/yusukebe/skills/contents/skills/$NAME/SKILL.md?ref=main" --jq '.sha')
gh api repos/yusukebe/skills/git/refs \
-f ref="refs/heads/$BRANCH" \
-f sha="$MAIN_SHA"
gh api -X PUT "repos/yusukebe/skills/contents/skills/$NAME/SKILL.md" \
-f message="update $NAME skill" \
-f branch="$BRANCH" \
-f content="$(base64 < /tmp/SKILL.md)" \
-f sha="$FILE_SHA"
Then the same gh pr create + gh pr merge --auto as above.
Confirm with the user first
Do not push to the catalog without an explicit go-ahead from Yusuke. If unsure whether a piece of knowledge is "catalog-worthy" or just a one-off, lean toward asking.