agentleFS
zamushwanizamushwani/biomedical-ai-skills/CLAUDE.md

biomedical-ai-skills

CLAUDE.md1 starsChanged 3 months agoMITView on GitHub

Validated SKILL.md files for cancer biology and multi-omics research. Published to GitHub and to PyPI as biomedical-ai-skills. This file is binding. Where it conflicts with habit, convenience, or a plausible-looking tutorial, this file wins. Not every directory under skills/ is published. Some are unreviewed local drafts excluded from git. Run git ls-files skills/ before claiming a skill exists publicly. Each gate is a command. Run it and read the output. Do not proceed on assumption. Then read the actual signature…

  • Deletes or force-pushes
  • Installs packages
  • Commits and pushes

The file

Show its rules and text

We split this CLAUDE.md into the rules it gives an agent

15 rules. About 0 are common, 8 are distinctive, and 7 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈8

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 7

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  • could be automatic: a setting could enforce it
  1. Very specific:

    Not every directory under skills/ is published.

    line 17
  2. Distinctive:

    Verify before you write: Never write a version number, function signature, argument name, or default value from memory.

    line 23
  3. Distinctive:

    Never claim a test passes unless you executed it: If it was not run, say "written but not executed" and say why.

    line 26
  4. Distinctive:

    Stage explicit paths: Never git add . or git add -A.

    line 27
  5. Distinctive:

    Check the changelog whenever a major version has moved.

    line 48
  6. Distinctive:

    If you reference a shipped dataset or template file, confirm it exists:

    line 50
  7. Very specific:

    Read the existing SKILL.md completely first.

    line 120
  8. Very specific:

    Update the root README.md skills table row and the Skills-N badge.

    line 123
  9. Very specific:

    Add a CHANGELOG.md entry.

    line 125
  10. Very specific:

    No mermaid: Use an image from assets/ via a raw.githubusercontent.com URL.

    line 167
  11. Very specific:

    Every skill should have tests/ validating it against a public dataset, with a run_all entry point and a README.md listing expected values …

    line 173
  12. Distinctive:

    If a suite was not executed, say so explicitly.

    line 177
  13. Distinctive:

    Never commit personal file paths, usernames, institutional names, server addresses, email addresses, credentials, unpublished data, or …

    line 181
  14. Very specific:

    Use generic paths (/path/to/data/) and public accessions (GSE12345, TCGA-LUAD).

    line 183
  15. Distinctive:

    Write as a domain expert writing to a colleague.

    line 189

≈ “Common” is an estimate: at least 1 in 5 of the 26,980 CLAUDE.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
CLAUDE.md

Biomedical AI Skills

Validated SKILL.md files for cancer biology and multi-omics research. Published to GitHub and to PyPI as biomedical-ai-skills.

This file is binding. Where it conflicts with habit, convenience, or a plausible-looking tutorial, this file wins.

Layout

skills/<name>/SKILL.md      the skill
skills/<name>/README.md     overview, diagram, gotchas table
skills/<name>/tests/        validation against public datasets
src/biomedical_ai_skills/   pip package and CLI
assets/                     images referenced by README, absolute URLs only

Not every directory under skills/ is published. Some are unreviewed local drafts excluded from git. Run git ls-files skills/ before claiming a skill exists publicly.


The five non-negotiables

  1. Verify before you write. Never write a version number, function signature, argument name, or default value from memory. Check it against the registry and the package source, in this session, before it goes in a file.
  2. Changing a skill means releasing. A skill edit that is committed but not released leaves pip install serving stale content. The release is part of the change, not a follow-up.
  3. Never report success from an intermediate signal. A green workflow, a 200 response, or a successful commit is not evidence the artifact is correct. Verify the artifact itself.
  4. Never claim a test passes unless you executed it. If it was not run, say "written but not executed" and say why.
  5. Stage explicit paths. Never git add . or git add -A. Loose personal files sit in the repo root.

Verification gates

Each gate is a command. Run it and read the output. Do not proceed on assumption.

Gate 1 — before writing about any package

curl -s https://crandb.r-pkg.org/<pkg>        | python3 -m json.tool | head -20   # R
curl -s https://pypi.org/pypi/<pkg>/json      | python3 -m json.tool | head -20   # Python

Then read the actual signature from source, not a tutorial:

curl -s https://raw.githubusercontent.com/<org>/<repo>/master/R/<fn>.R | sed -n '/^<fn> <- function/,/) {/p'

Check the changelog whenever a major version has moved. Silent default changes matter more than errors: code that runs and returns different numbers is worse than code that fails.

If you reference a shipped dataset or template file, confirm it exists:

curl -s https://api.github.com/repos/<org>/<repo>/contents/data

State in the skill when a package is stale or abandoned, and name the maintained replacement.

Gate 2 — before committing

git config user.name                                   # must be zamushwani
git status --short                                     # nothing unexpected
grep -rnI "/Users/\|/home/[a-z]\|@gmail\|api[_-]\?key\|password" $(git ls-files)

Stage by explicit path. Then confirm what is actually staged:

git diff --cached --name-only

Gate 3 — after any change under skills/ or to pyproject.toml

rm -rf dist build && python3 -m build
python3 -c "import zipfile,glob; z=zipfile.ZipFile(glob.glob('dist/*.whl')[0]); print(sorted({n.split('/')[2] for n in z.namelist() if n.startswith('biomedical_ai_skills/skills/')}))"

The printed list must be exactly the intended skills. No drafts.

Gate 4 — after any release

A green workflow is not proof. Three independent checks, in order of authority:

