[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DTAMS5FQ8FEFFP4VABA0KB":3,"skill-same:01M6DTAMS5FQ8FEFFP4VABA0KB":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":17,"publishedAt":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":46,"repositoryHtmlUrl":47,"repositoryHomepageUrl":48,"ownerHtmlUrl":49,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":50,"install":51,"resources":64},"01M6DTAMS5FQ8FEFFP4VABA0KB","bulkrna-geneid-mapping",null,"Load when converting Ensembl, Entrez or symbol IDs in a bulk RNA count matrix using an explicit mapping or a small human demo reference. Skip when IDs already match downstream needs; use fetch_mapping explicitly for MyGene lookup.","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\u002Fbulkrna\u002Fbulkrna-geneid-mapping\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"bulkrna geneid mapping","bulkrna","id","annotation","HGNC","Entrez","Ensembl","mapping","gene-id","demo","RNA","human","reference","use","fetch","convert","ids","lookup","2026-11-10 10:12:30",false,"---\nname: bulkrna-geneid-mapping\ndescription: Load when converting Ensembl, Entrez or symbol IDs in a bulk RNA count matrix using an explicit mapping or a small human demo reference. Skip when IDs already match downstream needs; use fetch_mapping explicitly for MyGene lookup.\ntrigger: gene ID, Ensembl, Entrez, gene symbol, ID mapping, gene annotation, convert IDs\ntags:\n- bulkrna\n- gene-id\n- mapping\n- Ensembl\n- Entrez\n- HGNC\n- annotation\n---\n\n# bulkrna-geneid-mapping\n\n## When to use\n\nConvert Ensembl, Entrez and symbol identifiers in count-matrix row indexes. Use a caller-provided mapping for full coverage or non-human organisms. Skip when identifiers already match downstream needs.\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('bulkrna-geneid-mapping')\ndata = read_input('counts.csv', reader=lambda path: pd.read_csv(path, index_col=0))\nresult = library.map_ids(data)\nwrite_output(result, 'tables\u002Fresult.csv')\n```\n\n[examples\u002Fexample_step.py](examples\u002Fexample_step.py) runs offline and supports\nfresh-kernel replay. Pure computations return objects; CLI and steps own writes.\n\n## API\n\n\u003C!-- api:begin generated from _api.py; regenerate with run.py api \u003Cskill dir> --write -->\n\n### `map_ids(data, *, from_type='ensembl', to_type='symbol', species='human', on_duplicate='sum', mapping=None)`\n\nMap count-matrix row identifiers without network or file access.\n\n:param data: Gene-by-sample counts; the row index contains source IDs.\n:param from_type: CLI default ensembl; entrez and symbol are also supported.\n:param to_type: CLI default symbol; target namespace.\n:param species: CLI default human; mouse requires an explicit reference.\n:param on_duplicate: CLI default sum; first or drop resolve target collisions differently.\n:param mapping: Optional source\u002Ftarget DataFrame; None uses ten human demo genes only.\n:returns: A new mapped DataFrame with reference scope, mapping records and summary diagnostics.\n:raises ValueError: Namespaces, duplicate policy or reference data are invalid.\n\n### `fetch_mapping(data, *, from_type='ensembl', to_type='symbol', species='human')`\n\nQuery MyGene explicitly and return a local source\u002Ftarget mapping table.\n\n:param data: Iterable of identifiers to send to the public MyGene service.\n:param from_type: Default ensembl; source namespace.\n:param to_type: Default symbol; requested target namespace.\n:param species: Default human; MyGene species selector.\n:returns: A DataFrame containing only identifiers for which MyGene returned a match.\n:raises ImportError: Install mygene with install_skill_deps if unavailable.\n:raises Exception: Network or service errors propagate; no demo substitute is returned.\n\n### `mapping_table(data)`\n\nReturn the original-to-target mapping decisions for every input row.\n\n:param data: Mapped count matrix returned by map_ids.\n:returns: A new DataFrame with original_id, stripped_id, mapped_id and was_mapped.\n:raises KeyError: The count matrix has no mapping diagnostics.\n\n### `run_info(data, *, keep=True)`\n\nRead mapping diagnostics without modifying the count values.\n\n:param data: Mapped counts returned by map_ids.\n:param keep: Default True; the CLI removes diagnostics with False.\n:returns: An independent diagnostic dictionary.\n:raises TypeError: data is not a DataFrame.\n\n### `mapping_figure(data)`\n\nPlot mapped and unmapped source-row counts.\n\n:param data: Count matrix returned by map_ids.\n:returns: A matplotlib Figure; no files are written.\n:raises KeyError: Mapping diagnostics are absent.\n\n\u003C!-- api:end -->\n\n## Methods and parameters\n\nLocal map_ids never queries the network. Its default reference contains ten human genes; it also supports reverse namespace mapping within that small reference. Pass a source\u002Ftarget DataFrame to override it. fetch_mapping explicitly sends identifiers to MyGene. The CLI queries MyGene only with --fetch-mygene.\n\n## Gotchas\n\n- `map_ids` strips Ensembl version suffixes, retains unmapped identifiers and resolves target collisions with sum, first or drop. Explicit mappings take priority. Non-human mapping without a reference raises an error. `run_info` identifies demo versus provided reference scope.\n\n## Inputs and outputs\n\n`tables\u002Fmapped_counts.csv`, `tables\u002Fmapping_table.csv`, `report.md`, `result.json` and `reproducibility\u002Fcommands.sh`. `tables\u002Funmapped_genes.csv` is conditional on unmapped input rows. The CLI does not write figures.\n\n## CLI\n\n```bash\npython skills\u002Fbulkrna\u002Fbulkrna-geneid-mapping\u002Fbulkrna_geneid_mapping.py --demo --output \u002Ftmp\u002Fbulkrna_geneid_mapping\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`, `mygene`, `matplotlib`\n","# bulkrna-geneid-mapping\n\n## When to use\n\nConvert Ensembl, Entrez and symbol identifiers in count-matrix row indexes. Use a caller-provided mapping for full coverage or non-human organisms. Skip when identifiers already match downstream needs.\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('bulkrna-geneid-mapping')\ndata = read_input('counts.csv', reader=lambda path: pd.read_csv(path, index_col=0))\nresult = library.map_ids(data)\nwrite_output(result, 'tables\u002Fresult.csv')\n```\n\n[examples\u002Fexample_step.py](examples\u002Fexample_step.py) runs offline and supports\nfresh-kernel replay. Pure computations return objects; CLI and steps own writes.\n\n## API\n\n\u003C!-- api:begin generated from _api.py; regenerate with run.py api \u003Cskill dir> --write -->\n\n### `map_ids(data, *, from_type='ensembl', to_type='symbol', species='human', on_duplicate='sum', mapping=None)`\n\nMap count-matrix row identifiers without network or file access.\n\n:param data: Gene-by-sample counts; the row index contains source IDs.\n:param from_type: CLI default ensembl; entrez and symbol are also supported.\n:param to_type: CLI default symbol; target namespace.\n:param species: CLI default human; mouse requires an explicit reference.\n:param on_duplicate: CLI default sum; first or drop resolve target collisions differently.\n:param mapping: Optional source\u002Ftarget DataFrame; None uses ten human demo genes only.\n:returns: A new mapped DataFrame with reference scope, mapping records and summary diagnostics.\n:raises ValueError: Namespaces, duplicate policy or reference data are invalid.\n\n### `fetch_mapping(data, *, from_type='ensembl', to_type='symbol', species='human')`\n\nQuery MyGene explicitly and return a local source\u002Ftarget mapping table.\n\n:param data: Iterable of identifiers to send to the public MyGene service.\n:param from_type: Default ensembl; source namespace.\n:param to_type: Default symbol; requested target namespace.\n:param species: Default human; MyGene species selector.\n:returns: A DataFrame containing only identifiers for which MyGene returned a match.\n:raises ImportError: Install mygene with install_skill_deps if unavailable.\n:raises Exception: Network or service errors propagate; no demo substitute is returned.\n\n### `mapping_table(data)`\n\nReturn the original-to-target mapping decisions for every input row.\n\n:param data: Mapped count matrix returned by map_ids.\n:returns: A new DataFrame with original_id, stripped_id, mapped_id and was_mapped.\n:raises KeyError: The count matrix has no mapping diagnostics.\n\n### `run_info(data, *, keep=True)`\n\nRead mapping diagnostics without modifying the count values.\n\n:param data: Mapped counts returned by map_ids.\n:param keep: Default True; the CLI removes diagnostics with False.\n:returns: An independent diagnostic dictionary.\n:raises TypeError: data is not a DataFrame.\n\n### `mapping_figure(data)`\n\nPlot mapped and unmapped source-row counts.\n\n:param data: Count matrix returned by map_ids.\n:returns: A matplotlib Figure; no files are written.\n:raises KeyError: Mapping diagnostics are absent.\n\n\u003C!-- api:end -->\n\n## Methods and parameters\n\nLocal map_ids never queries the network. Its default reference contains ten human genes; it also supports reverse namespace mapping within that small reference. Pass a source\u002Ftarget DataFrame to override it. fetch_mapping explicitly sends identifiers to MyGene. The CLI queries MyGene only with --fetch-mygene.\n\n## Gotchas\n\n- `map_ids` strips Ensembl version suffixes, retains unmapped identifiers and resolves target collisions with sum, first or drop. Explicit mappings take priority. Non-human mapping without a reference raises an error. `run_info` identifies demo versus provided reference scope.\n\n## Inputs and outputs\n\n`tables\u002Fmapped_counts.csv`, `tables\u002Fmapping_table.csv`, `report.md`, `result.json` and `reproducibility\u002Fcommands.sh`. `tables\u002Funmapped_genes.csv` is conditional on unmapped input rows. The CLI does not write figures.\n\n## CLI\n\n```bash\npython skills\u002Fbulkrna\u002Fbulkrna-geneid-mapping\u002Fbulkrna_geneid_mapping.py --demo --output \u002Ftmp\u002Fbulkrna_geneid_mapping\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`, `mygene`, `matplotlib`\n",{"name":5,"tags":41,"trigger":42,"description":7},[19,26,25,24,23,22,21],"gene ID, Ensembl, Entrez, gene symbol, ID mapping, gene annotation, convert IDs","main","90a3bec3e6549bc33dddbf67e4b23869736c49d1","skills\u002Fbulkrna\u002Fbulkrna-geneid-mapping",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":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add TianGzlab\u002FOmicsClaw --skill bulkrna-geneid-mapping",{"tool":57,"command":58},"bunx","bunx skills add TianGzlab\u002FOmicsClaw --skill bulkrna-geneid-mapping",{"tool":60,"command":61},"pnpm","pnpm dlx skills add TianGzlab\u002FOmicsClaw --skill bulkrna-geneid-mapping","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fbulkrna\u002Fbulkrna-geneid-mapping\u002FSKILL.md",true,[65,71,75,79,85,89,93,97],{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"_api.py","SCRIPT","脚本",4905,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fbulkrna\u002Fbulkrna-geneid-mapping\u002F_api.py",{"path":72,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":73,"sourceHtmlUrl":74},"bulkrna_geneid_mapping.py",7530,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fbulkrna\u002Fbulkrna-geneid-mapping\u002Fbulkrna_geneid_mapping.py",{"path":76,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":77,"sourceHtmlUrl":78},"examples\u002Fexample_step.py",668,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fbulkrna\u002Fbulkrna-geneid-mapping\u002Fexamples\u002Fexample_step.py",{"path":80,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":83,"sourceHtmlUrl":84},"index.json","REFERENCE","参考文档",649,"https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Flinux\u002Ffilesystem\u002Fquota\u002Fabuse\u002Fdetect\u002Findex.json",{"path":86,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":87,"sourceHtmlUrl":88},"references\u002Fmethodology.md",603,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fbulkrna\u002Fbulkrna-geneid-mapping\u002Freferences\u002Fmethodology.md",{"path":90,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":91,"sourceHtmlUrl":92},"references\u002Foutput_contract.md",315,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fbulkrna\u002Fbulkrna-geneid-mapping\u002Freferences\u002Foutput_contract.md",{"path":94,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":95,"sourceHtmlUrl":96},"references\u002Fparameters.md",502,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fbulkrna\u002Fbulkrna-geneid-mapping\u002Freferences\u002Fparameters.md",{"path":98,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":99,"sourceHtmlUrl":100},"tests\u002Ftest_api.py",1011,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fbulkrna\u002Fbulkrna-geneid-mapping\u002Ftests\u002Ftest_api.py",[102,119,131,148,173,196],{"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":113,"publishedAt":36},"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":111,"taxonomyTypeDesc":112},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[114,27,115,116,117,31,118],"demo skill","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":36},"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,130],"domains","fake domains","deployment","never","test",{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":138,"publishedAt":36},"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",[137],{"categoryNo":109,"categoryName":110,"taxonomyType":111,"taxonomyTypeDesc":112},[139,140,141,142,143,144,145,146,147],"me","replace me skill","template","directory","skill template","existing skill","new skill","bootstrap","scaffold",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":154,"publishedAt":36},"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",[],[155,156,157,158,159,160,161,162,28,163,164,165,166,167,168,169,170,31,171,172],"velocity","spatial velocity","Spatial","scvelo","input","starsolo","time","deep","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":36},"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",[],[157,180,181,182,183,184,185,186,164,187,188,189,190,191,155,192,31,193,194,195],"trajectory","spatial trajectory","state","terminal","lineage","diffusion","cellrank","palantir","dpt","pseudotime","probability","cell","default","branch","anndata","data",{"skillNo":197,"name":198,"nameZh":6,"description":199,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":200,"categories":201,"keywords":202,"publishedAt":36},"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",[],[203,204,157,164,205,206,207,208,209,210,126,211,212,213,214,31,194,215,216,217],"spatial statistics","statistics","nhood-enrichment","co-occurrence","ripley","geary","moran","neighbourhood","ranking","autocorrelation","local","domain","detection","enrichment","stats"]