aperivue/medsci-skills/publish-skill
- community
Checking that the SKILL.md file is still in the repository.
Use when turning a personal agent skill into an open-source, distributable one. Runs a PII audit, generalizes personal details, checks licence compatibility, reviews cross-platform adapters and walks through packaging.
Install
npx vskill@latest install aperivue/medsci-skills/publish-skillSKILL.md
Skill: publish-skill
Phase 0: Init and Identify Source
Required Inputs
Collect from the user:
- Source skill path: directory containing the personal skill (e.g.,
~/.claude/skills/my-skill/or~/.agents/skills/my-skill/) - Target package path: directory of the distributable package (e.g.,
~/workspace/<your-package>/) - Target license: license of the package — ask; offer MIT as the default, never assume it
Actions
- Read
SKILL.mdfrom the source skill directory - Inventory all files recursively (
ls -R) - Classify skill type:
- Standalone: self-contained skill with no agent delegation
- Orchestrator: delegates to sub-agents (NOT suitable for distribution without refactoring)
- Wrapper: thin wrapper around another tool/API
- Present inventory table to the user:
Make every later fix on a working copy (<cleaned_skill_path> below) or in the target directory. NEVER modify the source skill in place, because it is the user's working original.
Gate: User confirms source skill and target package before proceeding.
Phase 0.5: Skill-Worthiness Gate
Before spending effort on PII scrubbing and generalization, confirm the workflow is worth distributing as a skill at all. Apply all three gates:
| Gate | Question | Pass condition | |
|---|---|---|---|
| Uniqueness | Could a competent user get the same result by searching the web for ~5 minutes, or by asking a general assistant with no skill installed? | No | |
| Specificity | Does it encode a workflow, decision heuristic, constraint, or convention specific to this domain or a recurring task — rather than a generic code snippet or a standard-library example? | Yes | |
| Effort | Did discovering it take real debugging, study design, operational effort, or a reviewer-anticipation lesson (a pitfall, a verification step, a domain convention)? | Yes |
Gate: Any "no" (or "yes" on the inverse) stops publication — recommend documentation or a memory note instead. If the value is real but the skill delegates to private agents, route through Phase 1's orchestrator finding (refactor to standalone first). Only a clear three-way pass proceeds.
Phase 1: Originality Check
Checks
- External source: Is this skill adapted from another package or author? Check for attribution headers, license blocks, or "based on" comments.
- Third-party content: Do any files in
references/come from external sources (published guidelines, textbooks, standards bodies)? - Competitive sensitivity: Does the skill reveal proprietary business logic or competitive advantage that should remain private? Ask the user; never make this judgment call yourself.
Decision Matrix
| Finding | Action | |
|---|---|---|
| Fully original | Proceed to Phase 2 | |
| Adapted with compatible license | Add attribution header, proceed | |
| Contains non-compatible third-party content | Flag for removal or URL reference conversion | |
| Orchestrator with private agent references | STOP -- requires refactoring to standalone first | |
| Competitive/proprietary logic | STOP -- not suitable for open-source |
Phase 2: PII De-identification Audit
Zero tolerance: the skill must have exactly 0 PII matches before proceeding.
Pre-scan Setup
Before running, ask the user for everything unique to them that should also count as a PII hit:
- Their name(s) in all languages and romanizations (a placeholder shape:
<First Last>|<native-script name>) - Their institutional affiliation(s) (a placeholder shape:
<Institution>|<Hospital>) - Any collaborator surnames that may appear in drafts or filenames
Combine the inputs into a single grep -E alternation pattern (pipe-separated).
Automated Scan
Run the bundled audit script. The first argument is the skill directory; the second is the user-specific alternation pattern from Pre-scan Setup.
The script scans ten categories, plus the user pattern:
- Hardcoded paths (
/Users/<name>/,/home/<name>/,~/Documents,~/Desktop,~/Downloads,~/Projects) - Email addresses (any address-shaped string)
- IP addresses / internal URLs (
*.internal,*.local,*.corp) - Institutional references (SNUH / AMC / SMC / KAIST / SNU / ASAN / MGH / UCSF / Mayo Clinic / Johns Hopkins / Samsung Medical / Severance / Asan Medical)
- Academic roles with names (
professor <Surname>,Prof. <Surname>,Dr. <Surname>,PGY[0-9],<한글이름> 교수님) - Language hardcoding ("in Korean", "한국어로", "in Japanese", "in Chinese")
- Location specifics (Seoul / Busan / Daegu / Tokyo / Beijing / Shanghai / Boston / Stanford and Korean variants)
- Blockquote dated precedent (
> YYYY-MM-DD ...lines that reveal an internal review timeline) - Author-style filenames (
<Surname>{Year}_*pattern, e.g.,<Surname>2025_<Journal>_Fig01.png; allow-list excludes generic tokens likeIssue2024_,Sample2025_) - Binary EXIF metadata (DOCX / PPTX / XLSX / PDF / PNG / JPG / TIFF — scanned via
exiftoolfor home paths, email addresses and the user pattern, matched case-insensitively. If binaries are present andexiftoolis not installed, the RESULT line reads INCOMPLETE and--strictexits 3)
Exit codes: 0 clean, 1 findings, 2 usage error / invalid user regex / a scan that could not run, 3 (--strict only) a check that could not run. Only exit 0 means clean.
Known limits: the Korean role branch (item 5) requires the honorific -nim suffix. A bare third-person mention (a Korean name followed by the role word without -nim) is not caught by this script, because separating it from job descriptions such as "advising professor" needs a stoplist that grep -E cannot express. Check such mentions by hand.
Cross-validation
For categories the script flags, also verify manually with the Grep tool against ${CLAUDE_SKILL_DIR}/references/pii-patterns.md. Pay particular attention to:
- Names not in the extra-patterns argument (e.g., a co-author who appeared only in one early draft)
- Domain-specific institutional acronyms (your institution may not be in the default list)
- Project-specific identifiers like
CK-NN,MA-NN, dated cohort names
Output Format
Present all findings in a remediation table:
Gate: User reviews all findings. Fix each one in the working copy. Re-run the audit on the working copy. Proceed only when 0 hits are confirmed.
Phase 3: Generalization
Language
- Replace:
"in Korean"/"한국어로"/"Korean language"→"in the user's preferred language" - Replace:
"communicate in [specific language]"→"Communicate with the user in their preferred language" - Keep: multilingual trigger keywords in the
metadata.triggersfield (or the target package's equivalent) (these aid discovery)
Role
- Replace:
"radiology researcher"→"medical researcher"(if the skill is domain-general) - Replace:
"professor"/"fellow"→"researcher"or"user"(context-dependent) - Keep: domain-specific terms that define the skill's scope (e.g., "diagnostic accuracy" is fine)
Paths
- Replace: hardcoded absolute paths →
${CLAUDE_SKILL_DIR}for bundled reference files - Replace:
~/Documents/...→ user-provided output directory - Keep: relative paths within the skill directory structure
Environment
- Remove: assumptions about specific OS (macOS, Linux)
- Remove: assumptions about specific editors or IDEs
- Remove: references to personal infrastructure (agents, other personal skills)
- Keep: tool requirements, described in the skill body (a prerequisites section). The schema has no
tools:field, andallowed-toolspre-approves tools rather than describing them, so do not move requirements there
Interoperability
- Check: does the skill reference other skills by name (e.g., "route to
analyze-stats")? - If referenced skill exists in target package: keep the reference
- If referenced skill does NOT exist in target package: make it optional with fallback instructions
Output
Show a unified diff of all generalization changes for user review.
Phase 4: License Compatibility Check
For each file in the skill's references/ and scripts/ directories:
- Check for license headers or declarations within the file
- Check for LICENSE files in the same directory
- If the file contains content from a known standard (reporting guidelines, clinical scores, etc.), identify the source and its license
Classify each file with ${CLAUDE_SKILL_DIR}/references/license-compatibility-matrix.md (written for an MIT target; it also lists common checklist and package licenses). Bundle compatible content with the attribution header or license notice it requires; convert non-compatible content to the matrix's URL Reference Pattern; mark GPL/LGPL tools as optional external dependencies; treat an unknown license as incompatible (remove, or get permission).
Output
Present license audit table:
Phase 5: Validate and Test
Structural Validation
- YAML frontmatter: Parse and verify the required fields (
nameanddescriptionper the Agent Skills spec, plus any field the target package's own validator requires) - File references: Every
${CLAUDE_SKILL_DIR}/...path resolves to an actual file - Script executability: Scripts in
scripts/have appropriate shebangs - Line count: SKILL.md should be under 500 lines for optimal loading
- Description quality: Description should start with a verb and include trigger keywords
Final PII Re-check
Run audit_skill.sh --strict one final time on the cleaned skill. Must return exit code 0.
Cross-Platform Adapter Review
Check whether the skill can run in common desktop-agent environments:
| Platform | Check | |
|---|---|---|
| Claude Code | No hardcoded dependency on private ~/.claude paths unless documented. | |
| Codex | SKILL.md is self-contained and installable under ~/.agents/skills/. | |
| Cursor | A short .cursor/rules/*.mdc adapter can point to the canonical SKILL.md. | |
| Windows | Commands avoid Unix-only assumptions or provide PowerShell/Python alternatives. | |
| macOS/Linux | Shell examples use portable paths where possible. |
If the package is intended for a workshop or classroom, read ${CLAUDE_SKILL_DIR}/references/classroom-distribution.md and follow it (direct-download ZIPs, release assets, classroom checklist).
README Entry Draft
Generate a table row matching the target package's README format:
User Testing
Instruct the user to:
- Copy the cleaned skill to a test location:
cp -r <cleaned_skill> ~/.claude/skills/<skill-name> - Restart Claude Code
- Test the skill triggers by typing
/<skill-name>or relevant trigger phrases - Verify all phases work end-to-end on a sample input
Gate: User confirms testing is complete.
Phase 6: Package and Commit
Copy to Target Package
Update README
Apply the README entry drafted in Phase 5:
- Add row to the appropriate table (Available Now / Coming Soon)
- Update pipeline diagram if the skill adds a new stage
- Update skill count if mentioned in prose
Generate Commit Commands
Present the exact commands but do NOT auto-execute push:
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 98 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/publish-skill/SKILL.md
Popularity
- Repository stars
- 322
- Repository forks
- 78
- 7-day trend score
- 29
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/aperivue/medsci-skills/publish-skill)