[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DTDA7XYF568T7MHW9XPWK4":3,"skill-same:01M6DTDA7XYF568T7MHW9XPWK4":101},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":40,"linkOnly":41,"markdownContent":42,"markdownBody":43,"frontMatter":44,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":50,"repositoryHtmlUrl":51,"repositoryHomepageUrl":52,"ownerHtmlUrl":53,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":54,"install":55,"resources":68},"01M6DTDA7XYF568T7MHW9XPWK4","metabolomics-annotation",null,"Load when matching LC-MS m\u002Fz features to an explicit local metabolite reference within a ppm tolerance; bundled HMDB entries are for explicit demonstrations only. Skip pathway ORA (use metabolomics-pathway-enrichment) and spectral matching or online searches (use external SIRIUS \u002F GNPS).","TianGzlab\u002FOmicsClaw","TianGzlab","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F150978281?v=4","01M6DT9WNJJ470ADHPSMFAA02Y","01M6DT9WSN09C5K65GB6RK18R9",161,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-annotation\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39],"metabolomics annotation","annotation","matching","mz-match","hmdb","metabolomics","pathway","ORA","id","demo","entries","local","reference","only","ms","use","enrichment","2026-11-10 10:12:30",false,"---\nname: metabolomics-annotation\ndescription: Load when matching LC-MS m\u002Fz features to an explicit local metabolite reference within a ppm\n  tolerance; bundled HMDB entries are for explicit demonstrations only. Skip pathway ORA (use\n  metabolomics-pathway-enrichment) and spectral matching or online searches (use external SIRIUS \u002F GNPS).\ntrigger: metabolite annotation, SIRIUS, GNPS, MetFrag, spectral matching, metabolite ID, ppm tolerance\ntags:\n- metabolomics\n- annotation\n- hmdb\n- demo\n- mz-match\n---\n\n# metabolomics-annotation\n\n## When to use\n\nMatch m\u002Fz to adduct masses in an explicit reference or the bundled 15-metabolite demo. Use external SIRIUS\u002FGNPS for spectral or database-scale identification.\n\n## Use from a step\n\n```python\nimport pandas as pd\nfrom skills._sdk.notebook import load_skill, read_input, write_output\nlibrary = load_skill(\"metabolomics-annotation\")\ndata = read_input('features.csv', reader=pd.read_csv)\nreference = read_input('reference.csv', reader=pd.read_csv)\nresult = library.annotate(data, reference=reference)\nwrite_output(result, 'tables\u002Fresult.csv')\n```\n\n[examples\u002Fexample_step.py](examples\u002Fexample_step.py) runs a seeded synthetic\nexample through the step runner and writes a table and Figure. Computations\nreturn new DataFrames, leave the input unchanged and expose diagnostics through\n`run_info(result)`. Plotting functions write no files.\n\n## API\n\n\u003C!-- api:begin generated from _api.py; regenerate with run.py api \u003Cskill dir> --write -->\n\n### `annotate(data, *, database='hmdb', ppm=10.0, adducts=None, reference=None)`\n\nMatch every observed m\u002Fz to all reference adducts within tolerance.\n\n:param data: Feature DataFrame with a numeric mz column.\n:param database: CLI default hmdb; label for the supplied reference, not a database fetch.\n:param ppm: CLI default 10; nonnegative mass error tolerance in parts per million.\n:param adducts: CLI default None resolves to [M+H]+ and [M-H]-.\n:param reference: Required DataFrame with name, neutral_mass, database_id and formula; demo_reference() is for demonstrations only.\n:returns: A new annotations DataFrame; attrs['run_info'] names the reference scope.\n:raises ValueError: Reference, observed masses, tolerance or adducts are invalid.\n\n### `demo_reference()`\n\nReturn the 15 bundled metabolites for explicit demonstrations.\n\n:returns: An independent reference DataFrame marked as demo in its attrs.\n\n### `run_info(data, *, keep=True)`\n\nRead diagnostics attached to a returned table.\n\n:param data: DataFrame returned by this library.\n:param keep: Default True; use False in the CLI to remove diagnostics.\n:returns: An independent dictionary describing the run.\n:raises ValueError: The table carries no run_info.\n\n### `mass_error_figure(data)`\n\nPlot the ppm error of matched metabolite candidates.\n\n:param data: Annotation table returned by annotate.\n:returns: A matplotlib Figure.\n:raises KeyError: ppm_error is absent.\n\n\u003C!-- api:end -->\n\n## Methods and parameters\n\nPass `reference=` with name, neutral_mass, database_id and formula for local reference mass matching. The CLI requires `--reference-file reference.csv` for real input. No network lookup runs; `database` labels the supplied reference. `demo_reference()` explicitly selects 15 illustrative HMDB entries, also used by `--demo`.\n\n## Gotchas\n\n- `annotate` rejects missing reference data; demo references cannot be relabelled as another database. Each query can have multiple candidate rows in `tables\u002Fannotations.csv`; Unknown rows retain unmatched queries. Confidence labels describe ppm bins, not identification probability.\n- `result.json` preserves the reference scope in `data.run_info.reference_scope`; demo matches are not biological identification evidence.\n\n## Inputs and outputs\n\nCSV input; `tables\u002Fannotations.csv`, `report.md` and `result.json`. The CLI writes `reproducibility\u002Fcommands.sh`.\nThe function library returns objects; the CLI and step own file writes.\n\n## CLI\n\n```bash\npython skills\u002Fmetabolomics\u002Fmetabolomics-annotation\u002Fmetabolomics_annotation.py --demo --output \u002Ftmp\u002Fmetabolomics_annotation\npython skills\u002Fmetabolomics\u002Fmetabolomics-annotation\u002Fmetabolomics_annotation.py --input features.csv --reference-file reference.csv --output \u002Ftmp\u002Fmetabolomics_annotation_real\n```\n\n## See also\n\n- [Parameters](references\u002Fparameters.md)\n- [Methodology](references\u002Fmethodology.md)\n- [Output contract](references\u002Foutput_contract.md)\n\n## Dependencies\n\n`numpy`, `pandas`, `matplotlib`\n","# metabolomics-annotation\n\n## When to use\n\nMatch m\u002Fz to adduct masses in an explicit reference or the bundled 15-metabolite demo. Use external SIRIUS\u002FGNPS for spectral or database-scale identification.\n\n## Use from a step\n\n```python\nimport pandas as pd\nfrom skills._sdk.notebook import load_skill, read_input, write_output\nlibrary = load_skill(\"metabolomics-annotation\")\ndata = read_input('features.csv', reader=pd.read_csv)\nreference = read_input('reference.csv', reader=pd.read_csv)\nresult = library.annotate(data, reference=reference)\nwrite_output(result, 'tables\u002Fresult.csv')\n```\n\n[examples\u002Fexample_step.py](examples\u002Fexample_step.py) runs a seeded synthetic\nexample through the step runner and writes a table and Figure. Computations\nreturn new DataFrames, leave the input unchanged and expose diagnostics through\n`run_info(result)`. Plotting functions write no files.\n\n## API\n\n\u003C!-- api:begin generated from _api.py; regenerate with run.py api \u003Cskill dir> --write -->\n\n### `annotate(data, *, database='hmdb', ppm=10.0, adducts=None, reference=None)`\n\nMatch every observed m\u002Fz to all reference adducts within tolerance.\n\n:param data: Feature DataFrame with a numeric mz column.\n:param database: CLI default hmdb; label for the supplied reference, not a database fetch.\n:param ppm: CLI default 10; nonnegative mass error tolerance in parts per million.\n:param adducts: CLI default None resolves to [M+H]+ and [M-H]-.\n:param reference: Required DataFrame with name, neutral_mass, database_id and formula; demo_reference() is for demonstrations only.\n:returns: A new annotations DataFrame; attrs['run_info'] names the reference scope.\n:raises ValueError: Reference, observed masses, tolerance or adducts are invalid.\n\n### `demo_reference()`\n\nReturn the 15 bundled metabolites for explicit demonstrations.\n\n:returns: An independent reference DataFrame marked as demo in its attrs.\n\n### `run_info(data, *, keep=True)`\n\nRead diagnostics attached to a returned table.\n\n:param data: DataFrame returned by this library.\n:param keep: Default True; use False in the CLI to remove diagnostics.\n:returns: An independent dictionary describing the run.\n:raises ValueError: The table carries no run_info.\n\n### `mass_error_figure(data)`\n\nPlot the ppm error of matched metabolite candidates.\n\n:param data: Annotation table returned by annotate.\n:returns: A matplotlib Figure.\n:raises KeyError: ppm_error is absent.\n\n\u003C!-- api:end -->\n\n## Methods and parameters\n\nPass `reference=` with name, neutral_mass, database_id and formula for local reference mass matching. The CLI requires `--reference-file reference.csv` for real input. No network lookup runs; `database` labels the supplied reference. `demo_reference()` explicitly selects 15 illustrative HMDB entries, also used by `--demo`.\n\n## Gotchas\n\n- `annotate` rejects missing reference data; demo references cannot be relabelled as another database. Each query can have multiple candidate rows in `tables\u002Fannotations.csv`; Unknown rows retain unmatched queries. Confidence labels describe ppm bins, not identification probability.\n- `result.json` preserves the reference scope in `data.run_info.reference_scope`; demo matches are not biological identification evidence.\n\n## Inputs and outputs\n\nCSV input; `tables\u002Fannotations.csv`, `report.md` and `result.json`. The CLI writes `reproducibility\u002Fcommands.sh`.\nThe function library returns objects; the CLI and step own file writes.\n\n## CLI\n\n```bash\npython skills\u002Fmetabolomics\u002Fmetabolomics-annotation\u002Fmetabolomics_annotation.py --demo --output \u002Ftmp\u002Fmetabolomics_annotation\npython skills\u002Fmetabolomics\u002Fmetabolomics-annotation\u002Fmetabolomics_annotation.py --input features.csv --reference-file reference.csv --output \u002Ftmp\u002Fmetabolomics_annotation_real\n```\n\n## See also\n\n- [Parameters](references\u002Fparameters.md)\n- [Methodology](references\u002Fmethodology.md)\n- [Output contract](references\u002Foutput_contract.md)\n\n## Dependencies\n\n`numpy`, `pandas`, `matplotlib`\n",{"name":5,"tags":45,"trigger":46,"description":7},[28,24,27,32,26],"metabolite annotation, SIRIUS, GNPS, MetFrag, spectral matching, metabolite ID, ppm tolerance","main","90a3bec3e6549bc33dddbf67e4b23869736c49d1","skills\u002Fmetabolomics\u002Fmetabolomics-annotation",27,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw","https:\u002F\u002FTianGzlab.github.io\u002FOmicsClaw\u002F","https:\u002F\u002Fgithub.com\u002FTianGzlab","2026-10-08 01:36:11",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add TianGzlab\u002FOmicsClaw --skill metabolomics-annotation",{"tool":61,"command":62},"bunx","bunx skills add TianGzlab\u002FOmicsClaw --skill metabolomics-annotation",{"tool":64,"command":65},"pnpm","pnpm dlx skills add TianGzlab\u002FOmicsClaw --skill metabolomics-annotation","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-annotation\u002FSKILL.md",true,[69,75,79,83,89,93,97],{"path":70,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":73,"sourceHtmlUrl":74},"_api.py","SCRIPT","脚本",4061,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-annotation\u002F_api.py",{"path":76,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":77,"sourceHtmlUrl":78},"examples\u002Fexample_step.py",492,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-annotation\u002Fexamples\u002Fexample_step.py",{"path":80,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":81,"sourceHtmlUrl":82},"metabolomics_annotation.py",7044,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-annotation\u002Fmetabolomics_annotation.py",{"path":84,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":87,"sourceHtmlUrl":88},"references\u002Fmethodology.md","REFERENCE","参考文档",519,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-annotation\u002Freferences\u002Fmethodology.md",{"path":90,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":91,"sourceHtmlUrl":92},"references\u002Foutput_contract.md",561,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-annotation\u002Freferences\u002Foutput_contract.md",{"path":94,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":95,"sourceHtmlUrl":96},"references\u002Fparameters.md",513,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-annotation\u002Freferences\u002Fparameters.md",{"path":98,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":99,"sourceHtmlUrl":100},"tests\u002Ftest_api.py",3062,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-annotation\u002Ftests\u002Ftest_api.py",[102,117,129,146,172,195],{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":111,"publishedAt":40},"01M6DTP4X225Q92RMY8XXHPCTT","demo-skill","A fixture skill for the skill environment tests. Use it for nothing else.","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftests\u002Fskillenv\u002Ffixtures\u002Fskills\u002Fdemo\u002Fdemo-skill\u002FSKILL.md",[108],{"categoryNo":109,"categoryName":110,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[112,32,113,114,115,38,116],"demo skill","tests","fixture","fixture skill","environment",{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":123,"publishedAt":40},"01M6DTP28JTWQK3HHXDNQV8BBV","fake-domains","Test fixture for the golden deployment in tests\u002Fentry. Load never; it has no script.","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftests\u002Fentry\u002Ffake_skills\u002Fspatial\u002Ffake-domains\u002FSKILL.md",[],[124,125,126,113,114,127,128],"domains","fake domains","deployment","never","test",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":136,"publishedAt":40},"01M6DTNZ4AMWKTME1T18K5C643","replace-me-skill","Load when copying this directory to bootstrap a new OmicsClaw skill. Skip when an existing skill already covers the request.","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftemplates\u002Fskill\u002FSKILL.md",[135],{"categoryNo":109,"categoryName":110,"taxonomyType":20,"taxonomyTypeDesc":21},[137,138,139,140,141,142,143,144,145],"me","replace me skill","template","directory","skill template","existing skill","new skill","bootstrap","scaffold",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":40},"01M6DTNV63MTD0Q6YRC52F0B1Y","spatial-velocity","Load when estimating RNA velocity on a spatial AnnData with `layers[\"spliced\"]` + `layers[\"unspliced\"]` via scVelo (stochastic \u002F deterministic \u002F dynamical) or veloVI (deep generative). Skip when input lacks the spliced\u002Funspliced layers (must be quantified upstream by velocyto \u002F kb-python \u002F STARsolo); non-spatial scRNA velocity (use sc-velocity).","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-velocity\u002FSKILL.md",[],[153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,38,170,171],"velocity","spatial velocity","Spatial","scvelo","input","starsolo","time","deep","RNA","kb-python","via","velocyto","rna-velocity","velovi","dynamics","upstream","kb","python","deterministic",{"skillNo":173,"name":174,"nameZh":6,"description":175,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":176,"categories":177,"keywords":178,"publishedAt":40},"01M6DTNPMR227NAT8QFY620YDW","spatial-trajectory","Load when inferring pseudotime \u002F lineage trajectories on a preprocessed spatial AnnData via DPT (default — diffusion pseudotime), CellRank (terminal-state + fate-probability), or Palantir (waypoint branch probabilities). Skip when the data has spliced\u002Funspliced layers and you want velocity-driven dynamics (use spatial-velocity); non-spatial scRNA pseudotime (use sc-pseudotime).","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-trajectory\u002FSKILL.md",[],[155,179,180,181,182,183,184,185,163,186,187,188,189,190,153,191,38,192,193,194],"trajectory","spatial trajectory","state","terminal","lineage","diffusion","cellrank","palantir","dpt","pseudotime","probability","cell","default","branch","anndata","data",{"skillNo":196,"name":197,"nameZh":6,"description":198,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":199,"categories":200,"keywords":201,"publishedAt":40},"01M6DTNJEYFT33P84DGHDNXW95","spatial-statistics","Load when running spatial autocorrelation \u002F hotspot \u002F co-occurrence \u002F neighbourhood-enrichment \u002F Ripley K stats on a clustered spatial AnnData via squidpy. Skip when ranking spatially variable genes (use spatial-genes); tissue domain detection (use spatial-domains).","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-statistics\u002FSKILL.md",[],[202,203,155,163,204,205,206,207,208,209,124,210,211,34,212,38,193,213,39,214],"spatial statistics","statistics","nhood-enrichment","co-occurrence","ripley","geary","moran","neighbourhood","ranking","autocorrelation","domain","detection","stats"]