sciagent-skill-creator
Scaffold a new SciAgent-Skills entry. Picks pipeline/toolkit/database/guide template, creates skills/{category}/{name}/SKILL.md…
MS data processing with PyOpenMS for LC-MS/MS proteomics and metabolomics — mzML/mzXML I/O, signal processing (smoothing, peak picking, centroiding), feature detection/linking, peptide/protein ID with FDR, untargeted metabolomics. Use matchms for simple spectral matching.
Claude Code
$ npx -y skills add jaechang-hits/SciAgent-Skills --skill pyopenms-mass-spectrometry --agent claude-code
Codex
$ npx skills add jaechang-hits/SciAgent-Skills --skill pyopenms-mass-spectrometry -a codex -y
Cursor
$ npx skills add jaechang-hits/SciAgent-Skills --skill pyopenms-mass-spectrometry -a cursor -y
Gemini CLI
$ npx skills add jaechang-hits/SciAgent-Skills --skill pyopenms-mass-spectrometry -a gemini-cli -y
GitHub Copilot
$ npx skills add jaechang-hits/SciAgent-Skills --skill pyopenms-mass-spectrometry -a github-copilot -y
OpenCode
$ npx skills add jaechang-hits/SciAgent-Skills --skill pyopenms-mass-spectrometry -a opencode -y
Windsurf
$ npx skills add jaechang-hits/SciAgent-Skills --skill pyopenms-mass-spectrometry -a windsurf -y
name: pyopenms-mass-spectrometry description: MS data processing with PyOpenMS for LC-MS/MS proteomics and metabolomics — mzML/mzXML I/O, signal processing (smoothing, peak picking, centroiding), feature detection/linking, peptide/protein ID with FDR, untargeted metabolomics. Use matchms for simple spectral matching. license: BSD-3-Clause
PyOpenMS provides Python bindings to the OpenMS C++ library for computational mass spectrometry. It supports proteomics and metabolomics data processing including file I/O for 10+ MS formats, signal processing, feature detection, peptide/protein identification, and quantitative analysis across samples.
uv pip install pyopenms numpy pandas matplotlib
Settle these with the user before writing any analysis code.
decisions:
- id: D1
param: instrumentResolution
kind: required
source: data
ask: "Is this high-resolution data, and are the spectra already centroided or still in profile mode?"
default: null
- id: D2
param: signalToNoiseThreshold
kind: required
source: user
depends_on: [D1]
ask: "How far above noise must a peak rise to be kept during centroiding?"
default: 1.0
skip_if: "spectra already centroided by the acquisition software"
- id: D3
param: massTolerance
kind: required
source: data
depends_on: [D1]
ask: "What mass accuracy should feature detection and linking assume?"
default: "10 ppm"
- id: D4
param: retentionTimeTolerance
kind: required
source: data
ask: "How far apart in retention time may the same feature appear across runs?"
default: "100 s"
- id: D5
param: chargeStateRange
kind: required
source: user
ask: "Which charge states should features be searched for?"
default: "1 to 3 - widen for intact protein or metabolite work"
- id: D6
param: intensityNormalization
kind: optional
source: user
ask: "Should spectra be normalized before comparison, and to total ion current or to the base peak?"
default: "not normalized"
- id: D7
param: smoothingFilter
kind: optional_conditional
source: data
ask: "Does the signal need smoothing before peak picking, and with which filter width?"
default: "no smoothing"D1 governs almost everything after it: profile data that skips centroiding produces one feature per scan point, and high-resolution tolerances applied to low-resolution data link features that are not the same compound. Both yield a full feature table.
import pyopenms as ms
# Load mzML file
exp = ms.MSExperiment()
ms.MzMLFile().load("sample.mzML", exp)
print(f"Spectra: {exp.getNrSpectra()}, Chromatograms: {exp.getNrChromatograms()}")
# Examine first spectrum
spec = exp.getSpectrum(0)
mz, intensity = spec.get_peaks()
print(f"MS level: {spec.getMSLevel()}, RT: {spec.getRT():.2f}s, Peaks: {len(mz)}")
# Quick preprocessing: smooth + centroid
gauss = ms.GaussFilter()
p = gauss.getParameters(); p.setValue("gaussian_width", 0.1); gauss.setParameters(p)
gauss.filterExperiment(exp)
picker = ms.PeakPickerHiRes()
centroided = ms.MSExperiment()
picker.pickExperiment(exp, centroided)
print(f"Centroided spectra: {centroided.getNrSpectra()}")Read and write mass spectrometry data in multiple formats.
import pyopenms as ms
# Read mzML (standard MS format)
exp = ms.MSExperiment()
ms.MzMLFile().load("data.mzML", exp)
# Indexed access for large files (memory-efficient)
loader = ms.IndexedMzMLFileLoader()
indexed_file = ms.OnDiscMSExperiment()
loader.load("large_data.mzML", indexed_file)
spec = indexed_file.getSpectrum(0) # Load single spectrum on demand
print(f"Total spectra: {indexed_file.getNrSpectra()}")
# Read identification results (idXML)
protein_ids, peptide_ids = [], []
ms.IdXMLFile().load("results.idXML", protein_ids, peptide_ids)
print(f"Peptide IDs: {len(peptide_ids)}, Protein IDs: {len(protein_ids)}")
# Read feature map
fm = ms.FeatureMap()
ms.FeatureXMLFile().load("features.featureXML", fm)
print(f"Features: {fm.size()}")# Write mzML with compression
exp_out = ms.MSExperiment()
# ... populate experiment ...
ms.MzMLFile().store("output.mzML", exp_out)
# Read FASTA database
entries = []
ms.FASTAFile().load("database.fasta", entries)
print(f"Proteins in DB: {len(entries)}")
for e in entries[:3]:
print(f" {e.identifier}: {e.sequence[:30]}...")**Supported formats**: mzML, mzXML, mzData (spectra); featureXML, consensusXML (features); idXML, mzIdentML, pepXML (identifications); TraML (transitions); mzTab (results); FASTA (sequences)
Preprocess raw spectral data for downstream analysis.
import pyopenms as ms
exp = ms.MSExperiment()
ms.MzMLFile().load("raw.mzML", exp)
# Gaussian smoothing
gauss = ms.GaussFilter()
p = gauss.getParameters()
p.setTurn your AI coding agent into a life sciences expert — 199 bioinformatics skills for Claude Code covering RNA-seq, single-cell analysis, genomics, proteomics, drug discovery, and more. Boosted BixBench from 65% to 92%. Open source.
Scaffold a new SciAgent-Skills entry. Picks pipeline/toolkit/database/guide template, creates skills/{category}/{name}/SKILL.md…
Bayesian modeling with PyMC 5: priors, likelihood, NUTS/ADVI sampling, diagnostics (R-hat, ESS), LOO/WAIC comparison, prediction.…
Time-to-event modeling with scikit-survival: Cox PH (elastic net), Random Survival Forests, Boosting, SVMs for censored data.…
Guided statistical analysis: test choice, assumption checks, effect sizes, power, APA reporting. Pick tests, verify assumptions,…
Python statistical modeling: regression (OLS, WLS, GLM), discrete (Logit, Poisson, NegBin), time series (ARIMA, SARIMAX, VAR),…
DL cell/nucleus segmentation for fluorescence and brightfield microscopy. Pre-trained models (cyto3, nuclei, tissuenet) and a…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.