# 1. authoritative file index (NOT the /json endpoint, which caches for minutes)
curl -s https://pypi.org/simple/biomedical-ai-skills/ | grep -o 'biomedical_ai_skills-[0-9.]*'

# 2. real install in a clean venv
python3 -m venv /tmp/vcheck && /tmp/vcheck/bin/pip install --no-cache-dir "biomedical-ai-skills==X.Y.Z"
/tmp/vcheck/bin/biomedical-skills --version && /tmp/vcheck/bin/biomedical-skills list

# 3. content check, not just version
/tmp/vcheck/bin/python -c "from pathlib import Path; import biomedical_ai_skills as b; print(len((Path(b.__file__).parent/'skills'/'<name>'/'SKILL.md').read_text().splitlines()))"

Line count must match the repo. A matching version number with stale content is a silent failure.


Known traps

These have all happened. Do not repeat them.

TrapWhat went wrongRule
Stale workflow runPolled gh run list --limit 1 seconds after creating a release, read the previous run's "success", reported it as doneMatch the run on its tag or title, never just "most recent"
Cached PyPI JSON/pypi/<pkg>/json reported the old version for minutes after a successful publishUse /simple/<pkg>/, then a real pip install
Skill edited, never releasedTwo days of work sat in the repo while pip install served the old fileBump, tag, release in the same session as the edit
Draft skills nearly publishedA directory-wide package include would have shipped 10 unreviewed drafts to PyPI, where releases cannot be deletedEnumerate skills one by one, in two places, with a build-time guard
Relative links on PyPI16 README links 404'd on the project pageAll root-README links absolute
Mermaid on PyPIRendered as raw source; PyPI has no mermaidRoot README uses an image from assets/
Badge silently droppedA badge rework removed the skills count without noticingRe-read the rendered header after editing badges
Duplicate day numbersTwo tracker rows shared a number after an insertionAfter renumbering, check for duplicates

Adding or changing a skill

  1. Read the existing SKILL.md completely first.
  2. Match the established structure: description, ## When to Use This Skill, ## Inputs, body sections, ## Output Specification, ## Validation Checks, ## Common Pitfalls, ## Related Skills, ## Public Datasets for Testing.
  3. Cross-link with relative paths: [\name`](../name/SKILL.md)`.
  4. Update the root README.md skills table row and the Skills-N badge.
  5. Update skills/<name>/README.md.
  6. Add a CHANGELOG.md entry.
  7. Run Gate 3.
  8. Release (below). Not optional.

Publishing a skill to PyPI

A skill must be added in two places or the build fails by design:

  1. pyproject.toml — both [tool.hatch.build.targets.wheel.force-include] and [tool.hatch.build.targets.sdist]
  2. .github/workflows/publish.yml — the expected set in "Confirm no draft skills were packaged"

The workflow compares wheel contents against expected and fails on mismatch. This exists because skills/ contains unreviewed drafts and PyPI releases cannot be deleted, only yanked.

Releasing

Version lives in three files. All must match:

pyproject.toml                        version = "X.Y.Z"
src/biomedical_ai_skills/__init__.py  __version__ = "X.Y.Z"
CITATION.cff                          version: X.Y.Z
# move CHANGELOG [Unreleased] entries under a new "## [X.Y.Z] - DATE" heading
# add the compare link at the bottom of CHANGELOG
git commit && git push origin main
git tag -a vX.Y.Z -m "vX.Y.Z: summary" && git push origin vX.Y.Z
gh release create vX.Y.Z --title "..." --notes "..."

The GitHub release triggers publishing via Trusted Publishing. No API token is stored anywhere — the workflow mints a short-lived OIDC token per run. Never add a PyPI token to repository secrets.

Then run Gate 4. The release is not done until Gate 4 passes.


README constraints

The root README.md is the PyPI long description and must render in both places:

  • All links absolute. Relative links work on GitHub and 404 on PyPI.
  • No mermaid. Use an image from assets/ via a raw.githubusercontent.com URL.

Skill-level READMEs are GitHub-only and may use mermaid.

Testing

Every skill should have tests/ validating it against a public dataset, with a run_all entry point and a README.md listing expected values and their source.

  • Assert measured values, not remembered ones.
  • Where a result is seed- or version-dependent, assert a range and state why.
  • If a suite was not executed, say so explicitly. Never imply it passed.

Security

Never commit personal file paths, usernames, institutional names, server addresses, email addresses, credentials, unpublished data, or patient identifiers.

Use generic paths (/path/to/data/) and public accessions (GSE12345, TCGA-LUAD).

Loose image and data files sometimes sit untracked in the repo root. Never git add ..

Writing

Write as a domain expert writing to a colleague. Assume the reader knows the biology; explain the tooling.

  • Explain why a parameter value, not what the parameter is
  • Decision trees as plain code fences, not paragraphs
  • Comments only where the code is non-obvious
  • Pitfalls as: the mistake, the mechanism, the fix

Banned: comprehensive, robust, cutting-edge, state-of-the-art, leverages, facilitates, enables, "it is important to note", "in this guide". No field introductions. No marketing language.

Definition of done

A day's work is done only when all of these hold:

  • Every version and signature verified this session (Gate 1)
  • Root README table and badge updated
  • Skill README updated
  • CHANGELOG entry added
  • Security scan clean (Gate 2)
  • Build shows exactly the intended skills (Gate 3)
  • Version bumped in all three files, tagged, released
  • Gate 4 passed: content verified from a real pip install
  • Anything not done is stated plainly, with the reason

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.