skills/done/SKILL.md
Use when ending a session, wrapping up work, or when the user says "done", "wrap up", "let's commit", or "end of session". Summarizes work, updates docs, and commits.
npx skillsauth add musserlab/lab-claude-skills doneInstall 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.
When the user invokes /done, perform these end-of-session tasks in order.
Check the project's .claude/CLAUDE.md for a project-type: field:
data-science — Full wrap-up including all stepsgeneral (or no field found) — Skip steps marked [Data Science only]If no field exists, infer: renv.lock, outs/, or numbered XX_*.qmd scripts → data science. Otherwise → general.
Check if .claude/done_extensions.md exists in the project root. If it does, read it
and incorporate its steps into the wrap-up at the points it specifies (e.g., "run after
Step 2" or "run before Step 4"). Extension steps are additional — they never replace
core steps.
If no extension file exists, skip silently.
Briefly list what was completed this session:
Append a new entry to the Session Log section at the bottom of the project's .claude/CLAUDE.md. This is a rolling log of the last 5 sessions — it's the primary place future sessions look for "what to do next."
## Session Log
<!-- Maintained by /done. Most recent first. Keep last 5 entries. -->
### YYYY-MM-DD — Short title
- **Plans:** [plan name(s) worked on, or "None"]
- **Work:** [1-2 sentences on what was done]
- **Next:** [bullet list of follow-up items for future sessions]
/done run in this session), replace it rather than adding a duplicate. Merge the work descriptions and update the Next items. This allows /done to be run multiple times per session without cluttering the log.### 2026-03-22 (session 1) — Title, ### 2026-03-22 (session 2) — Title, etc. This makes the log scannable when intensive work produces multiple sessions per day. The number reflects chronological order within that day.figure_plan.md"). Write "None" if no plans were involved. This helps track work that falls outside of plans.Only update planning documents directly relevant to this session's work. Do NOT read all registered documents — identify the 1-2 that matter from session context.
For each relevant planning document:
a. Status tables — Mark completed phases/tasks. Add new phases if needed. When a phase is marked complete, collapse its detailed content to a 3-5 line summary (what was done, key outcomes). Before collapsing, ensure any forward-looking information needed by future phases is already captured elsewhere in the plan.
b. Script and file tracking — Add new scripts, mark replaced ones as legacy, update modified entries.
c. Task lists — Check/uncheck items as appropriate.
Show proposed changes before editing.
If a plan file from plan mode exists in ~/.claude/plans/ and is relevant:
.claude/ documentOnly do these checks if the session actually changed something relevant. Skip silently otherwise.
If canonical data files were created, replaced, or had format changes:
If new conventions, gotchas, or important patterns were discovered this session, propose additions. Only record things that are surprising or counter-default — skip anything Claude would infer from the codebase.
If reusable lessons or gotchas were discovered, or existing entries proved wrong/outdated, propose updates. Keep under 200 lines.
.claude/*.md filesIf new .claude/*.md files were created this session, add them to the Project Document Registry.
If the project has a CHANGELOG.md in its root directory:
CHANGELOG.md exists, skip silently — do not suggest creating oneRun git status to check for uncommitted changes.
If there are changes:
git add file1 file2), NEVER use git add . or git add -A for the project repo — broad staging will pick up changes from parallel Claude Code sessionsgit status) is a cross-check — files
appearing in current but not initial are candidates but not certaintiesgit push). Only ask the user if the push fails (e.g., rejected by remote, no remote configured).~/.claude)Check for uncommitted changes:
git -C ~/.claude status --short
If there are changes (skills, CLAUDE.md, etc.):
&&):
git -C ~/.claude add -Agit -C ~/.claude commit -m "Title" -m "Co-Authored-By: Claude <[email protected]>" (use multiple -m flags, NOT heredocs)git -C ~/.claude pushSkill registration check: If new skills were created in ~/.claude/skills/ this session, verify each appears in the Available Skills table in ~/.claude/CLAUDE.md. If any are missing, add them before committing.
Sync reminder: After committing, check if ~/.claude/.sync-canonical/ exists (indicates a two-repo sync setup). If it does, compare the cluster repo HEAD against the canonical staging HEAD. If they differ:
"You have changes in
~/.claudethat haven't been synced to canonical. Run/sync-clusternow to review and push them." If on the cluster, offer to run it immediately. If on macOS (canonical machine), remind the user to run/sync-clusteron the cluster next time they're there — macOS mode only pulls, it can't push cluster changes to canonical. Do NOT run/sync-clusterautomatically — it's an interactive skill that requires decisions about what to push/modify/skip.
Only if conda packages were installed or updated during this session:
environment.yml:
conda env export --from-history
environment.yml. If they differ (new packages, removed
packages, version changes), ask: "Conda environment has changed. Export to
environment.yml?"conda env export --from-history > environment.yml
prefix: line — machine-specific absolute path, not portabledefaults from channels — conflicts with bioconda strict channel priorityconda-forge is listed as a channelenvironment.yml in the commit.Use --from-history (not bare conda env export) so only explicitly installed packages
are recorded, not platform-specific transitive dependencies.
Only if R packages were installed or updated during this session:
Rscript -e "renv::status()" 2>/dev/null
If out of sync, ask about renv::snapshot(). Include updated renv.lock in the commit.
Check if this is a publishable Quarto project (all three must be true):
_quarto.yml existstype: book or type: website)gh-pages branch existsIf yes, ask: "This is a Quarto book/website with GitHub Pages. Publish now?"
Do NOT offer for regular .qmd analysis scripts, projects without gh-pages, or type: default.
Brief "Session complete" message listing:
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.