skills/new-skill/SKILL.md
Create a new Claude Code skill with proper structure and effective description. Use when creating a new skill, or when the /done skill proposes a new skill and the user approves. Also use when refactoring CLAUDE.md content into a skill.
npx skillsauth add musserlab/lab-claude-skills new-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.
Follow these steps when creating a new skill, whether proposed during /done or requested directly.
Before creating, verify the pattern actually warrants a skill (not just a CLAUDE.md entry):
If it's a simple one-liner convention, put it in the project CLAUDE.md instead.
Ask the user if not already decided:
{project}/.claude/skills/{name}/SKILL.md) — Specific to one project. Examples: gene naming conventions, project-specific data formats, project-specific workflows.~/.claude/skills/{name}/SKILL.md) — Applies across multiple projects. Examples: plotting conventions, environment management, export formats.The description field in YAML frontmatter is the single most important part of a skill — it determines whether the skill gets activated. Follow these rules:
The first sentence should say WHEN to use the skill, not just WHAT it does.
# BAD — describes what, not when:
description: R ggplot2 plotting conventions and theme.
# GOOD — front-loads triggers:
description: R ggplot2 plotting conventions and theme. Use when creating, modifying, or styling ggplot2 plots in R, or when adjusting plot themes, colors, labels, or formatting.
Be specific about what actions or contexts should activate the skill. Use verbs: "creating", "modifying", "saving", "debugging", "exporting".
# BAD — too vague:
description: Use when working with files.
# GOOD — specific actions:
description: Use when overwriting existing files, deleting files, or writing to directories that contain important data (data/, outs/).
If the skill could be confused with similar skills, add "Do NOT load for" clauses.
description: >
Quarto document conventions for data science analysis scripts (.qmd).
Use when creating or rendering .qmd analysis scripts in data science projects.
Do NOT load for Quarto books, websites, or documentation projects.
Think about variations of the task that should also trigger the skill:
| Core trigger | Edge cases to include | |---|---| | "creating plots" | modifying, styling, fixing, adjusting themes | | "saving figures" | choosing formats, setting DPI, export dimensions | | "committing changes" | writing commit messages, creating branches, making PRs |
The description should be 1-3 sentences. If it needs more, use the multi-line > YAML syntax. Put the most important trigger first.
---
name: skill-name
description: >
One-sentence summary of what the skill covers.
Use when [specific trigger 1], [specific trigger 2], or [specific trigger 3].
Do NOT load for [exclusion 1] or [exclusion 2].
user-invocable: false
---
Fields:
name — kebab-case, matches the directory namedescription — trigger-focused (see rules above)user-invocable — true only if the user triggers it with /name (like /done, /publish). Most skills are false (auto-loaded based on context).After the frontmatter, organize the skill body:
# Skill Name## sectionsKeep it focused. A skill should cover one coherent topic, not be a grab-bag.
~/.claude/skills/{name}/SKILL.md~/miniconda3, not /Users/jm284/miniconda3) so skills are portable/sync-skills when ready to publishFor skills that generate scripts (code-generating pipelines) or HPC-tool skills that deploy SLURM batch jobs, use the Anthropic skill-creator convention for bundled resources:
skill-name/
├── SKILL.md # <500 lines — workflow, decision points
├── templates/ # Job templates copied into project batch/<area>/
│ ├── my_array.sh
│ └── my_samples.tsv
├── scripts/ # Helper code deployed to project python/ or R/
│ └── my_helpers.py
└── references/ # Detailed docs loaded as needed
└── method_notes.md
The three subdirectories are semantically distinct — pick the right one for each resource:
| Subdir | What goes there | Where it gets deployed |
|--------|-----------------|------------------------|
| templates/ | Whole batch jobs (SLURM array .sh, sample sheet .tsv stub, conda env .yml, aggregator .qmd) | Project's batch/<area>/ (or scripts/<area>/ for .qmd), edited then run as-is |
| scripts/ | Reusable helper functions (parsers, plotters, importable modules) | Project's python/ or R/ dir, imported by analysis scripts |
| references/ | Long-form reading material (gotcha lists, lookup tables, tool docs) | Not deployed — loaded by Claude on demand from inside the skill |
Templates deployment convention: When the skill runs, it copies relevant
files from templates/ into the project's batch/<area>/ directory and tells
the user which placeholders to edit (<area>, <XX_script_name>, --array=1-N,
--mail-user=...). Templates should be self-documenting via top-of-file comments
that flag the edit points.
Helper deployment convention: When the skill runs:
python/ or R/ dir exists in the project, create if neededscripts/ directory.qmd imports from the project-level locationThis keeps helper code as real, testable files rather than code blocks in SKILL.md. SKILL.md references the helpers and describes how the generated script uses them.
Examples in the wild:
busco uses templates/ (5 batch files + an aggregator) and references/ (lineage table + gotchas list) — see ~/.claude/skills/busco/hpc, expression-report, and new-project use references/ and/or bundled exampleseggnog-mapper, prost-annotation, fcs-gx) embed batch scripts as fenced code blocks in SKILL.md — that's the legacy single-file pattern, slated for refactorAfter creating a new user-level skill, add it to the appropriate table in ~/.claude/CLAUDE.md under "Available Skills":
Project-level skills don't need registration in the user CLAUDE.md — they're discovered automatically from the project's .claude/skills/ directory.
development
Phylogenetic tree visualization and formatting with ggtree (R) or iTOL (web). Use when rendering a phylogenetic tree as a figure, choosing tree layout, coloring branches or labels by taxonomy, collapsing clades, displaying support values, or adding overlays to a tree. Do NOT load for tree inference (use protein-phylogeny skill) or domain annotation (future separate skill).
development
Configure and manage Claude Code security protections for sensitive files, credentials, and data. Use when the user invokes /security-setup to set up or modify protections against unauthorized file access, credential exposure, or sensitive data leaks.
development
Script organization for data science analysis projects with numbered scripts, data/outs/ directories, and reproducibility conventions. Use when creating new analysis scripts in projects that follow data science conventions (numbered XX_ prefix scripts, outs/ directories, BUILD_INFO.txt). Do NOT load for documentation projects (Quarto books), infrastructure repos, or projects without data/outs/ directory structure.
testing
R renv package management for data science projects. Use when working with renv (renv.lock, renv::restore, renv::snapshot) in R analysis projects. Do NOT load for projects that do not use R or renv.