[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6QF4035C85FJBX28Q57STRZ":3,"skill-same:01M6QF4035C85FJBX28Q57STRZ":105},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":14,"repositoryHtmlUrl":53,"repositoryHomepageUrl":54,"ownerHtmlUrl":55,"ownerBlogUrl":56,"ownerDescription":57,"updatedAt":58,"install":59,"resources":72},"01M6QF4035C85FJBX28Q57STRZ","matchms",null,"Process, clean, compare, and search tandem mass spectra with matchms. Use for MS\u002FMS file I\u002FO, metadata harmonization, peak filtering, spectral similarity, library matching, score matrices, and molecular-similarity networks. Use pyopenms instead for LC-MS feature detection or proteomics pipelines.","Tashima-Tarsh\u002FDisha6.6","Tashima-Tarsh","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F269906498?v=4","01M6PBH98X03XERH0HFT4PFB1P","NITISH KUMAR","01M6PBH9DA0M6KM3Z12P848F0K",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fkal-matchms\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"ms","loading","metabolomics","harmonization","molecular","mass spectrometry","life","local","clean","uv","workflows","edit","write","read","access","Bash","credentials","network","search","2026-11-10 10:12:30",false,"---\nname: matchms\ndescription: Process, clean, compare, and search tandem mass spectra with matchms. Use for MS\u002FMS file I\u002FO, metadata harmonization, peak filtering, spectral similarity, library matching, score matrices, and molecular-similarity networks. Use pyopenms instead for LC-MS feature detection or proteomics pipelines.\nlicense: Apache-2.0\ncompatibility: Requires Python >=3.10,\u003C3.15, uv, and matchms 0.33.1. Local file workflows need no credentials; metabolomics-USI loading requires network access.\nallowed-tools: Read Write Edit Bash\nmetadata:\n  version: '2.1'\n  category: life-sciences\n  maintainer: Kalaris Labs\n  tags: mass spectrometry, MS\u002FMS, spectral matching, metabolomics, cheminformatics\n---\n\n# Matchms\n\n## Purpose and Scope\n\nMatchms is a Python package for importing, cleaning, processing, and comparing\ntandem mass spectra. This skill targets **matchms 0.33.1**, released 2026-06-08,\nand corrects several breaking API changes that older tutorials do not reflect.\n\nUse matchms for:\n\n- MS\u002FMS library search and query-versus-reference scoring\n- Metadata harmonization, adduct\u002Fprecursor handling, and peak filtering\n- Cosine, modified-cosine, neutral-loss, approximate, and entropy scoring\n- Structured score matrices, top-hit extraction, and spectral networks\n- MGF, MSP, mzML, mzXML, JSON, mzSpecLib, and metabolomics-USI workflows\n\nDo not use matchms as a replacement for:\n\n- LC-MS feature detection, chromatographic alignment, peptide identification, or\n  protein quantification — use pyopenms\n- Vendor raw-file conversion — convert to mzML\u002FmzXML first\n- A validated compound-identification protocol — similarity is evidence, not\n  proof of identity\n\n## Install the Verified Release\n\nCreate or activate an environment, then install the release used by this skill:\n\n```bash\nuv pip install \"matchms==0.33.1\"\n```\n\nVerify the runtime:\n\n```bash\nuv run python -c \"import matchms; print(matchms.__version__)\"\n```\n\nMatchms 0.33.1 supports Python 3.10-3.14 and installs RDKit as a regular\ndependency. The old `matchms[chemistry]` extra is not part of the current\npackage metadata.\n\n## Operating Workflow\n\n1. **Inspect the inputs.** Record format, spectrum count, MS level, precursor\n   coverage, ion mode, peak counts, and identifier fields.\n2. **Load with metadata harmonization enabled** unless preserving source keys is\n   a deliberate requirement.\n3. **Apply the same peak-processing steps** to query and reference spectra.\n   Keep metadata enrichment separate when reference annotations are richer.\n4. **Drop invalid spectra explicitly.** Many `require_*` filters return `None`.\n5. **Choose the score from the scientific question**, not from convenience.\n   Modified and neutral-loss scores require valid `precursor_mz`.\n6. **Estimate `len(references) * len(queries)` before scoring.** A sparse result\n   container does not automatically avoid computing every requested pair.\n7. **Report score settings and evidence.** Include tolerance, preprocessing,\n   score name, number of matched peaks when available, and candidate metadata.\n8. **Validate top hits visually and chemically.** Use mirror plots, precursor\n   agreement, ion\u002Fadduct compatibility, and orthogonal evidence.\n\n## Current API Guardrails\n\nThese points prevent the most common failures from pre-0.33 examples:\n\n- Use `ModifiedCosineGreedy` or `ModifiedCosineHungarian`; `ModifiedCosine` was\n  removed in 0.32.0.\n- Do not call `add_losses()`. It was removed in 0.27.0; use\n  `spectrum.losses`, `spectrum.compute_losses(...)`, or\n  `NeutralLossesCosine` directly.\n- `SpectrumProcessor` is not callable. Use `process_spectrum()` or\n  `process_spectra()`.\n- `process_spectra()` returns `(processed_spectra, processing_report)`.\n- `Scores.scores` is a `StackedSparseArray`, often with separate structured\n  fields such as `CosineGreedy_score` and `CosineGreedy_matches`.\n- `scores_by_query()` returns `(reference_spectrum, score_record)` pairs, not\n  reference indices.\n- Prefer `spectra` in parameter names. The legacy spelling `spectrums` is\n  deprecated.\n- Never load pickle files from an untrusted source; unpickling can execute code.\n\nSee `references\u002Fmigration.md` for a complete old-to-current mapping.\n\n## Quick Start: Clean and Search a Library\n\n```python\nfrom matchms import SpectrumProcessor, calculate_scores\nfrom matchms.filtering import (\n    default_filters,\n    normalize_intensities,\n    require_minimum_number_of_peaks,\n    select_by_relative_intensity,\n)\nfrom matchms.importing import load_spectra\nfrom matchms.similarity import ModifiedCosineGreedy\n\n\ndef load_and_process(path):\n    spectra = [default_filters(spectrum) for spectrum in load_spectra(path)]\n    processor = SpectrumProcessor(\n        [\n            normalize_intensities,\n            (select_by_relative_intensity, {\"intensity_from\": 0.01}),\n            (require_minimum_number_of_peaks, {\"n_required\": 5}),\n        ]\n    )\n    processed, _ = processor.process_spectra(\n        spectra,\n        progress_bar=False,\n        create_report=False,\n    )\n    return processed\n\n\nreferences = load_and_process(\"library.msp\")\nqueries = load_and_process(\"queries.mgf\")\n\nmetric = ModifiedCosineGreedy(tolerance=0.02)\nscores = calculate_scores(\n    references=references,\n    queries=queries,\n    similarity_function=metric,\n)\n\nscore_name = \"ModifiedCosineGreedy_score\"\nmatches_name = \"ModifiedCosineGreedy_matches\"\nfor query in queries:\n    ranked = scores.scores_by_query(query, name=score_name, sort=True)\n    for reference, values in ranked[:5]:\n        print(\n            query.get(\"spectrum_id\", query.get(\"id\")),\n            reference.get(\"compound_name\", reference.get(\"spectrum_id\")),\n            float(values[score_name]),\n            int(values[matches_name]),\n        )\n```\n\n`SpectrumProcessor` automatically orders built-in filters according to matchms's\nfilter order. The aggregate `default_filters` callable is not in that registry,\nso run it first as above or expand its nine component filters. Inspect\n`processor.processing_steps` and preserve it with results.\n\n## Pair Scoring\n\nSimilarity classes expose `pair()` for one reference\u002Fquery pair. Cosine-family\nresults are structured NumPy scalars:\n\n```python\nfrom matchms.similarity import CosineGreedy\n\nresult = CosineGreedy(tolerance=0.02).pair(reference, query)\nsimilarity = float(result[\"score\"])\nmatched_peaks = int(result[\"matches\"])\n```\n\nUse `calculate_scores()` for matrix-oriented methods such as\n`FlashSimilarity`; its single-pair path is supported but intentionally not the\noptimized path.\n\n## Choose a Similarity Method\n\n- `CosineGreedy` — standard peak cosine with greedy peak assignment.\n- `CosineHungarian` — exact assignment; slower, useful for benchmarks.\n- `CosineLinear` — current linear-scaling cosine implementation.\n- `ModifiedCosineGreedy` — permits precursor-delta-shifted matches; common for\n  analog search.\n- `ModifiedCosineHungarian` — exact modified-cosine assignment.\n- `NeutralLossesCosine` — compares losses computed from precursor and fragments.\n- `BlinkCosine` — fast BLINK-style cosine approximation for larger matrices.\n- `FlashSimilarity` — optimized matrix scoring using spectral entropy or cosine\n  with fragment, neutral-loss, or hybrid matching.\n- `BinnedEmbeddingSimilarity` — binned spectral vectors and optional approximate\n  nearest-neighbor indexing.\n- `PrecursorMzMatch`, `ParentMassMatch`, `MetadataMatch` — candidate masks or\n  metadata constraints, not rich spectral scores.\n- `FingerprintSimilarity` — molecular-structure similarity; it is not spectral\n  similarity and requires fingerprints prepared from valid structures.\n\nRead `references\u002Fsimilarity.md` before choosing a fast method, combining scores,\nor interpreting structured outputs.\n\n## Large Comparisons\n\nFor all-vs-all scoring of one collection, set `is_symmetric=True`:\n\n```python\nscores = calculate_scores(\n    references=spectra,\n    queries=spectra,\n    similarity_function=CosineGreedy(tolerance=0.02),\n    array_type=\"sparse\",\n    is_symmetric=True,\n)\n```\n\nFor a precursor-gated search, compute and filter `PrecursorMzMatch` first, then\ncalculate the spectral metric only on retained coordinates through `Pipeline`\nor `Scores.calculate(...)`. See `references\u002Fworkflows.md`.\n\nDo not choose a universal \"identification threshold.\" Score distributions\ndepend on preprocessing, mass accuracy, collision conditions, library quality,\nand metric. At minimum, retain both score and matched-peak count for\ncosine-family methods.\n\n## Bundled Library-Search CLI\n\n`scripts\u002Flibrary_search.py` provides a reproducible query-versus-library search\nwith current score extraction, pair-count limits, preprocessing, and CSV output:\n\n```bash\nuv run python scripts\u002Flibrary_search.py \\\n  queries.mgf library.msp hits.csv \\\n  --metric modified \\\n  --tolerance 0.02 \\\n  --top-k 10 \\\n  --min-score 0.6 \\\n  --min-matches 5\n```\n\nRun `--help` for fast metrics, preprocessing options, identifier fields,\noverwrite control, and the explicit large-matrix override.\n\n## Spectrum Objects and Visualization\n\n```python\nimport numpy as np\nfrom matchms import Spectrum\n\nspectrum = Spectrum(\n    mz=np.array([100.0, 150.0, 200.0]),\n    intensities=np.array([0.2, 1.0, 0.4]),\n    metadata={\"spectrum_id\": \"query-1\", \"precursor_mz\": 250.5},\n)\n\nprint(spectrum.peaks.mz)\nprint(spectrum.get(\"precursor_mz\"))\nlosses = spectrum.compute_losses(loss_mz_from=5.0, loss_mz_to=200.0)\nspectrum.plot()\nspectrum.plot_against(reference_spectrum)\n```\n\n## References\n\nRead only the reference needed for the task:\n\n- `references\u002Fimporting_exporting.md` — formats, return types, generic I\u002FO,\n  mzSpecLib, score serialization, and pickle safety\n- `references\u002Ffiltering.md` — current filter catalog, clone\u002F`None` semantics,\n  default filters, ordering, and `SpectrumProcessor`\n- `references\u002Fsimilarity.md` — all current similarity classes, outputs,\n  candidate masking, performance, and interpretation\n- `references\u002Fworkflows.md` — library search, sparse gating, `Pipeline`, networks,\n  plotting, and provenance\n- `references\u002Fmigration.md` — breaking changes and deprecated APIs\n- `references\u002Fsources.md` — authoritative docs, release notes, user guides, and\n  scientific publications used for this refresh\n\n## Non-Negotiable Checks\n\n- Never compare raw queries against differently processed references.\n- Never use modified or neutral-loss scoring without valid precursor metadata.\n- Never assume a `Scores` value is a plain float; inspect `score_names`.\n- Never treat a high similarity score alone as confirmed identification.\n- Never deserialize untrusted pickle data.\n- Never launch an unbounded all-pairs comparison without estimating pair count.\n\n## Agent operating procedure\n\n1. **Check the environment.** Confirm tool versions, the reference genome\u002Fannotation build and the input formats (FASTQ, BAM, VCF, h5ad).\n2. **Pin down the inputs.** Confirm formats, identifiers and parameters from the data or the user. Ask rather than guess any value that changes the result.\n3. **Run a small version first.** Run the pipeline on a small subset (one sample, one chromosome, a few thousand cells) first.\n4. **Execute the full task** using the instructions and references above.\n5. **Validate the result.** Check QC metrics, sample identities, genome build consistency and batch effects before interpreting results.\n6. **Report.** State what was run (versions, commands, parameters), what was checked, and what is still uncertain.\n\n| If this happens | Do this |\n|---|---|\n| Genome builds or identifiers do not match between inputs | Stop and harmonize (liftover, ID mapping) before continuing. |\n| A function, flag or endpoint in these instructions is missing in the installed version | Check the installed version's own documentation (`help()`, `--help`, official docs), adapt, and tell the user. Never invent an API. |\n| A required input, identifier or parameter is ambiguous | Ask the user, or state the assumption explicitly before running. |\n\n**Integrity rules**\n\n- Never fabricate results, parameters, identifiers, citations or statistics. If something cannot be run or verified, say so plainly.\n- Do not interpret biological significance beyond what the statistics support; report multiple-testing correction.\n- Treat version-specific details here as possibly outdated: confirm them against the official documentation for the installed version.\n- Ask before actions that cost money, consume shared GPUs or cloud quota, touch personal or patient data, or cannot be undone.\n\n## Related skills\n\n- `pyopenms`: Complete mass spectrometry analysis platform.\n- `qdrant-vector-search`: High-performance vector similarity search engine for RAG and semantic search.\n- `faiss`: Facebook's library for efficient similarity search and clustering of dense vectors.\n","# Matchms\n\n## Purpose and Scope\n\nMatchms is a Python package for importing, cleaning, processing, and comparing\ntandem mass spectra. This skill targets **matchms 0.33.1**, released 2026-06-08,\nand corrects several breaking API changes that older tutorials do not reflect.\n\nUse matchms for:\n\n- MS\u002FMS library search and query-versus-reference scoring\n- Metadata harmonization, adduct\u002Fprecursor handling, and peak filtering\n- Cosine, modified-cosine, neutral-loss, approximate, and entropy scoring\n- Structured score matrices, top-hit extraction, and spectral networks\n- MGF, MSP, mzML, mzXML, JSON, mzSpecLib, and metabolomics-USI workflows\n\nDo not use matchms as a replacement for:\n\n- LC-MS feature detection, chromatographic alignment, peptide identification, or\n  protein quantification — use pyopenms\n- Vendor raw-file conversion — convert to mzML\u002FmzXML first\n- A validated compound-identification protocol — similarity is evidence, not\n  proof of identity\n\n## Install the Verified Release\n\nCreate or activate an environment, then install the release used by this skill:\n\n```bash\nuv pip install \"matchms==0.33.1\"\n```\n\nVerify the runtime:\n\n```bash\nuv run python -c \"import matchms; print(matchms.__version__)\"\n```\n\nMatchms 0.33.1 supports Python 3.10-3.14 and installs RDKit as a regular\ndependency. The old `matchms[chemistry]` extra is not part of the current\npackage metadata.\n\n## Operating Workflow\n\n1. **Inspect the inputs.** Record format, spectrum count, MS level, precursor\n   coverage, ion mode, peak counts, and identifier fields.\n2. **Load with metadata harmonization enabled** unless preserving source keys is\n   a deliberate requirement.\n3. **Apply the same peak-processing steps** to query and reference spectra.\n   Keep metadata enrichment separate when reference annotations are richer.\n4. **Drop invalid spectra explicitly.** Many `require_*` filters return `None`.\n5. **Choose the score from the scientific question**, not from convenience.\n   Modified and neutral-loss scores require valid `precursor_mz`.\n6. **Estimate `len(references) * len(queries)` before scoring.** A sparse result\n   container does not automatically avoid computing every requested pair.\n7. **Report score settings and evidence.** Include tolerance, preprocessing,\n   score name, number of matched peaks when available, and candidate metadata.\n8. **Validate top hits visually and chemically.** Use mirror plots, precursor\n   agreement, ion\u002Fadduct compatibility, and orthogonal evidence.\n\n## Current API Guardrails\n\nThese points prevent the most common failures from pre-0.33 examples:\n\n- Use `ModifiedCosineGreedy` or `ModifiedCosineHungarian`; `ModifiedCosine` was\n  removed in 0.32.0.\n- Do not call `add_losses()`. It was removed in 0.27.0; use\n  `spectrum.losses`, `spectrum.compute_losses(...)`, or\n  `NeutralLossesCosine` directly.\n- `SpectrumProcessor` is not callable. Use `process_spectrum()` or\n  `process_spectra()`.\n- `process_spectra()` returns `(processed_spectra, processing_report)`.\n- `Scores.scores` is a `StackedSparseArray`, often with separate structured\n  fields such as `CosineGreedy_score` and `CosineGreedy_matches`.\n- `scores_by_query()` returns `(reference_spectrum, score_record)` pairs, not\n  reference indices.\n- Prefer `spectra` in parameter names. The legacy spelling `spectrums` is\n  deprecated.\n- Never load pickle files from an untrusted source; unpickling can execute code.\n\nSee `references\u002Fmigration.md` for a complete old-to-current mapping.\n\n## Quick Start: Clean and Search a Library\n\n```python\nfrom matchms import SpectrumProcessor, calculate_scores\nfrom matchms.filtering import (\n    default_filters,\n    normalize_intensities,\n    require_minimum_number_of_peaks,\n    select_by_relative_intensity,\n)\nfrom matchms.importing import load_spectra\nfrom matchms.similarity import ModifiedCosineGreedy\n\n\ndef load_and_process(path):\n    spectra = [default_filters(spectrum) for spectrum in load_spectra(path)]\n    processor = SpectrumProcessor(\n        [\n            normalize_intensities,\n            (select_by_relative_intensity, {\"intensity_from\": 0.01}),\n            (require_minimum_number_of_peaks, {\"n_required\": 5}),\n        ]\n    )\n    processed, _ = processor.process_spectra(\n        spectra,\n        progress_bar=False,\n        create_report=False,\n    )\n    return processed\n\n\nreferences = load_and_process(\"library.msp\")\nqueries = load_and_process(\"queries.mgf\")\n\nmetric = ModifiedCosineGreedy(tolerance=0.02)\nscores = calculate_scores(\n    references=references,\n    queries=queries,\n    similarity_function=metric,\n)\n\nscore_name = \"ModifiedCosineGreedy_score\"\nmatches_name = \"ModifiedCosineGreedy_matches\"\nfor query in queries:\n    ranked = scores.scores_by_query(query, name=score_name, sort=True)\n    for reference, values in ranked[:5]:\n        print(\n            query.get(\"spectrum_id\", query.get(\"id\")),\n            reference.get(\"compound_name\", reference.get(\"spectrum_id\")),\n            float(values[score_name]),\n            int(values[matches_name]),\n        )\n```\n\n`SpectrumProcessor` automatically orders built-in filters according to matchms's\nfilter order. The aggregate `default_filters` callable is not in that registry,\nso run it first as above or expand its nine component filters. Inspect\n`processor.processing_steps` and preserve it with results.\n\n## Pair Scoring\n\nSimilarity classes expose `pair()` for one reference\u002Fquery pair. Cosine-family\nresults are structured NumPy scalars:\n\n```python\nfrom matchms.similarity import CosineGreedy\n\nresult = CosineGreedy(tolerance=0.02).pair(reference, query)\nsimilarity = float(result[\"score\"])\nmatched_peaks = int(result[\"matches\"])\n```\n\nUse `calculate_scores()` for matrix-oriented methods such as\n`FlashSimilarity`; its single-pair path is supported but intentionally not the\noptimized path.\n\n## Choose a Similarity Method\n\n- `CosineGreedy` — standard peak cosine with greedy peak assignment.\n- `CosineHungarian` — exact assignment; slower, useful for benchmarks.\n- `CosineLinear` — current linear-scaling cosine implementation.\n- `ModifiedCosineGreedy` — permits precursor-delta-shifted matches; common for\n  analog search.\n- `ModifiedCosineHungarian` — exact modified-cosine assignment.\n- `NeutralLossesCosine` — compares losses computed from precursor and fragments.\n- `BlinkCosine` — fast BLINK-style cosine approximation for larger matrices.\n- `FlashSimilarity` — optimized matrix scoring using spectral entropy or cosine\n  with fragment, neutral-loss, or hybrid matching.\n- `BinnedEmbeddingSimilarity` — binned spectral vectors and optional approximate\n  nearest-neighbor indexing.\n- `PrecursorMzMatch`, `ParentMassMatch`, `MetadataMatch` — candidate masks or\n  metadata constraints, not rich spectral scores.\n- `FingerprintSimilarity` — molecular-structure similarity; it is not spectral\n  similarity and requires fingerprints prepared from valid structures.\n\nRead `references\u002Fsimilarity.md` before choosing a fast method, combining scores,\nor interpreting structured outputs.\n\n## Large Comparisons\n\nFor all-vs-all scoring of one collection, set `is_symmetric=True`:\n\n```python\nscores = calculate_scores(\n    references=spectra,\n    queries=spectra,\n    similarity_function=CosineGreedy(tolerance=0.02),\n    array_type=\"sparse\",\n    is_symmetric=True,\n)\n```\n\nFor a precursor-gated search, compute and filter `PrecursorMzMatch` first, then\ncalculate the spectral metric only on retained coordinates through `Pipeline`\nor `Scores.calculate(...)`. See `references\u002Fworkflows.md`.\n\nDo not choose a universal \"identification threshold.\" Score distributions\ndepend on preprocessing, mass accuracy, collision conditions, library quality,\nand metric. At minimum, retain both score and matched-peak count for\ncosine-family methods.\n\n## Bundled Library-Search CLI\n\n`scripts\u002Flibrary_search.py` provides a reproducible query-versus-library search\nwith current score extraction, pair-count limits, preprocessing, and CSV output:\n\n```bash\nuv run python scripts\u002Flibrary_search.py \\\n  queries.mgf library.msp hits.csv \\\n  --metric modified \\\n  --tolerance 0.02 \\\n  --top-k 10 \\\n  --min-score 0.6 \\\n  --min-matches 5\n```\n\nRun `--help` for fast metrics, preprocessing options, identifier fields,\noverwrite control, and the explicit large-matrix override.\n\n## Spectrum Objects and Visualization\n\n```python\nimport numpy as np\nfrom matchms import Spectrum\n\nspectrum = Spectrum(\n    mz=np.array([100.0, 150.0, 200.0]),\n    intensities=np.array([0.2, 1.0, 0.4]),\n    metadata={\"spectrum_id\": \"query-1\", \"precursor_mz\": 250.5},\n)\n\nprint(spectrum.peaks.mz)\nprint(spectrum.get(\"precursor_mz\"))\nlosses = spectrum.compute_losses(loss_mz_from=5.0, loss_mz_to=200.0)\nspectrum.plot()\nspectrum.plot_against(reference_spectrum)\n```\n\n## References\n\nRead only the reference needed for the task:\n\n- `references\u002Fimporting_exporting.md` — formats, return types, generic I\u002FO,\n  mzSpecLib, score serialization, and pickle safety\n- `references\u002Ffiltering.md` — current filter catalog, clone\u002F`None` semantics,\n  default filters, ordering, and `SpectrumProcessor`\n- `references\u002Fsimilarity.md` — all current similarity classes, outputs,\n  candidate masking, performance, and interpretation\n- `references\u002Fworkflows.md` — library search, sparse gating, `Pipeline`, networks,\n  plotting, and provenance\n- `references\u002Fmigration.md` — breaking changes and deprecated APIs\n- `references\u002Fsources.md` — authoritative docs, release notes, user guides, and\n  scientific publications used for this refresh\n\n## Non-Negotiable Checks\n\n- Never compare raw queries against differently processed references.\n- Never use modified or neutral-loss scoring without valid precursor metadata.\n- Never assume a `Scores` value is a plain float; inspect `score_names`.\n- Never treat a high similarity score alone as confirmed identification.\n- Never deserialize untrusted pickle data.\n- Never launch an unbounded all-pairs comparison without estimating pair count.\n\n## Agent operating procedure\n\n1. **Check the environment.** Confirm tool versions, the reference genome\u002Fannotation build and the input formats (FASTQ, BAM, VCF, h5ad).\n2. **Pin down the inputs.** Confirm formats, identifiers and parameters from the data or the user. Ask rather than guess any value that changes the result.\n3. **Run a small version first.** Run the pipeline on a small subset (one sample, one chromosome, a few thousand cells) first.\n4. **Execute the full task** using the instructions and references above.\n5. **Validate the result.** Check QC metrics, sample identities, genome build consistency and batch effects before interpreting results.\n6. **Report.** State what was run (versions, commands, parameters), what was checked, and what is still uncertain.\n\n| If this happens | Do this |\n|---|---|\n| Genome builds or identifiers do not match between inputs | Stop and harmonize (liftover, ID mapping) before continuing. |\n| A function, flag or endpoint in these instructions is missing in the installed version | Check the installed version's own documentation (`help()`, `--help`, official docs), adapt, and tell the user. Never invent an API. |\n| A required input, identifier or parameter is ambiguous | Ask the user, or state the assumption explicitly before running. |\n\n**Integrity rules**\n\n- Never fabricate results, parameters, identifiers, citations or statistics. If something cannot be run or verified, say so plainly.\n- Do not interpret biological significance beyond what the statistics support; report multiple-testing correction.\n- Treat version-specific details here as possibly outdated: confirm them against the official documentation for the installed version.\n- Ask before actions that cost money, consume shared GPUs or cloud quota, touch personal or patient data, or cannot be undone.\n\n## Related skills\n\n- `pyopenms`: Complete mass spectrometry analysis platform.\n- `qdrant-vector-search`: High-performance vector similarity search engine for RAG and semantic search.\n- `faiss`: Facebook's library for efficient similarity search and clustering of dense vectors.\n",{"name":5,"license":15,"metadata":43,"description":7,"allowed-tools":48,"compatibility":49},{"tags":44,"version":45,"category":46,"maintainer":47},"mass spectrometry, MS\u002FMS, spectral matching, metabolomics, cheminformatics","2.1","life-sciences","Kalaris Labs","Read Write Edit Bash","Requires Python >=3.10,\u003C3.15, uv, and matchms 0.33.1. Local file workflows need no credentials; metabolomics-USI loading requires network access.","main","0da4485785ee599388900be50db1635489d53056",".agents\u002Fskills\u002Fkal-matchms","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6","https:\u002F\u002Fdisha6.6.thenitishkr.in\u002F","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh","www.thenitishkr","thenitishkr | AI • Cyber-security • Research\r\n","2026-11-08 03:33:25",{"source":8,"skillName":5,"commands":60,"prompt":70,"zipAvailable":71},[61,64,67],{"tool":62,"command":63},"npx","npx skills add Tashima-Tarsh\u002FDisha6.6 --skill matchms",{"tool":65,"command":66},"bunx","bunx skills add Tashima-Tarsh\u002FDisha6.6 --skill matchms",{"tool":68,"command":69},"pnpm","pnpm dlx skills add Tashima-Tarsh\u002FDisha6.6 --skill matchms","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fkal-matchms\u002FSKILL.md",true,[73,79,83,87,91,95,99],{"path":74,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":77,"sourceHtmlUrl":78},"references\u002Ffiltering.md","REFERENCE","参考文档",11199,"https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fkal-matchms\u002Freferences\u002Ffiltering.md",{"path":80,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":81,"sourceHtmlUrl":82},"references\u002Fimporting_exporting.md",9291,"https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fkal-matchms\u002Freferences\u002Fimporting_exporting.md",{"path":84,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":85,"sourceHtmlUrl":86},"references\u002Fmigration.md",8420,"https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fkal-matchms\u002Freferences\u002Fmigration.md",{"path":88,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":89,"sourceHtmlUrl":90},"references\u002Fsimilarity.md",11548,"https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fkal-matchms\u002Freferences\u002Fsimilarity.md",{"path":92,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":93,"sourceHtmlUrl":94},"references\u002Fsources.md",5676,"https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fkal-matchms\u002Freferences\u002Fsources.md",{"path":96,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":97,"sourceHtmlUrl":98},"references\u002Fworkflows.md",13030,"https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fkal-matchms\u002Freferences\u002Fworkflows.md",{"path":100,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":103,"sourceHtmlUrl":104},"scripts\u002Flibrary_search.py","SCRIPT","脚本",19740,"https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fkal-matchms\u002Fscripts\u002Flibrary_search.py",[106,138,162,189,214,237],{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":110,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":118,"publishedAt":38},"01M6QRD07D4TGNDK6VJ4EHF8BV","youtube-full","Use when the user needs YouTube transcripts, video search, channel browsing, playlist extraction, or content monitoring. Trigger phrases: 'get the transcript for', 'search YouTube for', 'what are the latest videos on', 'list this playlist', 'monitor this channel', or any request involving a YouTube URL, video ID, or @handle. Do NOT use for downloading video or audio files, YouTube engagement data (likes, comments), or private\u002Fage-restricted videos.","MIT","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fyoutube-full\u002FSKILL.md",[113],{"categoryNo":114,"categoryName":115,"taxonomyType":116,"taxonomyTypeDesc":117},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[119,120,121,122,37,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137],"youtube full","youtube","full","transcript","monitoring","data","Video","Audio","list","files","do","get","age","trigger","URL","for","browsing","request","youtube transcripts",{"skillNo":139,"name":140,"nameZh":6,"description":141,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":110,"licenseFileUrl":6,"sourceHtmlUrl":142,"categories":143,"keywords":144,"publishedAt":38},"01M6QRCJ3112VYPA97YG7KGMC2","x-twitter-growth","X\u002FTwitter growth engine for building audience, crafting viral content, and analyzing engagement. Use when the user wants to grow on X\u002FTwitter, write tweets or threads, analyze their X profile, research competitors on X, plan a posting strategy, or optimize engagement. Complements social-content (generic multi-platform) with X-specific depth: algorithm mechanics, thread engineering, reply strategy, profile optimization, and competitive intelligence via web search.","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fx-twitter-growth\u002FSKILL.md",[],[145,146,147,148,37,149,150,151,152,153,154,155,31,156,157,158,159,160,161,134],"twitter","x twitter growth","growth","research","content","engineering","plan","web search","competitors","analyze","engine","strategy","use","platform","grow","posting","competitive",{"skillNo":163,"name":164,"nameZh":6,"description":165,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":110,"licenseFileUrl":6,"sourceHtmlUrl":166,"categories":167,"keywords":171,"publishedAt":38},"01M6QRBN3EHQNJY42RERP7A149","write-a-skill","Create new agent skills with proper structure, progressive disclosure, and bundled resources. Use when user wants to create, write, build, or author a new skill.","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwrite-a-skill\u002FSKILL.md",[168],{"categoryNo":169,"categoryName":170,"taxonomyType":116,"taxonomyTypeDesc":117},"01JBSEEDCAT000000000000023","Skill与智能体开发",[172,31,173,174,175,176,177,178,157,179,180,50,181,182,183,184,185,186,187,188],"write a skill","github","create","https","productivity","matt pocock","direct","example","build","new skill","structure","new agent","resources","with","tree","progressive disclosure","author",{"skillNo":190,"name":191,"nameZh":6,"description":192,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":110,"licenseFileUrl":6,"sourceHtmlUrl":193,"categories":194,"keywords":195,"publishedAt":38},"01M6QRB6G8P33PNGAF9Y69EJ9T","wrap-up","Close out a launched Claude Managed Agent — recap every primitive the founder now owns, regenerate the single-file overview page, and suggest the next 1-2 upgrades. Use when the user says \"wrap up\", \"close this out\", \"what do I own now\", \"give me the summary\", \"recap the agent\", or when the orchestrator routes phase=wrap-up. primitives_inventory.py tables everything owned (agent, environment, session, memory, outcome, deployment); overview_page.py regenerates a self-contained .\u002Fmy-agent\u002Fagent-overview.html; upgrade_suggester.py ranks the next moves from recorded deferrals plus standing hardening steps. Companion to run-without-you; the last stop before phase=done.","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwrap-up\u002FSKILL.md",[],[196,197,198,199,200,201,202,203,204,157,205,129,206,207,208,209,210,211,212,213],"wrap up","up","wrap","gemini","deployment","run","file","hardening","closeout","stop","upgrade","founder","close","companion","you","tables","directions","phase",{"skillNo":215,"name":216,"nameZh":6,"description":217,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":110,"licenseFileUrl":6,"sourceHtmlUrl":218,"categories":219,"keywords":221,"publishedAt":38},"01M6QRA5AYC1RBFZ39GTWGS3N8","workflow-builder","Design and write deterministic multi-agent workflow scripts (.js files in .claude\u002Fworkflows\u002F) for Claude Code's Workflow tool. Use when a user wants to build, create, author, scaffold, or run a custom Claude Code workflow, orchestrate sub-agents (fan-out, pipeline, loop, judge-panel), or automate a repeatable multi-step task across fresh-context agents.","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fworkflow-builder\u002FSKILL.md",[220],{"categoryNo":169,"categoryName":170,"taxonomyType":116,"taxonomyTypeDesc":117},[222,223,224,225,29,174,201,226,227,228,229,230,31,231,128,232,233,234,235,236],"workflow","workflow builder","builder","design","code","orchestrate","pipeline","loop","multi-agent","context","across","fresh","scripts","judge","claude code workflow",{"skillNo":238,"name":239,"nameZh":6,"description":240,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":110,"licenseFileUrl":6,"sourceHtmlUrl":241,"categories":242,"keywords":243,"publishedAt":38},"01M6QR7QMCZESKQA0ERW1E657M","weekly-review","Use when someone wants to run a weekly review, close open loops, audit stalled projects and commitments, get their system back to trusted, restart a lapsed review habit, or says \"\u002Fcs:weekly-review\". Walks David Allen's three-phase loop — GET CLEAR, GET CURRENT, GET CREATIVE — with deterministic scripts that inventory open loops, gate the checklist with named gaps, and score commitment health 0-100.","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fweekly-review\u002FSKILL.md",[],[244,245,246,247,248,249,250,251,252,229,253,254,255,256,257,258,130,259,260,213],"review","weekly review","weekly","deterministic scripts","reflect","feeds","inventory","open","team","projects","project-management","scanner","conversation","back","project","sprint","cadence"]