skill
pi-scientific-skills
162 scientific and research Agent Skills for the pi coding agent. Ported from K-Dense-AI/scientific-agent-skills (MIT).
Set up
Skills are installed by placing their folder where your agent loads skills.
The download comes from github.com/danieldoesbio/pi-scientific-skills itself, not from our server, so what you get is exactly what its author published.
Install instructions come from the README
README
synced Oct 17, 2026pi-scientific-skills
A pi package bundling 176 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 176 skills are offered to the model. 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
If you later narrow the set with /sci or pi config, /skill:<name> typed at
the prompt still loads any of the 176, and sci_find reaches all of them either
way.
List installed packages with pi list, and enable/disable individual skills with pi config.
/sci — pick what you load
All 176 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 as pi renders it (name, description, and the absolute
SKILL.md path for each skill), that index costs roughly 25k tokens. That's
most of a 32k context window, and more than a 16k 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 176 times:
/sci # interactive menu
/sci search # recommended — no skills in the prompt, sci_find finds them
/sci find <q> # search all 176 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 # same as /sci search
/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 keeps every skill out of the system prompt —
~0 tokens instead of ~25k — and the model reaches all 176 through a
sci_find tool, listed in the system prompt, that searches their names,
descriptions and SKILL.md text and returns the 3 best matches with the path to
load (5 on a follow-up search):
> I have a sorted BAM and need to call variants from it
sci_find("variant calling from a bam file")
→ pysam, tiledbvcf, polars-bio
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. /sci find uses the same ranker for you and lists the
top 8. Profiles still put a field's skills straight into the prompt when you
want them there.
Verified against small models, not just a frontier one — the whole point is the
low end.
/skill:<name> typed at the prompt loads any skill in the package whether or
not your filter includes it: the extension hands pi the same skill block pi
builds itself. A filtered-out name has no autocomplete, so take it from
/sci find.
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/176 skills, ~1.7k tokens, saves ~23.5k
/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. See
Uninstalling for the one-time files /sci
leaves behind.
Overrides you wrote by hand (!pattern, +path, -path) survive your profile
choices. Search mode (/sci search, /sci none, or applying an empty
selection) writes an empty list, which can't carry them. It drops them and names
each one in its message. 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.
Your settings.json is never written unless you ask for it. /sci keeps one
small state file of its own in ~/.pi/agent/ so it asks its first-run
question once. 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 1.8.0 changed
- Skills synced to upstream v2.72.0: 14 new skills (among them
primer-design,mageck,flowkit,qiime2-amplicon,cellprofiler,relionandpybamm), all in the field profiles, and upstream's re-pinned dependencies and rewritten descriptions across the rest. - A saved profile picks up the new skills when you open
/sci profilesand press Enter. Search mode finds them already. fictivis not shipped: it drives a commercial manufacturing site through to orders that cannot be cancelled.sci_findranking was re-checked on the new descriptions (run).
What 1.7.0 changed
- Search mode loads no skills (~0 tokens instead of Core's ~1.4k), and pi's default system prompt now lists
sci_find(details, and a line to add for a custom prompt). - A BM25F ranker shows 3 hits on a prompt's first search and 5 on later ones. On 321 held-out requests its top 3 held the target 310 times; the old ranker's top 8, 283 times (run).
- In a live A/B on Gemma 4 26B-A4B, the new search read the right skill +6.0 points more often and used 867.5 fewer prompt tokens at the choice turn (paired median; run).
/sci noneis now the same as/sci search. To load Core again:/sci profiles, tick Core, press Enter.
What's inside
176 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
- All 176 skills are offered to the model in pi with the correct name and description, checked by the validator on every change and by a tarball smoke test on every release. Frontmatter passes a validator that reimplements pi's rules with 0 warnings and 0 hard issues.
- 43 skills have been run end to end in pi mostly under a small model
(
deepseek/deepseek-v4-flash): loaded, followed, and in most cases producing a real result — a live ARAX knowledge-graph query, a full non-compartmental PK analysis, a BIDS dataset layout, a time-series classifier trained to 100% on GunPoint, a live CELLxGENE Census query. Coverage grows with each skill batch. The per-skill record istesting/ledger.json, with the notes in DOCUMENTATION.md. /sciandsci_find, automated on every change: 246 behavioural checks against a stubbed pi (/sci searchwrites the empty search-mode filter;sci_findrenders in the tools section of pi's default system prompt, built by pi's own builder;/sci allpreserves hand-written!patternoverrides; a seeded prior-version config leavessettings.jsonbyte-identical;/skill:<filtered-name>is rebuilt,/skill:../../etc/passwdis not), 532 byte-identity checks against pi's own/skill:expansion (every skill, three argument forms), 107 ranking checks against the real 176 descriptions, 7 checks that pi itself honours the filter through a realDefaultPackageManager, and 189 frontmatter parity checks against pi's own parser (every skill plus synthetic edge cases). The first-run offer is driven through pi's real TUI over a pty.npm run tryopens this package in a throwaway pi; your own~/.pi/agentis never touched.- A 7.2 GB local model finds skills it cannot see. Ternary Bonsai 2 27B,
running on a laptop with no skill in its system prompt, was given one
probe per skill — 161 requests written as a scientist would ask, none naming
its skill. It found the target through
sci_findon the first attempt for 143 of 157 valid probes, and within three attempts for 156. Its whole starting context was about 1.8k tokens. Measured on 1.6.0, beforesci_findwas listed in the system prompt; the report istesting/report.md. - Search mode against small models, 3 of 3. Before 1.7.0, with only
Core loaded,
deepseek/deepseek-v4-flashcalledsci_findunprompted for three questions whose skills were not in its prompt, and read theSKILL.mdeach time. Recorded for 1.1.0, 1.2.0, 1.3.0, 1.4.0 and 1.5.0, 3 of 3 each time, underextensionRunsintesting/ledger.json. For 1.7.0, on pi 1.0.0 with no skill in the prompt, Bonsai 2 27B (local), Gemma 4 26B-A4B and DeepSeek V4 Flash each calledsci_findand found a matching skill for all three. - Upstream's own pytest suite passed at the last count (upstream v2.62.0); details in DOCUMENTATION.md.
Updating
The skills here are a snapshot of upstream at v2.72.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 (176 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 "176 skills from upstream" doesn't quietly drift into "176 skills" of mixed origin.
None exist yet. All 176 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. Since upstream v2.66.0 most skills end with a section asking the model to add upstream's paper (arXiv:2609.00065) to your references when the skill materially contributed, and to tell you it did so. That is a request from upstream carried here verbatim, not a licence condition;LICENSE.mdis unchanged. - 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 weights' access form is narrower than "noncommercial": it admits academic or public nonprofit researchers without concurrent commercial affiliations and excludes commercially funded or collaborative use, a noncommercial intention alone does not establish eligibility, and it is research use only, not clinical or diagnostic. The skill text is MIT like the rest; the tool it drives is not, so check before commercial use. - Third-party terms carried inside skills. Several skills document terms on the models, data or files they use, and those terms bind you, not the MIT skill text. They ship verbatim from upstream:
timesfm-forecasting(TimesFM 3.0 weights are non-commercial and non-production; the skill defaults to the Apache-2.0 2.5 checkpoint),molfeat(some pretrained featurizers need an upstream noncommercial licence acknowledgement),alphagenome(the API is non-commercial),latex-posters(keepbaposter.cls's GPL notice when you vendor it),pathogen-variant-surveillance(open endpoints are not a data-use licence; keep Pathoplexus attribution and terms),protocolsio-integration(protocols.io content is CC BY and needs attribution), anddhdna-profiler(attribution to AHK Strategies; the MIT licence does not relicense the linked research or product). Read the skill before relying on its outputs commercially. - Noncommercial academic distribution. This package is maintained by a graduate student as noncommercial academic work. That says how it is made, not what you may do with it: your own use of a non-commercial model, dataset or service above still has to meet that provider's terms.
- Not included: Anthropic's
docx,pdf,pptxandxlsxskills, whose licence reserves all rights and forbids redistribution (upstream dropped them itself in v2.72.0; they stay on the exclusion list as a guard), andfictiv, which drives a commercial manufacturing site through to uncancellable paid orders. These are the only differences from upstream'sskills/. (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!!!