Publish The Skill
Publish any skill folder as a distributable .skill package on GitHub with automated CI releases.
Requirements
ghCLI authenticated- Skill folder containing a valid
SKILL.mdwith frontmatter (name,description) - Git available
Workflow
1. Gather info
Determine these values (ask if not obvious):
| Variable | Source | Example |
|----------|--------|---------|
| SKILL_DIR | Folder containing SKILL.md | ebmt-handbook/ |
| SKILL_NAME | From SKILL.md frontmatter name: | ebmt-handbook |
| REPO_NAME | {SKILL_NAME}-skill | ebmt-handbook-skill |
| GH_USER | gh api user --jq '.login' | htlin222 |
| DESCRIPTION | From SKILL.md frontmatter description: (first sentence, <160 chars) | |
| LICENSE | From SKILL.md or ask user | CC BY 4.0 |
2. Create .gitignore
.DS_Store
*.zip
*.skill
3. Create GitHub Action
Write .github/workflows/release.yml:
name: Build & Release Skill
on:
push:
branches: [main]
workflow_dispatch:
permissions:
contents: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set version from SHA
id: version
run: |
SHORT_SHA="${GITHUB_SHA::7}"
echo "sha=${SHORT_SHA}" >> $GITHUB_OUTPUT
- name: Package skill
run: |
cd SKILL_DIR
zip -r ../SKILL_NAME.zip .
cd ..
cp SKILL_NAME.zip SKILL_NAME.skill
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: SKILL_NAME-${{ steps.version.outputs.sha }}
path: SKILL_NAME.skill
- name: Create GitHub Release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
SHORT_SHA="${GITHUB_SHA::7}"
TAG="v0.1.0-${SHORT_SHA}"
cat > release-notes.md <<EOF
## SKILL_NAME skill
**Version:** \`${SHORT_SHA}\`
**Commit:** ${GITHUB_SHA}
### Install
\`\`\`bash
npx skills add GH_USER/REPO_NAME
\`\`\`
Or download the \`.skill\` file from assets below.
EOF
gh release create "${TAG}" \
--title "SKILL_NAME skill ${TAG}" \
--notes-file release-notes.md \
SKILL_NAME.skill
Replace all SKILL_DIR, SKILL_NAME, REPO_NAME, GH_USER placeholders with actual values.
4. Create README.md
# SKILL_NAME
[](https://github.com/GH_USER/REPO_NAME/actions/workflows/release.yml)
[](https://github.com/GH_USER/REPO_NAME/releases/latest)
[](LICENSE_URL)
[](https://github.com/vercel-labs/skills)
[](https://github.com/vercel-labs/skills#supported-agents)
> DESCRIPTION_ONE_LINER
## Install
\```bash
npx skills add GH_USER/REPO_NAME
npx skills add -g GH_USER/REPO_NAME # global
npx skills add GH_USER/REPO_NAME --agent claude-code # specific agent
\```
## What it does
WHAT_IT_DOES (extract from SKILL.md body)
## Skill structure
TREE_OUTPUT (run `tree SKILL_DIR`)
## Protocol
This skill follows the [vercel-labs/skills](https://github.com/vercel-labs/skills) protocol.
Each push to `main` triggers a GitHub Action that packages the skill as a `.skill` file
and creates a release tagged with the commit SHA.
## License
LICENSE_LINE
Replace all placeholders. Generate the tree from actual directory contents.
5. Git init, commit, and push
git init && git branch -M main
git add -A
git commit -m "Initial release: SKILL_NAME skill for AI coding agents"
gh repo create REPO_NAME --public \
--description "DESCRIPTION_SHORT. Install: npx skills add GH_USER/REPO_NAME" \
--source . --push
6. Verify
gh run list --repo GH_USER/REPO_NAME --limit 1
gh run watch <RUN_ID> --repo GH_USER/REPO_NAME --exit-status
gh release list --repo GH_USER/REPO_NAME --limit 1
Report the repo URL and install command to the user.