claude.symlink/skills/publish-the-skill/SKILL.md
Publish a skill folder as a .skill package to GitHub. Use when the user wants to publish, release, or distribute a skill folder — creates a public GitHub repo with description, README with badges, .gitignore, and a GitHub Action that zips the skill folder into a .skill artifact and creates releases tagged by commit SHA. Trigger on: "publish skill", "release skill", "make skill public", "distribute skill", "package skill for GitHub", or when user has a SKILL.md folder ready for distribution.
npx skillsauth add htlin222/dotfiles publish-the-skillInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Publish any skill folder as a distributable .skill package on GitHub with automated CI releases.
gh CLI authenticatedSKILL.md with frontmatter (name, description)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 |
.gitignore.DS_Store
*.zip
*.skill
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.
# 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.
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
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.
testing
Converts narrative medical text into Pocket Medicine bullet-style notes with proper abbreviations, then modularizes sections exceeding 20 lines into linked standalone files.
devops
Use when deploying Docker services on the local VM (hostname: vm, Pop!_OS) with Traefik reverse proxy and Homepage dashboard. Covers crane image workflow, Traefik file-provider registration, Homepage services.yaml entries, and compose templates on the traefik-proxy network.
development
Use when reviewing a data visualization or figure for clarity, checking if a graph communicates its message without additional context, or iterating on R/Python plot scripts until a naive reader can fully understand the figure.
development
Runs Vale prose linter on markdown/text files and auto-fixes issues. Use when the user asks to lint, proofread, or improve writing quality of markdown or text files.