pi-scientific-skills
159 modular K-Dense scientific Agent Skills for the pi coding agent — pick only the fields you need: biology, genomics, chemistry, drug discovery, clinical research, machine learning, physics, statistics. Skills (c) 2025 K-Dense Inc. and contributors (MIT
Package details
Install pi-scientific-skills from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:pi-scientific-skills- Package
pi-scientific-skills- Version
1.2.0- Published
- Aug 24, 2026
- Downloads
- 654/mo · 209/wk
- Author
- danieldoesbio
- License
- MIT
- Types
- extension, skill
- Size
- 20.5 MB
- Dependencies
- 0 dependencies · 2 peers
Pi manifest JSON
{
"extensions": [
"./extensions"
],
"skills": [
"./skills"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-scientific-skills
A pi package bundling 159 scientific and research Agent Skills for the pi coding agent. Ported from K-Dense-AI/scientific-agent-skills (MIT), which implements the open Agent Skills standard that pi supports natively.
Use pi as an AI scientist: single-cell RNA-seq, drug discovery, protein design, medical imaging, clinical research, ML/AI, statistics, physics, geospatial analysis, scientific writing, grant proposals, and more — with curated, version-pinned documentation and, where useful, helper scripts.
Install
pi install npm:pi-scientific-skills
# or from source
pi install git:github.com/danieldoesbio/pi-scientific-skills
Try without installing:
pi -e npm:pi-scientific-skills
After install, all 159 skills are available. When a task matches, pi loads the skill on demand; you can also force one:
/skill:scanpy # single-cell RNA-seq analysis
/skill:scientific-writing # papers, reports, proposals
/skill:pathogen-variant-surveillance
List installed packages with pi list, and enable/disable individual skills with pi config.
/sci — pick what you load
All 159 skill descriptions sit in the system prompt at startup: pi's progressive disclosure keeps descriptions always in context and loads only the skill bodies on demand. Measured, that index costs ~18k tokens. That's over half a 32k context window, and more than an 8k window can hold at all. On a small local model it's the difference between usable and unusable.
pi config can already toggle skills one at a time. /sci puts a curated
profile layer on top so you don't have to do that 159 times:
/sci # interactive menu
/sci search # recommended — load Core, reach the rest on demand
/sci find <q> # search all 159 by what you're trying to do
/sci status # what's active now, and what it costs
/sci profiles # jump straight to the picker
/sci all # re-enable everything
/sci none # disable all skills from this package
/sci reset # forget saved profiles, re-enable everything
Search mode — the recommended setup
Choosing a profile means betting on what you'll need before the work starts. When the bet is wrong, the skill you needed is simply invisible.
/sci search removes the bet. It loads the ten Core skills — ~1.1k tokens
instead of ~18k — and the model reaches everything else through a sci_find
tool that searches all 159 by description and returns the path to load:
> I have a sorted BAM and need to call variants from it
sci_find("variant calling from a bam file")
→ pysam, pathogen-variant-surveillance, genomic-intelligence …
read .../skills/pysam/SKILL.md
That's the same two-step pi already uses for skills — descriptions first, body on demand — pushed one level further, so narrowing what's always loaded no longer means making anything unreachable.
sci_find is registered whether or not you run /sci search, so it works
alongside any profile, and /sci find runs the same search for you. Verified
against a small model (deepseek-v4-flash), not just a frontier one — the whole
point is the low end.
One caveat. With any filter active, /skill:<name> for a filtered-out skill
fails silently: pi doesn't recognise the name and passes the literal text
through to the model instead of erroring. Use /sci find or ask in plain
language and let sci_find do it. /sci status repeats this warning.
Ten profiles: Core, Genomics & Bioinformatics, Scientific ML & Data Science,
Writing/Literature/Presentation, Single-Cell Omics, Drug Discovery, Clinical &
Translational, Physics/Astronomy/Materials/Earth, Bioimaging & Neuroscience, and
Lab Operations. An eleventh toggle, pi-agent, covers the pi harness itself.
Each field profile is standalone: the data-acquisition skills a field needs
live in that field's profile, so you never enable a second profile just to fetch
your own data.
The picker is a checkbox list. Arrows move, space toggles, a selects all, n clears, enter applies, esc cancels. It shows the live token cost as you toggle:
Scientific skills — 12/159 skills, ~1.4k tokens, saves ~16.6k
/sci writes a normal per-package filter into your ~/.pi/agent/settings.json:
{ "packages": [ { "source": "pi-scientific-skills", "skills": ["scanpy", "pysam"] } ] }
So it composes with pi config instead of replacing it. Fine-tune there
afterward and /sci status will tell you it did. No SKILL.md is ever modified,
so npm run sync:upstream can't clobber your selection, and uninstalling the
extension leaves your settings working.
Overrides you wrote by hand (!pattern, +path, -path) are preserved. The one
exception is disabling everything (/sci none, or applying an empty selection),
which has to write an empty list and can't carry them. If your settings are
malformed, or a project-local .pi/settings.json would override the global one,
/sci names the file and refuses to write rather than guess.
Nothing is written unless you ask for it. On a first run /sci offers search
mode and does nothing if you decline, escape, or ignore it. On an upgrade it
tells you once what changed and leaves your selection exactly as it was — your
settings.json is not touched by an upgrade you didn't ask for.
What's inside
159 skills across scientific domains — bioinformatics & genomics, cheminformatics & drug discovery, proteomics, clinical research & precision medicine, medical imaging, ML/AI & deep learning, materials science, physics & astronomy, engineering & simulation, data analysis & visualization, geospatial science, laboratory automation, scientific communication (writing, slides, schematics, posters), research methodology (grants, critical thinking, scholar evaluation), and 100+ database lookups (PubMed, ChEMBL, UniProt, COSMIC, ClinicalTrials.gov, and more).
Each skill directory ships SKILL.md (frontmatter + instructions) and, where useful, references/ (on-demand docs), scripts/ (helper code), and assets/ (templates). Pi implements the Agent Skills standard, so discovery and on-demand loading work exactly as with Claude Code / Cursor / Codex.
Tested in pi
What's actually been tested, with the numbers:
- Discovery & validation — all 159: every skill is offered to the model in pi with the correct name and description, checked against the packed tarball; frontmatter passes a validator that reimplements pi's rules (0 warnings, 0 hard issues). The four omitted Anthropic skills are confirmed absent in the same run.
- Functional runs — 16 of 159. Record in
testing/ledger.json(in the repo; not shipped in the npm package). Four at 1.0.0:statistical-analysis,pathogen-variant-surveillance,experimental-design,scientific-visualization(the last two underz-ai/glm-5.2; the first two's model was not recorded). Six at 1.0.2 underdeepseek/deepseek-v4-flash:ncats-arax(live ARAX/TRAPI one-hop, imatinib → ABL1),relsa-severity-assessment(bundled cohort scored, KDE plot written),etetoolkit(ete4 Newick I/O, prune, reroot, Robinson-Foulds),venue-templates(Nature scaffold generated; the author-substitution regex is a rough edge, not a fail),arbor(HTR cycle via bundledtree.py; merge gate correctly rejected a non-generalizing candidate),deepspot-m(pi offered it; the model loaded SKILL.md and followed the documented install path). Six at 1.2.0 under the same model, including both skills new in v2.64.0:lab-hardware-cad(bundledcheck.pyran; ANSI/SLAS standards listed and inspected with tolerances),waypoint-bio(PyPI package installed,waypointCLI verified with all five subcommands, stopped correctly at the gated Hugging Face login),networkx(workflow steps 1–2 scripted and run),generate-image(bundled script listed 43 models over the documented no-key path),pi-agent(First Decision routing followed to the overview reference),scikit-bio(installed 0.7.3 in a venv, Section 1 reverse-complement verified). The other 143 have not been exercised here, so take them as upstream ships them. /sciandsci_find— automated, on every change: 49 behavioural checks against a stubbed pi (/sci searchwrites the Core filter and preserves hand-written!patternoverrides; a seeded prior-version config leavessettings.jsonbyte-identical; malformed settings refuse without writing), 29 ranking checks against the real 159 descriptions including four queries that must return nothing, and 7 checks that pi itself honours the filter, run through a realDefaultPackageManager. The first-run offer is additionally driven through pi's real TUI over a pty: accepting writes Core's 10 skills, declining and timing out write nothing at all. To try any of it by hand,npm run tryopens this package in a throwaway pi — your own~/.pi/agentis never touched.- Search mode against a small model — 3 of 3. With only Core loaded,
deepseek/deepseek-v4-flashwas asked three questions whose skills were not in its prompt (call variants from a BAM, cluster a 10x matrix, dock a ligand). It calledsci_findunprompted every time, got a correct skill back, and read theSKILL.md. Re-run against the 1.2.0 tarball with the same result. Recorded underextensionRunsintesting/ledger.json. The probes never name the skill — that's the whole test. - Skill assets (upstream's suite, not run in pi): upstream's own pytest battery passes on the byte-identical content. The 2,512-test figure quoted in earlier releases was counted at v2.62.0; upstream releases since then add suites for their new skills, and I have not re-counted, so treat upstream's CI badge as the current source.
Upstream notes that review depth varies by authorship: K-Dense-authored skills go through their internal review, while community-contributed skills are reviewed "to the best of our ability, but with limited resources" — and upstream advises against enabling everything at once. This package ships the full v2.64.0 snapshot, so /sci (or pi config) is how you narrow it to what you actually intend to run. Treat an enabled skill as third-party code you are choosing to execute.
Caveats: allowed-tools is inert in pi (no pre-approval gate; no functional harm). Skills requiring heavy Python stacks (scanpy, rdkit, torch, …) need those installed in your environment — same as any harness.
Updating
The skills here are a snapshot of upstream at v2.64.0. This package's own
version is separate — it starts at 1.0.0 and tracks changes to this
distribution, since the contents differ from upstream (159 skills, plus /sci)
and upstream ships patch releases that would collide. The upstream tag a given
release wraps is always recorded in package.json as upstreamVersion.
As a user, get a newer snapshot by reinstalling:
pi install npm:pi-scientific-skills
Maintainers re-vendor from upstream by cloning this repo (scripts/ is not shipped
in the package) and running:
npm run sync:upstream # pulls the latest scientific-agent-skills release and replaces skills/
npm run validate # pi-rule frontmatter check across all skills
See DOCUMENTATION.md for the port process, sync procedure, and validation rules.
Contributing
If you use pi and something here could work better in it, please open an issue or a PR. Two things I'd especially like:
- pi-specific adaptations. These skills were written for the Agent Skills standard in general, not for pi. If a skill trips over something in the pi harness, or its frontmatter and tool expectations could be tuned to fit pi better, I want to hear about it.
/sciprofiles. The ten field profiles are a first guess at how scientists group their work, put together by one researcher and a language model. If your field is served badly by them — wrong bundle, missing skill, a profile you'd have to enable two of — say so.
Improvements to a skill's actual content should go upstream, to
K-Dense-AI/scientific-agent-skills.
skills/ here is a byte-identical snapshot, and
npm run sync:upstream replaces it wholesale, so a fix patched in here would
disappear on my next sync. Upstream it sticks, helps every other harness too,
and flows back here on its own. If a pi-specific change can't go upstream, open
it here and I'll carry it as a clearly marked local addition.
On future additions of my own
I may add skills of my own here over time — things that come out of my research and seem worth sharing. If I do:
- They won't go in
skills/. That directory stays upstream's. Mine will live in a separate directory registered as its own root (pi'sskillsfield accepts several), so you can tell them apart from the file tree. - Each one will name its author in its frontmatter, and I'll list them here.
- The counts in this README will stay separate, so "159 skills from upstream" doesn't quietly drift into "159 skills" of mixed origin.
None exist yet. All 159 skills shipped today are upstream's.
License & Credits
- The collection is © 2025 K-Dense Inc., MIT — see LICENSE.md (upstream text verbatim). This package is an independent distribution of K-Dense-AI/scientific-agent-skills; all credit for the skills goes to the upstream maintainers and their community contributors. Nothing in
skills/is this maintainer's work — it is a byte-identical snapshot. If you use this in a project or publication, please cite upstream using the formats in their Citation section — the collection, plus each individual skill that contributed to your work. - Many skills were contributed to upstream by third-party authors, credited in each skill's
metadata.skill-authorfrontmatter field (pointing at the field rather than listing names here, so credit cannot drift out of date on a sync). A few declare their own terms for the skill text:what-if-oracleis CC BY-NC-SA 4.0 (non-commercial, © AHK Strategies),bidsanddepmapare CC BY 4.0, andpacsomaticships its ownLICENSE(MIT, © 2026 Beifang Niu). Check that field before commercial or redistributive use. Note that on skills wrapping a library, thelicense:field records that library's license (e.g.cobrapy: GPL-2.0), not the license of the skill text. One of those wrapped tools is itself non-commercial:deepspot-mdocuments the DeepSpot-M package (PolyForm Noncommercial 1.0.0) and its gated Hugging Face weights (CC BY-NC-SA 4.0). The skill text is MIT like the rest; the tool it drives is not, so check before commercial use. - Not included: upstream also vendors Anthropic's
docx,pdf,pptxandxlsxskills. Their licence reserves all rights and forbids redistribution to third parties, so this package deliberately omits them — that is the only difference from upstream'sskills/. Get them from Anthropic directly. (pptx-postersis K-Dense's own skill and is included.) - Pi packaging, the
/sciextension, and maintenance by danieldoesbio — © 2026, MIT, same terms as above. This coversextensions/andscripts/only;LICENSE.mdis reproduced unmodified from upstream and governs the bundled skills.
How this port was made
I started by downloading the K-Dense repository and the pi extensions page as
source material. The porting itself was done by
deepseek/deepseek-v4-flash-0731 running under a moonshotai/kimi-k3
advisor. Initial testing in pi used z-ai/glm-5.2. A final pass in
Claude Code with Opus 5 handled the licence review, documentation, and
release prep.
I directed the work and made the calls, and I'm responsible for what shipped.
The packaging and the /sci extension are largely model-written, so I'd rather
say that outright. None of it touched skills/.
Built with the pi ecosystem
Put together while leaning on other people's pi packages, all of which shaped
this one:
pi-subagents,
pi-lens,
pi-web-access,
pi-memory,
context-mode,
pi-markdown-preview, and
@juicesharp/rpiv-advisor.
Thanks to everyone building in this space.
I've gotten a lot of use out of these K-Dense skills while working on my own research. I personally want to thank them for curating the list and everyone who contributed to it so far!!!