[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DTDEMRPG3WRC4EAPCTAMWC":3,"skill-same:01M6DTDEMRPG3WRC4EAPCTAMWC":100},{"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":17,"publishedAt":34,"linkOnly":35,"markdownContent":36,"markdownBody":37,"frontMatter":38,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":47,"ownerHtmlUrl":48,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":49,"install":50,"resources":63},"01M6DTDEMRPG3WRC4EAPCTAMWC","metabolomics-de",null,"Load when running two-group metabolomics DE (t-test + log2FC + BH-FDR + PCA) on a feature × sample CSV using `--group-a-prefix` \u002F `--group-b-prefix` (default `ctrl` \u002F `treat`). Skip when needing tunable test backends (use metabolomics-statistics); raw spectra.","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-de\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33],"metabolomics de","test","csv","use","default","sample","statistics","t-test","feature","PCA","volcano","metabolomics","de","ttest","bh-fdr","biomarker","2026-11-10 10:12:30",false,"---\nname: metabolomics-de\ndescription: Load when running two-group metabolomics DE (t-test + log2FC + BH-FDR + PCA) on a feature\n  × sample CSV using `--group-a-prefix` \u002F `--group-b-prefix` (default `ctrl` \u002F `treat`). Skip when needing\n  tunable test backends (use metabolomics-statistics); raw spectra.\ntrigger: metabolomics differential, PLS-DA, volcano plot, biomarker, OPLS-DA\ntags:\n- metabolomics\n- de\n- ttest\n- pca\n- bh-fdr\n- biomarker\n---\n\n# metabolomics-de\n\n## When to use\n\nRun Welch tests and treatment\u002Fcontrol fold changes using ctrl\u002Ftreat sample prefixes. Use metabolomics-statistics for another test backend.\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-de\")\ndata = read_input('features.csv', reader=pd.read_csv)\nresult = library.differential_expression(data)\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### `differential_expression(data, *, group_a_prefix='ctrl', group_b_prefix='treat')`\n\nReturn Welch tests, treatment\u002Fcontrol log2 fold changes and BH FDR.\n\n:param data: Feature table whose first column identifies features; other columns contain intensities.\n:param group_a_prefix: CLI default ctrl; prefix selecting control samples.\n:param group_b_prefix: CLI default treat; prefix selecting treatment samples.\n:returns: A new differential table with group sizes in attrs['run_info'].\n:raises ValueError: A group is absent or groups overlap.\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### `pca_figure(data, *, group_a_prefix='ctrl', group_b_prefix='treat', random_state=0)`\n\nPlot sample PCA from untransformed intensities; NaNs become zero.\n\n:param data: Feature table with the same sample columns as differential_expression.\n:param group_a_prefix: CLI default ctrl; control prefix.\n:param group_b_prefix: CLI default treat; treatment prefix.\n:param random_state: Default 0; seed forwarded to sklearn PCA.\n:returns: A matplotlib Figure with sample labels and explained variance axes.\n:raises ImportError: Install scikit-learn with install_skill_deps if unavailable.\n:raises ValueError: Groups are absent, overlap or the matrix is invalid.\n\n\u003C!-- api:end -->\n\n## Methods and parameters\n\nWelch tests use raw supplied intensities, with BH FDR and a fixed CLI significance threshold of 0.05. PCA uses untransformed intensities and converts NaNs to zero.\n\n## Gotchas\n\n- `differential_expression` treats the first column as feature IDs. Both groups must be nonempty and disjoint. `tables\u002Fsignificant_features.csv` uses fdr \u003C 0.05. The CLI logs optional PCA failures.\n\n## Inputs and outputs\n\nCSV input; `tables\u002Fdifferential_features.csv`, `report.md` and `result.json`. The CLI also writes `tables\u002Fsignificant_features.csv` and, when PCA succeeds, `figures\u002Fpca_scores.png`. Demo mode also writes its synthetic input CSV at the output root.\nThe function library returns objects; the CLI and step own file writes.\n\n## CLI\n\n```bash\npython skills\u002Fmetabolomics\u002Fmetabolomics-de\u002Fmet_diff.py --demo --output \u002Ftmp\u002Fmetabolomics_de\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`, `scipy`, `scikit-learn`, `matplotlib`\n","# metabolomics-de\n\n## When to use\n\nRun Welch tests and treatment\u002Fcontrol fold changes using ctrl\u002Ftreat sample prefixes. Use metabolomics-statistics for another test backend.\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-de\")\ndata = read_input('features.csv', reader=pd.read_csv)\nresult = library.differential_expression(data)\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### `differential_expression(data, *, group_a_prefix='ctrl', group_b_prefix='treat')`\n\nReturn Welch tests, treatment\u002Fcontrol log2 fold changes and BH FDR.\n\n:param data: Feature table whose first column identifies features; other columns contain intensities.\n:param group_a_prefix: CLI default ctrl; prefix selecting control samples.\n:param group_b_prefix: CLI default treat; prefix selecting treatment samples.\n:returns: A new differential table with group sizes in attrs['run_info'].\n:raises ValueError: A group is absent or groups overlap.\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### `pca_figure(data, *, group_a_prefix='ctrl', group_b_prefix='treat', random_state=0)`\n\nPlot sample PCA from untransformed intensities; NaNs become zero.\n\n:param data: Feature table with the same sample columns as differential_expression.\n:param group_a_prefix: CLI default ctrl; control prefix.\n:param group_b_prefix: CLI default treat; treatment prefix.\n:param random_state: Default 0; seed forwarded to sklearn PCA.\n:returns: A matplotlib Figure with sample labels and explained variance axes.\n:raises ImportError: Install scikit-learn with install_skill_deps if unavailable.\n:raises ValueError: Groups are absent, overlap or the matrix is invalid.\n\n\u003C!-- api:end -->\n\n## Methods and parameters\n\nWelch tests use raw supplied intensities, with BH FDR and a fixed CLI significance threshold of 0.05. PCA uses untransformed intensities and converts NaNs to zero.\n\n## Gotchas\n\n- `differential_expression` treats the first column as feature IDs. Both groups must be nonempty and disjoint. `tables\u002Fsignificant_features.csv` uses fdr \u003C 0.05. The CLI logs optional PCA failures.\n\n## Inputs and outputs\n\nCSV input; `tables\u002Fdifferential_features.csv`, `report.md` and `result.json`. The CLI also writes `tables\u002Fsignificant_features.csv` and, when PCA succeeds, `figures\u002Fpca_scores.png`. Demo mode also writes its synthetic input CSV at the output root.\nThe function library returns objects; the CLI and step own file writes.\n\n## CLI\n\n```bash\npython skills\u002Fmetabolomics\u002Fmetabolomics-de\u002Fmet_diff.py --demo --output \u002Ftmp\u002Fmetabolomics_de\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`, `scipy`, `scikit-learn`, `matplotlib`\n",{"name":5,"tags":39,"trigger":41,"description":7},[29,30,31,40,32,33],"pca","metabolomics differential, PLS-DA, volcano plot, biomarker, OPLS-DA","main","90a3bec3e6549bc33dddbf67e4b23869736c49d1","skills\u002Fmetabolomics\u002Fmetabolomics-de",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":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add TianGzlab\u002FOmicsClaw --skill metabolomics-de",{"tool":56,"command":57},"bunx","bunx skills add TianGzlab\u002FOmicsClaw --skill metabolomics-de",{"tool":59,"command":60},"pnpm","pnpm dlx skills add TianGzlab\u002FOmicsClaw --skill metabolomics-de","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-de\u002FSKILL.md",true,[64,70,74,80,84,88,92,96],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"_api.py","SCRIPT","脚本",3649,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-de\u002F_api.py",{"path":71,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":72,"sourceHtmlUrl":73},"examples\u002Fexample_step.py",448,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-de\u002Fexamples\u002Fexample_step.py",{"path":75,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":78,"sourceHtmlUrl":79},"index.json","REFERENCE","参考文档",669,"https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Flinux\u002Fforensics\u002Fdisk\u002Facquisition\u002Fdcfldd\u002Fforensic\u002Findex.json",{"path":81,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":82,"sourceHtmlUrl":83},"met_diff.py",5974,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-de\u002Fmet_diff.py",{"path":85,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":86,"sourceHtmlUrl":87},"references\u002Fmethodology.md",376,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-de\u002Freferences\u002Fmethodology.md",{"path":89,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":90,"sourceHtmlUrl":91},"references\u002Foutput_contract.md",590,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-de\u002Freferences\u002Foutput_contract.md",{"path":93,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":94,"sourceHtmlUrl":95},"references\u002Fparameters.md",342,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-de\u002Freferences\u002Fparameters.md",{"path":97,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":98,"sourceHtmlUrl":99},"tests\u002Ftest_api.py",936,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-de\u002Ftests\u002Ftest_api.py",[101,119,130,147,173,195],{"skillNo":102,"name":103,"nameZh":6,"description":104,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":105,"categories":106,"keywords":112,"publishedAt":34},"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",[107],{"categoryNo":108,"categoryName":109,"taxonomyType":110,"taxonomyTypeDesc":111},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[113,114,115,116,117,21,118],"demo skill","demo","tests","fixture","fixture skill","environment",{"skillNo":120,"name":121,"nameZh":6,"description":122,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":125,"publishedAt":34},"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",[],[126,127,128,115,116,129,19],"domains","fake domains","deployment","never",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":137,"publishedAt":34},"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",[136],{"categoryNo":108,"categoryName":109,"taxonomyType":110,"taxonomyTypeDesc":111},[138,139,140,141,142,143,144,145,146],"me","replace me skill","template","directory","skill template","existing skill","new skill","bootstrap","scaffold",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":153,"publishedAt":34},"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",[],[154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,21,171,172],"velocity","spatial velocity","Spatial","scvelo","input","starsolo","time","deep","RNA","kb-python","via","velocyto","rna-velocity","velovi","dynamics","upstream","kb","python","deterministic",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":179,"publishedAt":34},"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",[],[156,180,181,182,183,184,185,186,164,187,188,189,190,191,154,22,21,192,193,194],"trajectory","spatial trajectory","state","terminal","lineage","diffusion","cellrank","palantir","dpt","pseudotime","probability","cell","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":34},"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,24,156,164,203,204,205,206,207,208,126,209,210,211,212,21,193,213,214,215],"spatial statistics","nhood-enrichment","co-occurrence","ripley","geary","moran","neighbourhood","ranking","autocorrelation","local","domain","detection","enrichment","stats"]