[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DTNZ4AMWKTME1T18K5C643":3,"skill-same:01M6DTNZ4AMWKTME1T18K5C643":105},{"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":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":39,"commitSha":40,"skillDirectory":41,"forksCount":42,"repositoryHtmlUrl":43,"repositoryHomepageUrl":44,"ownerHtmlUrl":45,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":46,"install":47,"resources":60},"01M6DTNZ4AMWKTME1T18K5C643","replace-me-skill",null,"Load when copying this directory to bootstrap a new OmicsClaw skill. Skip when an existing skill already covers the request.","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\u002Ftemplates\u002Fskill\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31],"me","replace me skill","directory","scaffold","bootstrap","template","new skill","existing skill","skill template","2026-11-10 10:12:30",false,"---\nname: replace-me-skill\ndescription: Load when copying this directory to bootstrap a new OmicsClaw skill. Skip when an existing skill already covers the request.\ntrigger: scaffold skill, new skill, skill template\ntags:\n- template\n- scaffold\n---\n\n\u003C!--\nAuthoring checklist (delete this comment block before committing):\n\n  1. Copy: `cp -r templates\u002Fskill skills\u002F\u003Cdomain>\u002F\u003Cmy-new-skill>`, then\n     `mv replace_me.py \u003Cmy_new_skill>.py` and rename the tests\u002F file.\n     The folder name must equal the frontmatter `name`: `load_skill` finds\n     skills by folder name.\n  2. Write the frontmatter above by hand. It is the ONLY metadata the agent\n     sees, and `omicsclaw\u002Fskills\u002F` reads exactly four keys:\n\n       name         required, unique across all skills. A duplicate is\n                    skipped, not merged. This is what `use_skill` and\n                    `load_skill` are called with.\n       description  required. The one line the model routes on, and the\n                    only thing about this skill in the system prompt. Say\n                    when to LOAD it and when to SKIP it, naming the skill\n                    to use instead — the skip half is what prevents a\n                    wrong choice.\n       trigger      optional, comma-separated. Discovery keywords for\n                    `\u002Fskills \u003Cquery>`. It does NOT auto-fire the skill.\n       tags         optional. Also only `\u002Fskills \u003Cquery>`.\n\n     Anything else is inert: it is neither read nor validated.\n  3. Put the computations in `_api.py` (rules in `templates\u002Fskill\u002FREADME.md`),\n     then regenerate the `## API` section:\n       python skills\u002F_sdk\u002Fnotebook\u002Frun.py api skills\u002F\u003Cdomain>\u002F\u003Cmy-new-skill> --write\n     A test compares it with `_api.py` on every run.\n  4. Write the other sections and the `references\u002F*.md` stubs by hand.\n  5. Make `examples\u002Fexample_step.py` load a registered demo dataset with\n     `load_demo`, call the library and assert on the result.\n  6. Verify it is indexed, then refresh the domain index:\n       python -c \"from omicsclaw.skills import load_skills; \\\n         i = load_skills('skills'); print(len(i), i.skipped)\"\n       OMICSCLAW_WRITE_SKILL_INDEX=1 pytest \\\n         tests\u002Fskills\u002Ftest_domain_index_is_current.py\n       pytest tests\u002Fsdk\u002Fnotebook\u002Ftest_skill_api_sections.py\n\nFull usage notes and soft conventions live in `templates\u002Fskill\u002FREADME.md`.\n-->\n\n# REPLACE_SKILL_NAME\n\n## When to use\n\n\u003C!--\nOne short paragraph (3-6 lines). Mirror the frontmatter description's\nload\u002Fskip split and explicitly call out the closest adjacent skill so the\nagent knows when to redirect.\n-->\n\nThe user has `\u003Cinput shape>` and wants `\u003Coutput shape>`.  Pick this skill\nwhen `\u003Cdistinguishing condition>`.  For `\u003Cadjacent capability>` use\n`\u003Csibling-skill>` instead.\n\n## Use from a step\n\n```python\nlibrary = load_skill(\"REPLACE_SKILL_NAME\")\nframe = read_input(\"data\u002F\u003Cinput>.csv\")\nwrite_output(library.run_method(frame, method=\"default\"), \"tables\u002Freplace_me.csv\")\n```\n\nA complete step that runs on demo data: `examples\u002Fexample_step.py`.\n\n## API\n\n\u003C!-- api:begin generated from _api.py; regenerate with run.py api \u003Cskill dir> --write -->\n\n### `run_method(frame: pd.DataFrame, *, method: str='default') -> pd.DataFrame`\n\nPlaceholder computation: return a copy of the table with a ``method`` column.\n\n:param frame: The input table.\n:param method: The backend to run. Default ``\"default\"``, the only one so far;\n    say here where each default comes from and when to change it.\n:returns: A new DataFrame: *frame* plus a ``method`` column.\n:raises ValueError: *method* is not one of ``METHODS``.\n\n\u003C!-- api:end -->\n\n## Methods and parameters\n\n\u003C!--\nWhich method when. For every default: its value and where it comes from\n(the method's paper, the library's default, a lab convention). Which values\nthe user should decide, and how to ask.\n-->\n\n- `method=\"default\"`: the only backend so far.\n\n## Gotchas\n\n\u003C!--\nThe failure modes an agent hits, each with the fix. Anchor each to something\ngrep-able: a function name, a quoted error message, a column or key.\n-->\n\n- _None yet — append as failure modes are reported._\n\n## Inputs and outputs\n\n\u003C!--\nWhat each function reads (columns, obs\u002Fobsm\u002Flayers keys) and what it writes\nor returns.\n-->\n\n- `run_method` reads a table and returns a new one with a `method` column.\n\n## CLI\n\n`replace_me.py` runs the same functions outside a project and writes\n`tables\u002Freplace_me.csv`, `report.md` and `result.json`:\n`python \u003Cskill directory>\u002Freplace_me.py --help`. `--demo` synthesises its input.\n\n## Dependencies\n\nPython packages this skill's script needs. They are not installed for you\n— check before a long run.\n\n`\u003Cpackage-a>`, `\u003Cpackage-b>`\n\n## See also\n\n- `references\u002Fparameters.md` — every CLI flag, per-method tunables\n- `references\u002Fmethodology.md` — the WHY behind the algorithm\n- `references\u002Foutput_contract.md` — `tables\u002FX.csv` + `result.json` schema\n- Adjacent skills: `\u003Csibling-1>` (upstream), `\u003Csibling-2>` (parallel), `\u003Csibling-3>` (downstream)\n","\u003C!--\nAuthoring checklist (delete this comment block before committing):\n\n  1. Copy: `cp -r templates\u002Fskill skills\u002F\u003Cdomain>\u002F\u003Cmy-new-skill>`, then\n     `mv replace_me.py \u003Cmy_new_skill>.py` and rename the tests\u002F file.\n     The folder name must equal the frontmatter `name`: `load_skill` finds\n     skills by folder name.\n  2. Write the frontmatter above by hand. It is the ONLY metadata the agent\n     sees, and `omicsclaw\u002Fskills\u002F` reads exactly four keys:\n\n       name         required, unique across all skills. A duplicate is\n                    skipped, not merged. This is what `use_skill` and\n                    `load_skill` are called with.\n       description  required. The one line the model routes on, and the\n                    only thing about this skill in the system prompt. Say\n                    when to LOAD it and when to SKIP it, naming the skill\n                    to use instead — the skip half is what prevents a\n                    wrong choice.\n       trigger      optional, comma-separated. Discovery keywords for\n                    `\u002Fskills \u003Cquery>`. It does NOT auto-fire the skill.\n       tags         optional. Also only `\u002Fskills \u003Cquery>`.\n\n     Anything else is inert: it is neither read nor validated.\n  3. Put the computations in `_api.py` (rules in `templates\u002Fskill\u002FREADME.md`),\n     then regenerate the `## API` section:\n       python skills\u002F_sdk\u002Fnotebook\u002Frun.py api skills\u002F\u003Cdomain>\u002F\u003Cmy-new-skill> --write\n     A test compares it with `_api.py` on every run.\n  4. Write the other sections and the `references\u002F*.md` stubs by hand.\n  5. Make `examples\u002Fexample_step.py` load a registered demo dataset with\n     `load_demo`, call the library and assert on the result.\n  6. Verify it is indexed, then refresh the domain index:\n       python -c \"from omicsclaw.skills import load_skills; \\\n         i = load_skills('skills'); print(len(i), i.skipped)\"\n       OMICSCLAW_WRITE_SKILL_INDEX=1 pytest \\\n         tests\u002Fskills\u002Ftest_domain_index_is_current.py\n       pytest tests\u002Fsdk\u002Fnotebook\u002Ftest_skill_api_sections.py\n\nFull usage notes and soft conventions live in `templates\u002Fskill\u002FREADME.md`.\n-->\n\n# REPLACE_SKILL_NAME\n\n## When to use\n\n\u003C!--\nOne short paragraph (3-6 lines). Mirror the frontmatter description's\nload\u002Fskip split and explicitly call out the closest adjacent skill so the\nagent knows when to redirect.\n-->\n\nThe user has `\u003Cinput shape>` and wants `\u003Coutput shape>`.  Pick this skill\nwhen `\u003Cdistinguishing condition>`.  For `\u003Cadjacent capability>` use\n`\u003Csibling-skill>` instead.\n\n## Use from a step\n\n```python\nlibrary = load_skill(\"REPLACE_SKILL_NAME\")\nframe = read_input(\"data\u002F\u003Cinput>.csv\")\nwrite_output(library.run_method(frame, method=\"default\"), \"tables\u002Freplace_me.csv\")\n```\n\nA complete step that runs on demo data: `examples\u002Fexample_step.py`.\n\n## API\n\n\u003C!-- api:begin generated from _api.py; regenerate with run.py api \u003Cskill dir> --write -->\n\n### `run_method(frame: pd.DataFrame, *, method: str='default') -> pd.DataFrame`\n\nPlaceholder computation: return a copy of the table with a ``method`` column.\n\n:param frame: The input table.\n:param method: The backend to run. Default ``\"default\"``, the only one so far;\n    say here where each default comes from and when to change it.\n:returns: A new DataFrame: *frame* plus a ``method`` column.\n:raises ValueError: *method* is not one of ``METHODS``.\n\n\u003C!-- api:end -->\n\n## Methods and parameters\n\n\u003C!--\nWhich method when. For every default: its value and where it comes from\n(the method's paper, the library's default, a lab convention). Which values\nthe user should decide, and how to ask.\n-->\n\n- `method=\"default\"`: the only backend so far.\n\n## Gotchas\n\n\u003C!--\nThe failure modes an agent hits, each with the fix. Anchor each to something\ngrep-able: a function name, a quoted error message, a column or key.\n-->\n\n- _None yet — append as failure modes are reported._\n\n## Inputs and outputs\n\n\u003C!--\nWhat each function reads (columns, obs\u002Fobsm\u002Flayers keys) and what it writes\nor returns.\n-->\n\n- `run_method` reads a table and returns a new one with a `method` column.\n\n## CLI\n\n`replace_me.py` runs the same functions outside a project and writes\n`tables\u002Freplace_me.csv`, `report.md` and `result.json`:\n`python \u003Cskill directory>\u002Freplace_me.py --help`. `--demo` synthesises its input.\n\n## Dependencies\n\nPython packages this skill's script needs. They are not installed for you\n— check before a long run.\n\n`\u003Cpackage-a>`, `\u003Cpackage-b>`\n\n## See also\n\n- `references\u002Fparameters.md` — every CLI flag, per-method tunables\n- `references\u002Fmethodology.md` — the WHY behind the algorithm\n- `references\u002Foutput_contract.md` — `tables\u002FX.csv` + `result.json` schema\n- Adjacent skills: `\u003Csibling-1>` (upstream), `\u003Csibling-2>` (parallel), `\u003Csibling-3>` (downstream)\n",{"name":5,"tags":37,"trigger":38,"description":7},[28,26],"scaffold skill, new skill, skill template","main","90a3bec3e6549bc33dddbf67e4b23869736c49d1","templates\u002Fskill",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":48,"prompt":58,"zipAvailable":59},[49,52,55],{"tool":50,"command":51},"npx","npx skills add TianGzlab\u002FOmicsClaw --skill replace-me-skill",{"tool":53,"command":54},"bunx","bunx skills add TianGzlab\u002FOmicsClaw --skill replace-me-skill",{"tool":56,"command":57},"pnpm","pnpm dlx skills add TianGzlab\u002FOmicsClaw --skill replace-me-skill","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftemplates\u002Fskill\u002FSKILL.md",true,[61,67,71,77,81,85,89,93,97,101],{"path":62,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":65,"sourceHtmlUrl":66},"_api.py","SCRIPT","脚本",1207,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftemplates\u002Fskill\u002F_api.py",{"path":68,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":69,"sourceHtmlUrl":70},"examples\u002Fexample_step.py",697,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftemplates\u002Fskill\u002Fexamples\u002Fexample_step.py",{"path":72,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},"README.md","REFERENCE","参考文档",10861,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftemplates\u002Fskill\u002FREADME.md",{"path":78,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":79,"sourceHtmlUrl":80},"references\u002Fmethodology.md",4066,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftemplates\u002Fskill\u002Freferences\u002Fmethodology.md",{"path":82,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":83,"sourceHtmlUrl":84},"references\u002Foutput_contract.md",2416,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftemplates\u002Fskill\u002Freferences\u002Foutput_contract.md",{"path":86,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":87,"sourceHtmlUrl":88},"references\u002Fparameters.md",108,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftemplates\u002Fskill\u002Freferences\u002Fparameters.md",{"path":90,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":91,"sourceHtmlUrl":92},"references\u002Fr_visualization.md",1082,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftemplates\u002Fskill\u002Freferences\u002Fr_visualization.md",{"path":94,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":95,"sourceHtmlUrl":96},"replace_me.py",6366,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftemplates\u002Fskill\u002Freplace_me.py",{"path":98,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":99,"sourceHtmlUrl":100},"tests\u002F__init__.py",0,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftemplates\u002Fskill\u002Ftests\u002F__init__.py",{"path":102,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":103,"sourceHtmlUrl":104},"tests\u002Ftest_replace_me.py",1634,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftemplates\u002Fskill\u002Ftests\u002Ftest_replace_me.py",[106,121,133,159,182,204],{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":113,"publishedAt":32},"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",[112],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[114,115,116,117,118,119,120],"demo","demo skill","tests","fixture","fixture skill","use","environment",{"skillNo":122,"name":123,"nameZh":6,"description":124,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":127,"publishedAt":32},"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",[],[128,129,130,116,117,131,132],"domains","fake domains","deployment","never","test",{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":139,"publishedAt":32},"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",[],[140,141,142,143,144,145,146,147,148,149,119,150,151,152,153,154,155,156,157,158],"velocity","spatial velocity","Spatial","kb","deep","time","upstream","RNA","scvelo","deterministic","rna-velocity","python","input","dynamics","velovi","velocyto","via","kb-python","starsolo",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":165,"publishedAt":32},"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",[],[142,166,167,168,156,169,170,171,172,173,174,140,175,119,176,177,178,179,180,181],"spatial trajectory","trajectory","cellrank","palantir","probability","data","pseudotime","diffusion","cell","default","branch","anndata","dpt","lineage","state","terminal",{"skillNo":183,"name":184,"nameZh":6,"description":185,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":186,"categories":187,"keywords":188,"publishedAt":32},"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",[],[189,142,190,191,128,156,192,193,194,195,119,177,196,197,198,199,200,201,202,203],"statistics","spatial statistics","enrichment","ranking","autocorrelation","local","domain","detection","neighbourhood","stats","nhood-enrichment","co-occurrence","ripley","geary","moran",{"skillNo":205,"name":206,"nameZh":6,"description":207,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":208,"categories":209,"keywords":210,"publishedAt":32},"01M6DTNF4HP2WP971HD2QZ8TG8","spatial-register","Load when aligning multiple spatial slices into a common coordinate frame with PASTE or STalign. Skip single-slice data; for expression-space batch correction use spatial-integrate.","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-register\u002FSKILL.md",[],[211,212,142,213,214,215,216,217,119,218,171,219],"spatial register","register","expression","coordinate","registration","alignment","integrate","common","batch"]