[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-anthropic-instrument-data-to-allotrope":3,"mdc--tq3m0-key":37,"related-org-anthropic-instrument-data-to-allotrope":1897,"related-repo-anthropic-instrument-data-to-allotrope":2086},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"instrument-data-to-allotrope","convert instrument data to Allotrope ASM","Convert laboratory instrument output files (PDF, CSV, Excel, TXT) to Allotrope Simple Model (ASM) JSON format or flattened 2D CSV. Use this skill when scientists need to standardize instrument data for LIMS systems, data lakes, or downstream analysis. Supports auto-detection of instrument types. Outputs include full ASM JSON, flattened CSV for easy import, and exportable Python code for data engineers. Common triggers include converting instrument files, standardizing lab data, preparing data for upload to LIMS\u002FELN systems, or generating parser code for production pipelines.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"anthropic","Anthropic","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fanthropic.png","anthropics",[13,17,20,23],{"name":14,"slug":15,"type":16},"Allotrope","allotrope","tag",{"name":18,"slug":19,"type":16},"Life Sciences","life-sciences",{"name":21,"slug":22,"type":16},"Data Cleaning","data-cleaning",{"name":24,"slug":25,"type":16},"Laboratory","laboratory",537,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Flife-sciences","2026-04-06T17:57:07.996807",null,101,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"Repo for the Claude Code Marketplace to use with the Claude for Life Sciences Launch. This will continue to host the marketplace.json long-term, but not the actual MCP servers.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Flife-sciences\u002Ftree\u002FHEAD\u002Finstrument-data-to-allotrope","---\nname: instrument-data-to-allotrope\ndescription: Convert laboratory instrument output files (PDF, CSV, Excel, TXT) to Allotrope Simple Model (ASM) JSON format or flattened 2D CSV. Use this skill when scientists need to standardize instrument data for LIMS systems, data lakes, or downstream analysis. Supports auto-detection of instrument types. Outputs include full ASM JSON, flattened CSV for easy import, and exportable Python code for data engineers. Common triggers include converting instrument files, standardizing lab data, preparing data for upload to LIMS\u002FELN systems, or generating parser code for production pipelines.\n---\n\n# Instrument Data to Allotrope Converter\n\nConvert instrument files into standardized Allotrope Simple Model (ASM) format for LIMS upload, data lakes, or handoff to data engineering teams.\n\n> **Note: This is an Example Skill**\n>\n> This skill demonstrates how skills can support your data engineering tasks—automating schema transformations, parsing instrument outputs, and generating production-ready code.\n>\n> **To customize for your organization:**\n> - Modify the `references\u002F` files to include your company's specific schemas or ontology mappings\n> - Use an MCP server to connect to systems that define your schemas (e.g., your LIMS, data catalog, or schema registry)\n> - Extend the `scripts\u002F` to handle proprietary instrument formats or internal data standards\n>\n> This pattern can be adapted for any data transformation workflow where you need to convert between formats or validate against organizational standards.\n\n## Workflow Overview\n\n1. **Detect instrument type** from file contents (auto-detect or user-specified)\n2. **Parse file** using allotropy library (native) or flexible fallback parser\n3. **Generate outputs**:\n   - ASM JSON (full semantic structure)\n   - Flattened CSV (2D tabular format)\n   - Python parser code (for data engineer handoff)\n4. **Deliver** files with summary and usage instructions\n\n> **When Uncertain:** If you're unsure how to map a field to ASM (e.g., is this raw data or calculated? device setting or environmental condition?), ask the user for clarification. Refer to `references\u002Ffield_classification_guide.md` for guidance, but when ambiguity remains, confirm with the user rather than guessing.\n\n## Quick Start\n\n```python\n# Install requirements first\npip install allotropy pandas openpyxl pdfplumber --break-system-packages\n\n# Core conversion\nfrom allotropy.parser_factory import Vendor\nfrom allotropy.to_allotrope import allotrope_from_file\n\n# Convert with allotropy\nasm = allotrope_from_file(\"instrument_data.csv\", Vendor.BECKMAN_VI_CELL_BLU)\n```\n\n## Output Format Selection\n\n**ASM JSON (default)** - Full semantic structure with ontology URIs\n- Best for: LIMS systems expecting ASM, data lakes, long-term archival\n- Validates against Allotrope schemas\n\n**Flattened CSV** - 2D tabular representation\n- Best for: Quick analysis, Excel users, systems without JSON support\n- Each measurement becomes one row with metadata repeated\n\n**Both** - Generate both formats for maximum flexibility\n\n## Calculated Data Handling\n\n**IMPORTANT:** Separate raw measurements from calculated\u002Fderived values.\n\n- **Raw data** → `measurement-document` (direct instrument readings)\n- **Calculated data** → `calculated-data-aggregate-document` (derived values)\n\nCalculated values MUST include traceability via `data-source-aggregate-document`:\n\n```json\n\"calculated-data-aggregate-document\": {\n  \"calculated-data-document\": [{\n    \"calculated-data-identifier\": \"SAMPLE_B1_DIN_001\",\n    \"calculated-data-name\": \"DNA integrity number\",\n    \"calculated-result\": {\"value\": 9.5, \"unit\": \"(unitless)\"},\n    \"data-source-aggregate-document\": {\n      \"data-source-document\": [{\n        \"data-source-identifier\": \"SAMPLE_B1_MEASUREMENT\",\n        \"data-source-feature\": \"electrophoresis trace\"\n      }]\n    }\n  }]\n}\n```\n\n**Common calculated fields by instrument type:**\n| Instrument | Calculated Fields |\n|------------|-------------------|\n| Cell counter | Viability %, cell density dilution-adjusted values |\n| Spectrophotometer | Concentration (from absorbance), 260\u002F280 ratio |\n| Plate reader | Concentrations from standard curve, %CV |\n| Electrophoresis | DIN\u002FRIN, region concentrations, average sizes |\n| qPCR | Relative quantities, fold change |\n\nSee `references\u002Ffield_classification_guide.md` for detailed guidance on raw vs. calculated classification.\n\n## Validation\n\nAlways validate ASM output before delivering to the user:\n\n```bash\npython scripts\u002Fvalidate_asm.py output.json\npython scripts\u002Fvalidate_asm.py output.json --reference known_good.json  # Compare to reference\npython scripts\u002Fvalidate_asm.py output.json --strict  # Treat warnings as errors\n```\n\n**Validation Rules:**\n- Based on Allotrope ASM specification (December 2024)\n- Last updated: 2026-01-07\n- Source: https:\u002F\u002Fgitlab.com\u002Fallotrope-public\u002Fasm\n\n**Soft Validation Approach:**\nUnknown techniques, units, or sample roles generate **warnings** (not errors) to allow for forward compatibility. If Allotrope adds new values after December 2024, the validator won't block them—it will flag them for manual verification. Use `--strict` mode to treat warnings as errors if you need stricter validation.\n\n**What it checks:**\n- Correct technique selection (e.g., multi-analyte profiling vs plate reader)\n- Field naming conventions (space-separated, not hyphenated)\n- Calculated data has traceability (`data-source-aggregate-document`)\n- Unique identifiers exist for measurements and calculated values\n- Required metadata present\n- Valid units and sample roles (with soft validation for unknown values)\n\n## Supported Instruments\n\nSee `references\u002Fsupported_instruments.md` for complete list. Key instruments:\n\n| Category | Instruments |\n|----------|-------------|\n| Cell Counting | Vi-CELL BLU, Vi-CELL XR, NucleoCounter |\n| Spectrophotometry | NanoDrop One\u002FEight\u002F8000, Lunatic |\n| Plate Readers | SoftMax Pro, EnVision, Gen5, CLARIOstar |\n| ELISA | SoftMax Pro, BMG MARS, MSD Workbench |\n| qPCR | QuantStudio, Bio-Rad CFX |\n| Chromatography | Empower, Chromeleon |\n\n## Detection & Parsing Strategy\n\n### Tier 1: Native allotropy parsing (PREFERRED)\n**Always try allotropy first.** Check available vendors directly:\n\n```python\nfrom allotropy.parser_factory import Vendor\n\n# List all supported vendors\nfor v in Vendor:\n    print(f\"{v.name}\")\n\n# Common vendors:\n# AGILENT_TAPESTATION_ANALYSIS  (for TapeStation XML)\n# BECKMAN_VI_CELL_BLU\n# THERMO_FISHER_NANODROP_EIGHT\n# MOLDEV_SOFTMAX_PRO\n# APPBIO_QUANTSTUDIO\n# ... many more\n```\n\n**When the user provides a file, check if allotropy supports it before falling back to manual parsing.** The `scripts\u002Fconvert_to_asm.py` auto-detection only covers a subset of allotropy vendors.\n\n### Tier 2: Flexible fallback parsing\n**Only use if allotropy doesn't support the instrument.** This fallback:\n- Does NOT generate `calculated-data-aggregate-document`\n- Does NOT include full traceability\n- Produces simplified ASM structure\n\nUse flexible parser with:\n- Column name fuzzy matching\n- Unit extraction from headers\n- Metadata extraction from file structure\n\n### Tier 3: PDF extraction\nFor PDF-only files, extract tables using pdfplumber, then apply Tier 2 parsing.\n\n## Pre-Parsing Checklist\n\nBefore writing a custom parser, ALWAYS:\n\n1. **Check if allotropy supports it** - Use native parser if available\n2. **Find a reference ASM file** - Check `references\u002Fexamples\u002F` or ask user\n3. **Review instrument-specific guide** - Check `references\u002Finstrument_guides\u002F`\n4. **Validate against reference** - Run `validate_asm.py --reference \u003Cfile>`\n\n## Common Mistakes to Avoid\n\n| Mistake | Correct Approach |\n|---------|------------------|\n| Manifest as object | Use URL string |\n| Lowercase detection types | Use \"Absorbance\" not \"absorbance\" |\n| \"emission wavelength setting\" | Use \"detector wavelength setting\" for emission |\n| All measurements in one document | Group by well\u002Fsample location |\n| Missing procedure metadata | Extract ALL device settings per measurement |\n\n## Code Export for Data Engineers\n\nGenerate standalone Python scripts that scientists can hand off:\n\n```python\n# Export parser code\npython scripts\u002Fexport_parser.py --input \"data.csv\" --vendor \"VI_CELL_BLU\" --output \"parser_script.py\"\n```\n\nThe exported script:\n- Has no external dependencies beyond pandas\u002Fallotropy\n- Includes inline documentation\n- Can run in Jupyter notebooks\n- Is production-ready for data pipelines\n\n## File Structure\n\n```\ninstrument-data-to-allotrope\u002F\n├── SKILL.md                          # This file\n├── scripts\u002F\n│   ├── convert_to_asm.py            # Main conversion script\n│   ├── flatten_asm.py               # ASM → 2D CSV conversion\n│   ├── export_parser.py             # Generate standalone parser code\n│   └── validate_asm.py              # Validate ASM output quality\n└── references\u002F\n    ├── supported_instruments.md     # Full instrument list with Vendor enums\n    ├── asm_schema_overview.md       # ASM structure reference\n    ├── field_classification_guide.md # Where to put different field types\n    └── flattening_guide.md          # How flattening works\n```\n\n## Usage Examples\n\n### Example 1: Vi-CELL BLU file\n```\nUser: \"Convert this cell counting data to Allotrope format\"\n[uploads viCell_Results.xlsx]\n\nClaude:\n1. Detects Vi-CELL BLU (95% confidence)\n2. Converts using allotropy native parser\n3. Outputs:\n   - viCell_Results_asm.json (full ASM)\n   - viCell_Results_flat.csv (2D format)\n   - viCell_parser.py (exportable code)\n```\n\n### Example 2: Request for code handoff\n```\nUser: \"I need to give our data engineer code to parse NanoDrop files\"\n\nClaude:\n1. Generates self-contained Python script\n2. Includes sample input\u002Foutput\n3. Documents all assumptions\n4. Provides Jupyter notebook version\n```\n\n### Example 3: LIMS-ready flattened output\n```\nUser: \"Convert this ELISA data to a CSV I can upload to our LIMS\"\n\nClaude:\n1. Parses plate reader data\n2. Generates flattened CSV with columns:\n   - sample_identifier, well_position, measurement_value, measurement_unit\n   - instrument_serial_number, analysis_datetime, assay_type\n3. Validates against common LIMS import requirements\n```\n\n## Implementation Notes\n\n### Installing allotropy\n```bash\npip install allotropy --break-system-packages\n```\n\n### Handling parse failures\nIf allotropy native parsing fails:\n1. Log the error for debugging\n2. Fall back to flexible parser\n3. Report reduced metadata completeness to user\n4. Suggest exporting different format from instrument\n\n### ASM Schema Validation\nValidate output against Allotrope schemas when available:\n```python\nimport jsonschema\n# Schema URLs in references\u002Fasm_schema_overview.md\n```\n",{"data":38,"body":39},{"name":4,"description":6},{"type":40,"children":41},"root",[42,51,57,125,132,194,215,221,315,321,331,344,354,367,377,383,393,431,444,833,841,934,946,952,957,1040,1048,1074,1099,1107,1147,1153,1165,1264,1270,1277,1287,1395,1413,1419,1429,1452,1457,1475,1481,1486,1492,1497,1559,1565,1652,1658,1663,1686,1691,1714,1720,1730,1736,1742,1751,1757,1766,1772,1781,1787,1793,1823,1829,1834,1857,1863,1868,1891],{"type":43,"tag":44,"props":45,"children":47},"element","h1",{"id":46},"instrument-data-to-allotrope-converter",[48],{"type":49,"value":50},"text","Instrument Data to Allotrope Converter",{"type":43,"tag":52,"props":53,"children":54},"p",{},[55],{"type":49,"value":56},"Convert instrument files into standardized Allotrope Simple Model (ASM) format for LIMS upload, data lakes, or handoff to data engineering teams.",{"type":43,"tag":58,"props":59,"children":60},"blockquote",{},[61,70,75,83,120],{"type":43,"tag":52,"props":62,"children":63},{},[64],{"type":43,"tag":65,"props":66,"children":67},"strong",{},[68],{"type":49,"value":69},"Note: This is an Example Skill",{"type":43,"tag":52,"props":71,"children":72},{},[73],{"type":49,"value":74},"This skill demonstrates how skills can support your data engineering tasks—automating schema transformations, parsing instrument outputs, and generating production-ready code.",{"type":43,"tag":52,"props":76,"children":77},{},[78],{"type":43,"tag":65,"props":79,"children":80},{},[81],{"type":49,"value":82},"To customize for your organization:",{"type":43,"tag":84,"props":85,"children":86},"ul",{},[87,102,107],{"type":43,"tag":88,"props":89,"children":90},"li",{},[91,93,100],{"type":49,"value":92},"Modify the ",{"type":43,"tag":94,"props":95,"children":97},"code",{"className":96},[],[98],{"type":49,"value":99},"references\u002F",{"type":49,"value":101}," files to include your company's specific schemas or ontology mappings",{"type":43,"tag":88,"props":103,"children":104},{},[105],{"type":49,"value":106},"Use an MCP server to connect to systems that define your schemas (e.g., your LIMS, data catalog, or schema registry)",{"type":43,"tag":88,"props":108,"children":109},{},[110,112,118],{"type":49,"value":111},"Extend the ",{"type":43,"tag":94,"props":113,"children":115},{"className":114},[],[116],{"type":49,"value":117},"scripts\u002F",{"type":49,"value":119}," to handle proprietary instrument formats or internal data standards",{"type":43,"tag":52,"props":121,"children":122},{},[123],{"type":49,"value":124},"This pattern can be adapted for any data transformation workflow where you need to convert between formats or validate against organizational standards.",{"type":43,"tag":126,"props":127,"children":129},"h2",{"id":128},"workflow-overview",[130],{"type":49,"value":131},"Workflow Overview",{"type":43,"tag":133,"props":134,"children":135},"ol",{},[136,146,156,184],{"type":43,"tag":88,"props":137,"children":138},{},[139,144],{"type":43,"tag":65,"props":140,"children":141},{},[142],{"type":49,"value":143},"Detect instrument type",{"type":49,"value":145}," from file contents (auto-detect or user-specified)",{"type":43,"tag":88,"props":147,"children":148},{},[149,154],{"type":43,"tag":65,"props":150,"children":151},{},[152],{"type":49,"value":153},"Parse file",{"type":49,"value":155}," using allotropy library (native) or flexible fallback parser",{"type":43,"tag":88,"props":157,"children":158},{},[159,164,166],{"type":43,"tag":65,"props":160,"children":161},{},[162],{"type":49,"value":163},"Generate outputs",{"type":49,"value":165},":\n",{"type":43,"tag":84,"props":167,"children":168},{},[169,174,179],{"type":43,"tag":88,"props":170,"children":171},{},[172],{"type":49,"value":173},"ASM JSON (full semantic structure)",{"type":43,"tag":88,"props":175,"children":176},{},[177],{"type":49,"value":178},"Flattened CSV (2D tabular format)",{"type":43,"tag":88,"props":180,"children":181},{},[182],{"type":49,"value":183},"Python parser code (for data engineer handoff)",{"type":43,"tag":88,"props":185,"children":186},{},[187,192],{"type":43,"tag":65,"props":188,"children":189},{},[190],{"type":49,"value":191},"Deliver",{"type":49,"value":193}," files with summary and usage instructions",{"type":43,"tag":58,"props":195,"children":196},{},[197],{"type":43,"tag":52,"props":198,"children":199},{},[200,205,207,213],{"type":43,"tag":65,"props":201,"children":202},{},[203],{"type":49,"value":204},"When Uncertain:",{"type":49,"value":206}," If you're unsure how to map a field to ASM (e.g., is this raw data or calculated? device setting or environmental condition?), ask the user for clarification. Refer to ",{"type":43,"tag":94,"props":208,"children":210},{"className":209},[],[211],{"type":49,"value":212},"references\u002Ffield_classification_guide.md",{"type":49,"value":214}," for guidance, but when ambiguity remains, confirm with the user rather than guessing.",{"type":43,"tag":126,"props":216,"children":218},{"id":217},"quick-start",[219],{"type":49,"value":220},"Quick Start",{"type":43,"tag":222,"props":223,"children":228},"pre",{"className":224,"code":225,"language":226,"meta":227,"style":227},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Install requirements first\npip install allotropy pandas openpyxl pdfplumber --break-system-packages\n\n# Core conversion\nfrom allotropy.parser_factory import Vendor\nfrom allotropy.to_allotrope import allotrope_from_file\n\n# Convert with allotropy\nasm = allotrope_from_file(\"instrument_data.csv\", Vendor.BECKMAN_VI_CELL_BLU)\n","python","",[229],{"type":43,"tag":94,"props":230,"children":231},{"__ignoreMap":227},[232,243,252,262,271,280,289,297,306],{"type":43,"tag":233,"props":234,"children":237},"span",{"class":235,"line":236},"line",1,[238],{"type":43,"tag":233,"props":239,"children":240},{},[241],{"type":49,"value":242},"# Install requirements first\n",{"type":43,"tag":233,"props":244,"children":246},{"class":235,"line":245},2,[247],{"type":43,"tag":233,"props":248,"children":249},{},[250],{"type":49,"value":251},"pip install allotropy pandas openpyxl pdfplumber --break-system-packages\n",{"type":43,"tag":233,"props":253,"children":255},{"class":235,"line":254},3,[256],{"type":43,"tag":233,"props":257,"children":259},{"emptyLinePlaceholder":258},true,[260],{"type":49,"value":261},"\n",{"type":43,"tag":233,"props":263,"children":265},{"class":235,"line":264},4,[266],{"type":43,"tag":233,"props":267,"children":268},{},[269],{"type":49,"value":270},"# Core conversion\n",{"type":43,"tag":233,"props":272,"children":274},{"class":235,"line":273},5,[275],{"type":43,"tag":233,"props":276,"children":277},{},[278],{"type":49,"value":279},"from allotropy.parser_factory import Vendor\n",{"type":43,"tag":233,"props":281,"children":283},{"class":235,"line":282},6,[284],{"type":43,"tag":233,"props":285,"children":286},{},[287],{"type":49,"value":288},"from allotropy.to_allotrope import allotrope_from_file\n",{"type":43,"tag":233,"props":290,"children":292},{"class":235,"line":291},7,[293],{"type":43,"tag":233,"props":294,"children":295},{"emptyLinePlaceholder":258},[296],{"type":49,"value":261},{"type":43,"tag":233,"props":298,"children":300},{"class":235,"line":299},8,[301],{"type":43,"tag":233,"props":302,"children":303},{},[304],{"type":49,"value":305},"# Convert with allotropy\n",{"type":43,"tag":233,"props":307,"children":309},{"class":235,"line":308},9,[310],{"type":43,"tag":233,"props":311,"children":312},{},[313],{"type":49,"value":314},"asm = allotrope_from_file(\"instrument_data.csv\", Vendor.BECKMAN_VI_CELL_BLU)\n",{"type":43,"tag":126,"props":316,"children":318},{"id":317},"output-format-selection",[319],{"type":49,"value":320},"Output Format Selection",{"type":43,"tag":52,"props":322,"children":323},{},[324,329],{"type":43,"tag":65,"props":325,"children":326},{},[327],{"type":49,"value":328},"ASM JSON (default)",{"type":49,"value":330}," - Full semantic structure with ontology URIs",{"type":43,"tag":84,"props":332,"children":333},{},[334,339],{"type":43,"tag":88,"props":335,"children":336},{},[337],{"type":49,"value":338},"Best for: LIMS systems expecting ASM, data lakes, long-term archival",{"type":43,"tag":88,"props":340,"children":341},{},[342],{"type":49,"value":343},"Validates against Allotrope schemas",{"type":43,"tag":52,"props":345,"children":346},{},[347,352],{"type":43,"tag":65,"props":348,"children":349},{},[350],{"type":49,"value":351},"Flattened CSV",{"type":49,"value":353}," - 2D tabular representation",{"type":43,"tag":84,"props":355,"children":356},{},[357,362],{"type":43,"tag":88,"props":358,"children":359},{},[360],{"type":49,"value":361},"Best for: Quick analysis, Excel users, systems without JSON support",{"type":43,"tag":88,"props":363,"children":364},{},[365],{"type":49,"value":366},"Each measurement becomes one row with metadata repeated",{"type":43,"tag":52,"props":368,"children":369},{},[370,375],{"type":43,"tag":65,"props":371,"children":372},{},[373],{"type":49,"value":374},"Both",{"type":49,"value":376}," - Generate both formats for maximum flexibility",{"type":43,"tag":126,"props":378,"children":380},{"id":379},"calculated-data-handling",[381],{"type":49,"value":382},"Calculated Data Handling",{"type":43,"tag":52,"props":384,"children":385},{},[386,391],{"type":43,"tag":65,"props":387,"children":388},{},[389],{"type":49,"value":390},"IMPORTANT:",{"type":49,"value":392}," Separate raw measurements from calculated\u002Fderived values.",{"type":43,"tag":84,"props":394,"children":395},{},[396,414],{"type":43,"tag":88,"props":397,"children":398},{},[399,404,406,412],{"type":43,"tag":65,"props":400,"children":401},{},[402],{"type":49,"value":403},"Raw data",{"type":49,"value":405}," → ",{"type":43,"tag":94,"props":407,"children":409},{"className":408},[],[410],{"type":49,"value":411},"measurement-document",{"type":49,"value":413}," (direct instrument readings)",{"type":43,"tag":88,"props":415,"children":416},{},[417,422,423,429],{"type":43,"tag":65,"props":418,"children":419},{},[420],{"type":49,"value":421},"Calculated data",{"type":49,"value":405},{"type":43,"tag":94,"props":424,"children":426},{"className":425},[],[427],{"type":49,"value":428},"calculated-data-aggregate-document",{"type":49,"value":430}," (derived values)",{"type":43,"tag":52,"props":432,"children":433},{},[434,436,442],{"type":49,"value":435},"Calculated values MUST include traceability via ",{"type":43,"tag":94,"props":437,"children":439},{"className":438},[],[440],{"type":49,"value":441},"data-source-aggregate-document",{"type":49,"value":443},":",{"type":43,"tag":222,"props":445,"children":449},{"className":446,"code":447,"language":448,"meta":227,"style":227},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\"calculated-data-aggregate-document\": {\n  \"calculated-data-document\": [{\n    \"calculated-data-identifier\": \"SAMPLE_B1_DIN_001\",\n    \"calculated-data-name\": \"DNA integrity number\",\n    \"calculated-result\": {\"value\": 9.5, \"unit\": \"(unitless)\"},\n    \"data-source-aggregate-document\": {\n      \"data-source-document\": [{\n        \"data-source-identifier\": \"SAMPLE_B1_MEASUREMENT\",\n        \"data-source-feature\": \"electrophoresis trace\"\n      }]\n    }\n  }]\n}\n","json",[450],{"type":43,"tag":94,"props":451,"children":452},{"__ignoreMap":227},[453,482,509,550,587,675,699,724,763,797,806,815,824],{"type":43,"tag":233,"props":454,"children":455},{"class":235,"line":236},[456,462,467,471,477],{"type":43,"tag":233,"props":457,"children":459},{"style":458},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[460],{"type":49,"value":461},"\"",{"type":43,"tag":233,"props":463,"children":465},{"style":464},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[466],{"type":49,"value":428},{"type":43,"tag":233,"props":468,"children":469},{"style":458},[470],{"type":49,"value":461},{"type":43,"tag":233,"props":472,"children":474},{"style":473},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[475],{"type":49,"value":476},": ",{"type":43,"tag":233,"props":478,"children":479},{"style":458},[480],{"type":49,"value":481},"{\n",{"type":43,"tag":233,"props":483,"children":484},{"class":235,"line":245},[485,490,496,500,504],{"type":43,"tag":233,"props":486,"children":487},{"style":458},[488],{"type":49,"value":489},"  \"",{"type":43,"tag":233,"props":491,"children":493},{"style":492},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[494],{"type":49,"value":495},"calculated-data-document",{"type":43,"tag":233,"props":497,"children":498},{"style":458},[499],{"type":49,"value":461},{"type":43,"tag":233,"props":501,"children":502},{"style":458},[503],{"type":49,"value":443},{"type":43,"tag":233,"props":505,"children":506},{"style":458},[507],{"type":49,"value":508}," [{\n",{"type":43,"tag":233,"props":510,"children":511},{"class":235,"line":254},[512,517,523,527,531,536,541,545],{"type":43,"tag":233,"props":513,"children":514},{"style":458},[515],{"type":49,"value":516},"    \"",{"type":43,"tag":233,"props":518,"children":520},{"style":519},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[521],{"type":49,"value":522},"calculated-data-identifier",{"type":43,"tag":233,"props":524,"children":525},{"style":458},[526],{"type":49,"value":461},{"type":43,"tag":233,"props":528,"children":529},{"style":458},[530],{"type":49,"value":443},{"type":43,"tag":233,"props":532,"children":533},{"style":458},[534],{"type":49,"value":535}," \"",{"type":43,"tag":233,"props":537,"children":538},{"style":464},[539],{"type":49,"value":540},"SAMPLE_B1_DIN_001",{"type":43,"tag":233,"props":542,"children":543},{"style":458},[544],{"type":49,"value":461},{"type":43,"tag":233,"props":546,"children":547},{"style":458},[548],{"type":49,"value":549},",\n",{"type":43,"tag":233,"props":551,"children":552},{"class":235,"line":264},[553,557,562,566,570,574,579,583],{"type":43,"tag":233,"props":554,"children":555},{"style":458},[556],{"type":49,"value":516},{"type":43,"tag":233,"props":558,"children":559},{"style":519},[560],{"type":49,"value":561},"calculated-data-name",{"type":43,"tag":233,"props":563,"children":564},{"style":458},[565],{"type":49,"value":461},{"type":43,"tag":233,"props":567,"children":568},{"style":458},[569],{"type":49,"value":443},{"type":43,"tag":233,"props":571,"children":572},{"style":458},[573],{"type":49,"value":535},{"type":43,"tag":233,"props":575,"children":576},{"style":464},[577],{"type":49,"value":578},"DNA integrity number",{"type":43,"tag":233,"props":580,"children":581},{"style":458},[582],{"type":49,"value":461},{"type":43,"tag":233,"props":584,"children":585},{"style":458},[586],{"type":49,"value":549},{"type":43,"tag":233,"props":588,"children":589},{"class":235,"line":273},[590,594,599,603,607,612,616,622,626,630,635,640,644,649,653,657,661,666,670],{"type":43,"tag":233,"props":591,"children":592},{"style":458},[593],{"type":49,"value":516},{"type":43,"tag":233,"props":595,"children":596},{"style":519},[597],{"type":49,"value":598},"calculated-result",{"type":43,"tag":233,"props":600,"children":601},{"style":458},[602],{"type":49,"value":461},{"type":43,"tag":233,"props":604,"children":605},{"style":458},[606],{"type":49,"value":443},{"type":43,"tag":233,"props":608,"children":609},{"style":458},[610],{"type":49,"value":611}," {",{"type":43,"tag":233,"props":613,"children":614},{"style":458},[615],{"type":49,"value":461},{"type":43,"tag":233,"props":617,"children":619},{"style":618},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[620],{"type":49,"value":621},"value",{"type":43,"tag":233,"props":623,"children":624},{"style":458},[625],{"type":49,"value":461},{"type":43,"tag":233,"props":627,"children":628},{"style":458},[629],{"type":49,"value":443},{"type":43,"tag":233,"props":631,"children":632},{"style":618},[633],{"type":49,"value":634}," 9.5",{"type":43,"tag":233,"props":636,"children":637},{"style":458},[638],{"type":49,"value":639},",",{"type":43,"tag":233,"props":641,"children":642},{"style":458},[643],{"type":49,"value":535},{"type":43,"tag":233,"props":645,"children":646},{"style":618},[647],{"type":49,"value":648},"unit",{"type":43,"tag":233,"props":650,"children":651},{"style":458},[652],{"type":49,"value":461},{"type":43,"tag":233,"props":654,"children":655},{"style":458},[656],{"type":49,"value":443},{"type":43,"tag":233,"props":658,"children":659},{"style":458},[660],{"type":49,"value":535},{"type":43,"tag":233,"props":662,"children":663},{"style":464},[664],{"type":49,"value":665},"(unitless)",{"type":43,"tag":233,"props":667,"children":668},{"style":458},[669],{"type":49,"value":461},{"type":43,"tag":233,"props":671,"children":672},{"style":458},[673],{"type":49,"value":674},"},\n",{"type":43,"tag":233,"props":676,"children":677},{"class":235,"line":282},[678,682,686,690,694],{"type":43,"tag":233,"props":679,"children":680},{"style":458},[681],{"type":49,"value":516},{"type":43,"tag":233,"props":683,"children":684},{"style":519},[685],{"type":49,"value":441},{"type":43,"tag":233,"props":687,"children":688},{"style":458},[689],{"type":49,"value":461},{"type":43,"tag":233,"props":691,"children":692},{"style":458},[693],{"type":49,"value":443},{"type":43,"tag":233,"props":695,"children":696},{"style":458},[697],{"type":49,"value":698}," {\n",{"type":43,"tag":233,"props":700,"children":701},{"class":235,"line":291},[702,707,712,716,720],{"type":43,"tag":233,"props":703,"children":704},{"style":458},[705],{"type":49,"value":706},"      \"",{"type":43,"tag":233,"props":708,"children":709},{"style":618},[710],{"type":49,"value":711},"data-source-document",{"type":43,"tag":233,"props":713,"children":714},{"style":458},[715],{"type":49,"value":461},{"type":43,"tag":233,"props":717,"children":718},{"style":458},[719],{"type":49,"value":443},{"type":43,"tag":233,"props":721,"children":722},{"style":458},[723],{"type":49,"value":508},{"type":43,"tag":233,"props":725,"children":726},{"class":235,"line":299},[727,732,738,742,746,750,755,759],{"type":43,"tag":233,"props":728,"children":729},{"style":458},[730],{"type":49,"value":731},"        \"",{"type":43,"tag":233,"props":733,"children":735},{"style":734},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[736],{"type":49,"value":737},"data-source-identifier",{"type":43,"tag":233,"props":739,"children":740},{"style":458},[741],{"type":49,"value":461},{"type":43,"tag":233,"props":743,"children":744},{"style":458},[745],{"type":49,"value":443},{"type":43,"tag":233,"props":747,"children":748},{"style":458},[749],{"type":49,"value":535},{"type":43,"tag":233,"props":751,"children":752},{"style":464},[753],{"type":49,"value":754},"SAMPLE_B1_MEASUREMENT",{"type":43,"tag":233,"props":756,"children":757},{"style":458},[758],{"type":49,"value":461},{"type":43,"tag":233,"props":760,"children":761},{"style":458},[762],{"type":49,"value":549},{"type":43,"tag":233,"props":764,"children":765},{"class":235,"line":308},[766,770,775,779,783,787,792],{"type":43,"tag":233,"props":767,"children":768},{"style":458},[769],{"type":49,"value":731},{"type":43,"tag":233,"props":771,"children":772},{"style":734},[773],{"type":49,"value":774},"data-source-feature",{"type":43,"tag":233,"props":776,"children":777},{"style":458},[778],{"type":49,"value":461},{"type":43,"tag":233,"props":780,"children":781},{"style":458},[782],{"type":49,"value":443},{"type":43,"tag":233,"props":784,"children":785},{"style":458},[786],{"type":49,"value":535},{"type":43,"tag":233,"props":788,"children":789},{"style":464},[790],{"type":49,"value":791},"electrophoresis trace",{"type":43,"tag":233,"props":793,"children":794},{"style":458},[795],{"type":49,"value":796},"\"\n",{"type":43,"tag":233,"props":798,"children":800},{"class":235,"line":799},10,[801],{"type":43,"tag":233,"props":802,"children":803},{"style":458},[804],{"type":49,"value":805},"      }]\n",{"type":43,"tag":233,"props":807,"children":809},{"class":235,"line":808},11,[810],{"type":43,"tag":233,"props":811,"children":812},{"style":458},[813],{"type":49,"value":814},"    }\n",{"type":43,"tag":233,"props":816,"children":818},{"class":235,"line":817},12,[819],{"type":43,"tag":233,"props":820,"children":821},{"style":458},[822],{"type":49,"value":823},"  }]\n",{"type":43,"tag":233,"props":825,"children":827},{"class":235,"line":826},13,[828],{"type":43,"tag":233,"props":829,"children":830},{"style":458},[831],{"type":49,"value":832},"}\n",{"type":43,"tag":52,"props":834,"children":835},{},[836],{"type":43,"tag":65,"props":837,"children":838},{},[839],{"type":49,"value":840},"Common calculated fields by instrument type:",{"type":43,"tag":842,"props":843,"children":844},"table",{},[845,864],{"type":43,"tag":846,"props":847,"children":848},"thead",{},[849],{"type":43,"tag":850,"props":851,"children":852},"tr",{},[853,859],{"type":43,"tag":854,"props":855,"children":856},"th",{},[857],{"type":49,"value":858},"Instrument",{"type":43,"tag":854,"props":860,"children":861},{},[862],{"type":49,"value":863},"Calculated Fields",{"type":43,"tag":865,"props":866,"children":867},"tbody",{},[868,882,895,908,921],{"type":43,"tag":850,"props":869,"children":870},{},[871,877],{"type":43,"tag":872,"props":873,"children":874},"td",{},[875],{"type":49,"value":876},"Cell counter",{"type":43,"tag":872,"props":878,"children":879},{},[880],{"type":49,"value":881},"Viability %, cell density dilution-adjusted values",{"type":43,"tag":850,"props":883,"children":884},{},[885,890],{"type":43,"tag":872,"props":886,"children":887},{},[888],{"type":49,"value":889},"Spectrophotometer",{"type":43,"tag":872,"props":891,"children":892},{},[893],{"type":49,"value":894},"Concentration (from absorbance), 260\u002F280 ratio",{"type":43,"tag":850,"props":896,"children":897},{},[898,903],{"type":43,"tag":872,"props":899,"children":900},{},[901],{"type":49,"value":902},"Plate reader",{"type":43,"tag":872,"props":904,"children":905},{},[906],{"type":49,"value":907},"Concentrations from standard curve, %CV",{"type":43,"tag":850,"props":909,"children":910},{},[911,916],{"type":43,"tag":872,"props":912,"children":913},{},[914],{"type":49,"value":915},"Electrophoresis",{"type":43,"tag":872,"props":917,"children":918},{},[919],{"type":49,"value":920},"DIN\u002FRIN, region concentrations, average sizes",{"type":43,"tag":850,"props":922,"children":923},{},[924,929],{"type":43,"tag":872,"props":925,"children":926},{},[927],{"type":49,"value":928},"qPCR",{"type":43,"tag":872,"props":930,"children":931},{},[932],{"type":49,"value":933},"Relative quantities, fold change",{"type":43,"tag":52,"props":935,"children":936},{},[937,939,944],{"type":49,"value":938},"See ",{"type":43,"tag":94,"props":940,"children":942},{"className":941},[],[943],{"type":49,"value":212},{"type":49,"value":945}," for detailed guidance on raw vs. calculated classification.",{"type":43,"tag":126,"props":947,"children":949},{"id":948},"validation",[950],{"type":49,"value":951},"Validation",{"type":43,"tag":52,"props":953,"children":954},{},[955],{"type":49,"value":956},"Always validate ASM output before delivering to the user:",{"type":43,"tag":222,"props":958,"children":962},{"className":959,"code":960,"language":961,"meta":227,"style":227},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","python scripts\u002Fvalidate_asm.py output.json\npython scripts\u002Fvalidate_asm.py output.json --reference known_good.json  # Compare to reference\npython scripts\u002Fvalidate_asm.py output.json --strict  # Treat warnings as errors\n","bash",[963],{"type":43,"tag":94,"props":964,"children":965},{"__ignoreMap":227},[966,983,1015],{"type":43,"tag":233,"props":967,"children":968},{"class":235,"line":236},[969,973,978],{"type":43,"tag":233,"props":970,"children":971},{"style":519},[972],{"type":49,"value":226},{"type":43,"tag":233,"props":974,"children":975},{"style":464},[976],{"type":49,"value":977}," scripts\u002Fvalidate_asm.py",{"type":43,"tag":233,"props":979,"children":980},{"style":464},[981],{"type":49,"value":982}," output.json\n",{"type":43,"tag":233,"props":984,"children":985},{"class":235,"line":245},[986,990,994,999,1004,1009],{"type":43,"tag":233,"props":987,"children":988},{"style":519},[989],{"type":49,"value":226},{"type":43,"tag":233,"props":991,"children":992},{"style":464},[993],{"type":49,"value":977},{"type":43,"tag":233,"props":995,"children":996},{"style":464},[997],{"type":49,"value":998}," output.json",{"type":43,"tag":233,"props":1000,"children":1001},{"style":464},[1002],{"type":49,"value":1003}," --reference",{"type":43,"tag":233,"props":1005,"children":1006},{"style":464},[1007],{"type":49,"value":1008}," known_good.json",{"type":43,"tag":233,"props":1010,"children":1012},{"style":1011},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1013],{"type":49,"value":1014},"  # Compare to reference\n",{"type":43,"tag":233,"props":1016,"children":1017},{"class":235,"line":254},[1018,1022,1026,1030,1035],{"type":43,"tag":233,"props":1019,"children":1020},{"style":519},[1021],{"type":49,"value":226},{"type":43,"tag":233,"props":1023,"children":1024},{"style":464},[1025],{"type":49,"value":977},{"type":43,"tag":233,"props":1027,"children":1028},{"style":464},[1029],{"type":49,"value":998},{"type":43,"tag":233,"props":1031,"children":1032},{"style":464},[1033],{"type":49,"value":1034}," --strict",{"type":43,"tag":233,"props":1036,"children":1037},{"style":1011},[1038],{"type":49,"value":1039},"  # Treat warnings as errors\n",{"type":43,"tag":52,"props":1041,"children":1042},{},[1043],{"type":43,"tag":65,"props":1044,"children":1045},{},[1046],{"type":49,"value":1047},"Validation Rules:",{"type":43,"tag":84,"props":1049,"children":1050},{},[1051,1056,1061],{"type":43,"tag":88,"props":1052,"children":1053},{},[1054],{"type":49,"value":1055},"Based on Allotrope ASM specification (December 2024)",{"type":43,"tag":88,"props":1057,"children":1058},{},[1059],{"type":49,"value":1060},"Last updated: 2026-01-07",{"type":43,"tag":88,"props":1062,"children":1063},{},[1064,1066],{"type":49,"value":1065},"Source: ",{"type":43,"tag":1067,"props":1068,"children":1072},"a",{"href":1069,"rel":1070},"https:\u002F\u002Fgitlab.com\u002Fallotrope-public\u002Fasm",[1071],"nofollow",[1073],{"type":49,"value":1069},{"type":43,"tag":52,"props":1075,"children":1076},{},[1077,1082,1084,1089,1091,1097],{"type":43,"tag":65,"props":1078,"children":1079},{},[1080],{"type":49,"value":1081},"Soft Validation Approach:",{"type":49,"value":1083},"\nUnknown techniques, units, or sample roles generate ",{"type":43,"tag":65,"props":1085,"children":1086},{},[1087],{"type":49,"value":1088},"warnings",{"type":49,"value":1090}," (not errors) to allow for forward compatibility. If Allotrope adds new values after December 2024, the validator won't block them—it will flag them for manual verification. Use ",{"type":43,"tag":94,"props":1092,"children":1094},{"className":1093},[],[1095],{"type":49,"value":1096},"--strict",{"type":49,"value":1098}," mode to treat warnings as errors if you need stricter validation.",{"type":43,"tag":52,"props":1100,"children":1101},{},[1102],{"type":43,"tag":65,"props":1103,"children":1104},{},[1105],{"type":49,"value":1106},"What it checks:",{"type":43,"tag":84,"props":1108,"children":1109},{},[1110,1115,1120,1132,1137,1142],{"type":43,"tag":88,"props":1111,"children":1112},{},[1113],{"type":49,"value":1114},"Correct technique selection (e.g., multi-analyte profiling vs plate reader)",{"type":43,"tag":88,"props":1116,"children":1117},{},[1118],{"type":49,"value":1119},"Field naming conventions (space-separated, not hyphenated)",{"type":43,"tag":88,"props":1121,"children":1122},{},[1123,1125,1130],{"type":49,"value":1124},"Calculated data has traceability (",{"type":43,"tag":94,"props":1126,"children":1128},{"className":1127},[],[1129],{"type":49,"value":441},{"type":49,"value":1131},")",{"type":43,"tag":88,"props":1133,"children":1134},{},[1135],{"type":49,"value":1136},"Unique identifiers exist for measurements and calculated values",{"type":43,"tag":88,"props":1138,"children":1139},{},[1140],{"type":49,"value":1141},"Required metadata present",{"type":43,"tag":88,"props":1143,"children":1144},{},[1145],{"type":49,"value":1146},"Valid units and sample roles (with soft validation for unknown values)",{"type":43,"tag":126,"props":1148,"children":1150},{"id":1149},"supported-instruments",[1151],{"type":49,"value":1152},"Supported Instruments",{"type":43,"tag":52,"props":1154,"children":1155},{},[1156,1157,1163],{"type":49,"value":938},{"type":43,"tag":94,"props":1158,"children":1160},{"className":1159},[],[1161],{"type":49,"value":1162},"references\u002Fsupported_instruments.md",{"type":49,"value":1164}," for complete list. Key instruments:",{"type":43,"tag":842,"props":1166,"children":1167},{},[1168,1184],{"type":43,"tag":846,"props":1169,"children":1170},{},[1171],{"type":43,"tag":850,"props":1172,"children":1173},{},[1174,1179],{"type":43,"tag":854,"props":1175,"children":1176},{},[1177],{"type":49,"value":1178},"Category",{"type":43,"tag":854,"props":1180,"children":1181},{},[1182],{"type":49,"value":1183},"Instruments",{"type":43,"tag":865,"props":1185,"children":1186},{},[1187,1200,1213,1226,1239,1251],{"type":43,"tag":850,"props":1188,"children":1189},{},[1190,1195],{"type":43,"tag":872,"props":1191,"children":1192},{},[1193],{"type":49,"value":1194},"Cell Counting",{"type":43,"tag":872,"props":1196,"children":1197},{},[1198],{"type":49,"value":1199},"Vi-CELL BLU, Vi-CELL XR, NucleoCounter",{"type":43,"tag":850,"props":1201,"children":1202},{},[1203,1208],{"type":43,"tag":872,"props":1204,"children":1205},{},[1206],{"type":49,"value":1207},"Spectrophotometry",{"type":43,"tag":872,"props":1209,"children":1210},{},[1211],{"type":49,"value":1212},"NanoDrop One\u002FEight\u002F8000, Lunatic",{"type":43,"tag":850,"props":1214,"children":1215},{},[1216,1221],{"type":43,"tag":872,"props":1217,"children":1218},{},[1219],{"type":49,"value":1220},"Plate Readers",{"type":43,"tag":872,"props":1222,"children":1223},{},[1224],{"type":49,"value":1225},"SoftMax Pro, EnVision, Gen5, CLARIOstar",{"type":43,"tag":850,"props":1227,"children":1228},{},[1229,1234],{"type":43,"tag":872,"props":1230,"children":1231},{},[1232],{"type":49,"value":1233},"ELISA",{"type":43,"tag":872,"props":1235,"children":1236},{},[1237],{"type":49,"value":1238},"SoftMax Pro, BMG MARS, MSD Workbench",{"type":43,"tag":850,"props":1240,"children":1241},{},[1242,1246],{"type":43,"tag":872,"props":1243,"children":1244},{},[1245],{"type":49,"value":928},{"type":43,"tag":872,"props":1247,"children":1248},{},[1249],{"type":49,"value":1250},"QuantStudio, Bio-Rad CFX",{"type":43,"tag":850,"props":1252,"children":1253},{},[1254,1259],{"type":43,"tag":872,"props":1255,"children":1256},{},[1257],{"type":49,"value":1258},"Chromatography",{"type":43,"tag":872,"props":1260,"children":1261},{},[1262],{"type":49,"value":1263},"Empower, Chromeleon",{"type":43,"tag":126,"props":1265,"children":1267},{"id":1266},"detection-parsing-strategy",[1268],{"type":49,"value":1269},"Detection & Parsing Strategy",{"type":43,"tag":1271,"props":1272,"children":1274},"h3",{"id":1273},"tier-1-native-allotropy-parsing-preferred",[1275],{"type":49,"value":1276},"Tier 1: Native allotropy parsing (PREFERRED)",{"type":43,"tag":52,"props":1278,"children":1279},{},[1280,1285],{"type":43,"tag":65,"props":1281,"children":1282},{},[1283],{"type":49,"value":1284},"Always try allotropy first.",{"type":49,"value":1286}," Check available vendors directly:",{"type":43,"tag":222,"props":1288,"children":1290},{"className":224,"code":1289,"language":226,"meta":227,"style":227},"from allotropy.parser_factory import Vendor\n\n# List all supported vendors\nfor v in Vendor:\n    print(f\"{v.name}\")\n\n# Common vendors:\n# AGILENT_TAPESTATION_ANALYSIS  (for TapeStation XML)\n# BECKMAN_VI_CELL_BLU\n# THERMO_FISHER_NANODROP_EIGHT\n# MOLDEV_SOFTMAX_PRO\n# APPBIO_QUANTSTUDIO\n# ... many more\n",[1291],{"type":43,"tag":94,"props":1292,"children":1293},{"__ignoreMap":227},[1294,1301,1308,1316,1324,1332,1339,1347,1355,1363,1371,1379,1387],{"type":43,"tag":233,"props":1295,"children":1296},{"class":235,"line":236},[1297],{"type":43,"tag":233,"props":1298,"children":1299},{},[1300],{"type":49,"value":279},{"type":43,"tag":233,"props":1302,"children":1303},{"class":235,"line":245},[1304],{"type":43,"tag":233,"props":1305,"children":1306},{"emptyLinePlaceholder":258},[1307],{"type":49,"value":261},{"type":43,"tag":233,"props":1309,"children":1310},{"class":235,"line":254},[1311],{"type":43,"tag":233,"props":1312,"children":1313},{},[1314],{"type":49,"value":1315},"# List all supported vendors\n",{"type":43,"tag":233,"props":1317,"children":1318},{"class":235,"line":264},[1319],{"type":43,"tag":233,"props":1320,"children":1321},{},[1322],{"type":49,"value":1323},"for v in Vendor:\n",{"type":43,"tag":233,"props":1325,"children":1326},{"class":235,"line":273},[1327],{"type":43,"tag":233,"props":1328,"children":1329},{},[1330],{"type":49,"value":1331},"    print(f\"{v.name}\")\n",{"type":43,"tag":233,"props":1333,"children":1334},{"class":235,"line":282},[1335],{"type":43,"tag":233,"props":1336,"children":1337},{"emptyLinePlaceholder":258},[1338],{"type":49,"value":261},{"type":43,"tag":233,"props":1340,"children":1341},{"class":235,"line":291},[1342],{"type":43,"tag":233,"props":1343,"children":1344},{},[1345],{"type":49,"value":1346},"# Common vendors:\n",{"type":43,"tag":233,"props":1348,"children":1349},{"class":235,"line":299},[1350],{"type":43,"tag":233,"props":1351,"children":1352},{},[1353],{"type":49,"value":1354},"# AGILENT_TAPESTATION_ANALYSIS  (for TapeStation XML)\n",{"type":43,"tag":233,"props":1356,"children":1357},{"class":235,"line":308},[1358],{"type":43,"tag":233,"props":1359,"children":1360},{},[1361],{"type":49,"value":1362},"# BECKMAN_VI_CELL_BLU\n",{"type":43,"tag":233,"props":1364,"children":1365},{"class":235,"line":799},[1366],{"type":43,"tag":233,"props":1367,"children":1368},{},[1369],{"type":49,"value":1370},"# THERMO_FISHER_NANODROP_EIGHT\n",{"type":43,"tag":233,"props":1372,"children":1373},{"class":235,"line":808},[1374],{"type":43,"tag":233,"props":1375,"children":1376},{},[1377],{"type":49,"value":1378},"# MOLDEV_SOFTMAX_PRO\n",{"type":43,"tag":233,"props":1380,"children":1381},{"class":235,"line":817},[1382],{"type":43,"tag":233,"props":1383,"children":1384},{},[1385],{"type":49,"value":1386},"# APPBIO_QUANTSTUDIO\n",{"type":43,"tag":233,"props":1388,"children":1389},{"class":235,"line":826},[1390],{"type":43,"tag":233,"props":1391,"children":1392},{},[1393],{"type":49,"value":1394},"# ... many more\n",{"type":43,"tag":52,"props":1396,"children":1397},{},[1398,1403,1405,1411],{"type":43,"tag":65,"props":1399,"children":1400},{},[1401],{"type":49,"value":1402},"When the user provides a file, check if allotropy supports it before falling back to manual parsing.",{"type":49,"value":1404}," The ",{"type":43,"tag":94,"props":1406,"children":1408},{"className":1407},[],[1409],{"type":49,"value":1410},"scripts\u002Fconvert_to_asm.py",{"type":49,"value":1412}," auto-detection only covers a subset of allotropy vendors.",{"type":43,"tag":1271,"props":1414,"children":1416},{"id":1415},"tier-2-flexible-fallback-parsing",[1417],{"type":49,"value":1418},"Tier 2: Flexible fallback parsing",{"type":43,"tag":52,"props":1420,"children":1421},{},[1422,1427],{"type":43,"tag":65,"props":1423,"children":1424},{},[1425],{"type":49,"value":1426},"Only use if allotropy doesn't support the instrument.",{"type":49,"value":1428}," This fallback:",{"type":43,"tag":84,"props":1430,"children":1431},{},[1432,1442,1447],{"type":43,"tag":88,"props":1433,"children":1434},{},[1435,1437],{"type":49,"value":1436},"Does NOT generate ",{"type":43,"tag":94,"props":1438,"children":1440},{"className":1439},[],[1441],{"type":49,"value":428},{"type":43,"tag":88,"props":1443,"children":1444},{},[1445],{"type":49,"value":1446},"Does NOT include full traceability",{"type":43,"tag":88,"props":1448,"children":1449},{},[1450],{"type":49,"value":1451},"Produces simplified ASM structure",{"type":43,"tag":52,"props":1453,"children":1454},{},[1455],{"type":49,"value":1456},"Use flexible parser with:",{"type":43,"tag":84,"props":1458,"children":1459},{},[1460,1465,1470],{"type":43,"tag":88,"props":1461,"children":1462},{},[1463],{"type":49,"value":1464},"Column name fuzzy matching",{"type":43,"tag":88,"props":1466,"children":1467},{},[1468],{"type":49,"value":1469},"Unit extraction from headers",{"type":43,"tag":88,"props":1471,"children":1472},{},[1473],{"type":49,"value":1474},"Metadata extraction from file structure",{"type":43,"tag":1271,"props":1476,"children":1478},{"id":1477},"tier-3-pdf-extraction",[1479],{"type":49,"value":1480},"Tier 3: PDF extraction",{"type":43,"tag":52,"props":1482,"children":1483},{},[1484],{"type":49,"value":1485},"For PDF-only files, extract tables using pdfplumber, then apply Tier 2 parsing.",{"type":43,"tag":126,"props":1487,"children":1489},{"id":1488},"pre-parsing-checklist",[1490],{"type":49,"value":1491},"Pre-Parsing Checklist",{"type":43,"tag":52,"props":1493,"children":1494},{},[1495],{"type":49,"value":1496},"Before writing a custom parser, ALWAYS:",{"type":43,"tag":133,"props":1498,"children":1499},{},[1500,1510,1528,1543],{"type":43,"tag":88,"props":1501,"children":1502},{},[1503,1508],{"type":43,"tag":65,"props":1504,"children":1505},{},[1506],{"type":49,"value":1507},"Check if allotropy supports it",{"type":49,"value":1509}," - Use native parser if available",{"type":43,"tag":88,"props":1511,"children":1512},{},[1513,1518,1520,1526],{"type":43,"tag":65,"props":1514,"children":1515},{},[1516],{"type":49,"value":1517},"Find a reference ASM file",{"type":49,"value":1519}," - Check ",{"type":43,"tag":94,"props":1521,"children":1523},{"className":1522},[],[1524],{"type":49,"value":1525},"references\u002Fexamples\u002F",{"type":49,"value":1527}," or ask user",{"type":43,"tag":88,"props":1529,"children":1530},{},[1531,1536,1537],{"type":43,"tag":65,"props":1532,"children":1533},{},[1534],{"type":49,"value":1535},"Review instrument-specific guide",{"type":49,"value":1519},{"type":43,"tag":94,"props":1538,"children":1540},{"className":1539},[],[1541],{"type":49,"value":1542},"references\u002Finstrument_guides\u002F",{"type":43,"tag":88,"props":1544,"children":1545},{},[1546,1551,1553],{"type":43,"tag":65,"props":1547,"children":1548},{},[1549],{"type":49,"value":1550},"Validate against reference",{"type":49,"value":1552}," - Run ",{"type":43,"tag":94,"props":1554,"children":1556},{"className":1555},[],[1557],{"type":49,"value":1558},"validate_asm.py --reference \u003Cfile>",{"type":43,"tag":126,"props":1560,"children":1562},{"id":1561},"common-mistakes-to-avoid",[1563],{"type":49,"value":1564},"Common Mistakes to Avoid",{"type":43,"tag":842,"props":1566,"children":1567},{},[1568,1584],{"type":43,"tag":846,"props":1569,"children":1570},{},[1571],{"type":43,"tag":850,"props":1572,"children":1573},{},[1574,1579],{"type":43,"tag":854,"props":1575,"children":1576},{},[1577],{"type":49,"value":1578},"Mistake",{"type":43,"tag":854,"props":1580,"children":1581},{},[1582],{"type":49,"value":1583},"Correct Approach",{"type":43,"tag":865,"props":1585,"children":1586},{},[1587,1600,1613,1626,1639],{"type":43,"tag":850,"props":1588,"children":1589},{},[1590,1595],{"type":43,"tag":872,"props":1591,"children":1592},{},[1593],{"type":49,"value":1594},"Manifest as object",{"type":43,"tag":872,"props":1596,"children":1597},{},[1598],{"type":49,"value":1599},"Use URL string",{"type":43,"tag":850,"props":1601,"children":1602},{},[1603,1608],{"type":43,"tag":872,"props":1604,"children":1605},{},[1606],{"type":49,"value":1607},"Lowercase detection types",{"type":43,"tag":872,"props":1609,"children":1610},{},[1611],{"type":49,"value":1612},"Use \"Absorbance\" not \"absorbance\"",{"type":43,"tag":850,"props":1614,"children":1615},{},[1616,1621],{"type":43,"tag":872,"props":1617,"children":1618},{},[1619],{"type":49,"value":1620},"\"emission wavelength setting\"",{"type":43,"tag":872,"props":1622,"children":1623},{},[1624],{"type":49,"value":1625},"Use \"detector wavelength setting\" for emission",{"type":43,"tag":850,"props":1627,"children":1628},{},[1629,1634],{"type":43,"tag":872,"props":1630,"children":1631},{},[1632],{"type":49,"value":1633},"All measurements in one document",{"type":43,"tag":872,"props":1635,"children":1636},{},[1637],{"type":49,"value":1638},"Group by well\u002Fsample location",{"type":43,"tag":850,"props":1640,"children":1641},{},[1642,1647],{"type":43,"tag":872,"props":1643,"children":1644},{},[1645],{"type":49,"value":1646},"Missing procedure metadata",{"type":43,"tag":872,"props":1648,"children":1649},{},[1650],{"type":49,"value":1651},"Extract ALL device settings per measurement",{"type":43,"tag":126,"props":1653,"children":1655},{"id":1654},"code-export-for-data-engineers",[1656],{"type":49,"value":1657},"Code Export for Data Engineers",{"type":43,"tag":52,"props":1659,"children":1660},{},[1661],{"type":49,"value":1662},"Generate standalone Python scripts that scientists can hand off:",{"type":43,"tag":222,"props":1664,"children":1666},{"className":224,"code":1665,"language":226,"meta":227,"style":227},"# Export parser code\npython scripts\u002Fexport_parser.py --input \"data.csv\" --vendor \"VI_CELL_BLU\" --output \"parser_script.py\"\n",[1667],{"type":43,"tag":94,"props":1668,"children":1669},{"__ignoreMap":227},[1670,1678],{"type":43,"tag":233,"props":1671,"children":1672},{"class":235,"line":236},[1673],{"type":43,"tag":233,"props":1674,"children":1675},{},[1676],{"type":49,"value":1677},"# Export parser code\n",{"type":43,"tag":233,"props":1679,"children":1680},{"class":235,"line":245},[1681],{"type":43,"tag":233,"props":1682,"children":1683},{},[1684],{"type":49,"value":1685},"python scripts\u002Fexport_parser.py --input \"data.csv\" --vendor \"VI_CELL_BLU\" --output \"parser_script.py\"\n",{"type":43,"tag":52,"props":1687,"children":1688},{},[1689],{"type":49,"value":1690},"The exported script:",{"type":43,"tag":84,"props":1692,"children":1693},{},[1694,1699,1704,1709],{"type":43,"tag":88,"props":1695,"children":1696},{},[1697],{"type":49,"value":1698},"Has no external dependencies beyond pandas\u002Fallotropy",{"type":43,"tag":88,"props":1700,"children":1701},{},[1702],{"type":49,"value":1703},"Includes inline documentation",{"type":43,"tag":88,"props":1705,"children":1706},{},[1707],{"type":49,"value":1708},"Can run in Jupyter notebooks",{"type":43,"tag":88,"props":1710,"children":1711},{},[1712],{"type":49,"value":1713},"Is production-ready for data pipelines",{"type":43,"tag":126,"props":1715,"children":1717},{"id":1716},"file-structure",[1718],{"type":49,"value":1719},"File Structure",{"type":43,"tag":222,"props":1721,"children":1725},{"className":1722,"code":1724,"language":49},[1723],"language-text","instrument-data-to-allotrope\u002F\n├── SKILL.md                          # This file\n├── scripts\u002F\n│   ├── convert_to_asm.py            # Main conversion script\n│   ├── flatten_asm.py               # ASM → 2D CSV conversion\n│   ├── export_parser.py             # Generate standalone parser code\n│   └── validate_asm.py              # Validate ASM output quality\n└── references\u002F\n    ├── supported_instruments.md     # Full instrument list with Vendor enums\n    ├── asm_schema_overview.md       # ASM structure reference\n    ├── field_classification_guide.md # Where to put different field types\n    └── flattening_guide.md          # How flattening works\n",[1726],{"type":43,"tag":94,"props":1727,"children":1728},{"__ignoreMap":227},[1729],{"type":49,"value":1724},{"type":43,"tag":126,"props":1731,"children":1733},{"id":1732},"usage-examples",[1734],{"type":49,"value":1735},"Usage Examples",{"type":43,"tag":1271,"props":1737,"children":1739},{"id":1738},"example-1-vi-cell-blu-file",[1740],{"type":49,"value":1741},"Example 1: Vi-CELL BLU file",{"type":43,"tag":222,"props":1743,"children":1746},{"className":1744,"code":1745,"language":49},[1723],"User: \"Convert this cell counting data to Allotrope format\"\n[uploads viCell_Results.xlsx]\n\nClaude:\n1. Detects Vi-CELL BLU (95% confidence)\n2. Converts using allotropy native parser\n3. Outputs:\n   - viCell_Results_asm.json (full ASM)\n   - viCell_Results_flat.csv (2D format)\n   - viCell_parser.py (exportable code)\n",[1747],{"type":43,"tag":94,"props":1748,"children":1749},{"__ignoreMap":227},[1750],{"type":49,"value":1745},{"type":43,"tag":1271,"props":1752,"children":1754},{"id":1753},"example-2-request-for-code-handoff",[1755],{"type":49,"value":1756},"Example 2: Request for code handoff",{"type":43,"tag":222,"props":1758,"children":1761},{"className":1759,"code":1760,"language":49},[1723],"User: \"I need to give our data engineer code to parse NanoDrop files\"\n\nClaude:\n1. Generates self-contained Python script\n2. Includes sample input\u002Foutput\n3. Documents all assumptions\n4. Provides Jupyter notebook version\n",[1762],{"type":43,"tag":94,"props":1763,"children":1764},{"__ignoreMap":227},[1765],{"type":49,"value":1760},{"type":43,"tag":1271,"props":1767,"children":1769},{"id":1768},"example-3-lims-ready-flattened-output",[1770],{"type":49,"value":1771},"Example 3: LIMS-ready flattened output",{"type":43,"tag":222,"props":1773,"children":1776},{"className":1774,"code":1775,"language":49},[1723],"User: \"Convert this ELISA data to a CSV I can upload to our LIMS\"\n\nClaude:\n1. Parses plate reader data\n2. Generates flattened CSV with columns:\n   - sample_identifier, well_position, measurement_value, measurement_unit\n   - instrument_serial_number, analysis_datetime, assay_type\n3. Validates against common LIMS import requirements\n",[1777],{"type":43,"tag":94,"props":1778,"children":1779},{"__ignoreMap":227},[1780],{"type":49,"value":1775},{"type":43,"tag":126,"props":1782,"children":1784},{"id":1783},"implementation-notes",[1785],{"type":49,"value":1786},"Implementation Notes",{"type":43,"tag":1271,"props":1788,"children":1790},{"id":1789},"installing-allotropy",[1791],{"type":49,"value":1792},"Installing allotropy",{"type":43,"tag":222,"props":1794,"children":1796},{"className":959,"code":1795,"language":961,"meta":227,"style":227},"pip install allotropy --break-system-packages\n",[1797],{"type":43,"tag":94,"props":1798,"children":1799},{"__ignoreMap":227},[1800],{"type":43,"tag":233,"props":1801,"children":1802},{"class":235,"line":236},[1803,1808,1813,1818],{"type":43,"tag":233,"props":1804,"children":1805},{"style":519},[1806],{"type":49,"value":1807},"pip",{"type":43,"tag":233,"props":1809,"children":1810},{"style":464},[1811],{"type":49,"value":1812}," install",{"type":43,"tag":233,"props":1814,"children":1815},{"style":464},[1816],{"type":49,"value":1817}," allotropy",{"type":43,"tag":233,"props":1819,"children":1820},{"style":464},[1821],{"type":49,"value":1822}," --break-system-packages\n",{"type":43,"tag":1271,"props":1824,"children":1826},{"id":1825},"handling-parse-failures",[1827],{"type":49,"value":1828},"Handling parse failures",{"type":43,"tag":52,"props":1830,"children":1831},{},[1832],{"type":49,"value":1833},"If allotropy native parsing fails:",{"type":43,"tag":133,"props":1835,"children":1836},{},[1837,1842,1847,1852],{"type":43,"tag":88,"props":1838,"children":1839},{},[1840],{"type":49,"value":1841},"Log the error for debugging",{"type":43,"tag":88,"props":1843,"children":1844},{},[1845],{"type":49,"value":1846},"Fall back to flexible parser",{"type":43,"tag":88,"props":1848,"children":1849},{},[1850],{"type":49,"value":1851},"Report reduced metadata completeness to user",{"type":43,"tag":88,"props":1853,"children":1854},{},[1855],{"type":49,"value":1856},"Suggest exporting different format from instrument",{"type":43,"tag":1271,"props":1858,"children":1860},{"id":1859},"asm-schema-validation",[1861],{"type":49,"value":1862},"ASM Schema Validation",{"type":43,"tag":52,"props":1864,"children":1865},{},[1866],{"type":49,"value":1867},"Validate output against Allotrope schemas when available:",{"type":43,"tag":222,"props":1869,"children":1871},{"className":224,"code":1870,"language":226,"meta":227,"style":227},"import jsonschema\n# Schema URLs in references\u002Fasm_schema_overview.md\n",[1872],{"type":43,"tag":94,"props":1873,"children":1874},{"__ignoreMap":227},[1875,1883],{"type":43,"tag":233,"props":1876,"children":1877},{"class":235,"line":236},[1878],{"type":43,"tag":233,"props":1879,"children":1880},{},[1881],{"type":49,"value":1882},"import jsonschema\n",{"type":43,"tag":233,"props":1884,"children":1885},{"class":235,"line":245},[1886],{"type":43,"tag":233,"props":1887,"children":1888},{},[1889],{"type":49,"value":1890},"# Schema URLs in references\u002Fasm_schema_overview.md\n",{"type":43,"tag":1892,"props":1893,"children":1894},"style",{},[1895],{"type":49,"value":1896},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1898,"total":2085},[1899,1920,1934,1946,1965,1978,1999,2019,2033,2048,2056,2069],{"slug":1900,"name":1900,"fn":1901,"description":1902,"org":1903,"tags":1904,"stars":1917,"repoUrl":1918,"updatedAt":1919},"algorithmic-art","create algorithmic art with p5.js","Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1905,1908,1911,1914],{"name":1906,"slug":1907,"type":16},"Creative","creative",{"name":1909,"slug":1910,"type":16},"Design","design",{"name":1912,"slug":1913,"type":16},"Generative Art","generative-art",{"name":1915,"slug":1916,"type":16},"JavaScript","javascript",161831,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fskills","2026-04-06T17:56:15.455818",{"slug":1921,"name":1921,"fn":1922,"description":1923,"org":1924,"tags":1925,"stars":1917,"repoUrl":1918,"updatedAt":1933},"brand-guidelines","apply Anthropic brand colors and typography","Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1926,1929,1930],{"name":1927,"slug":1928,"type":16},"Branding","branding",{"name":1909,"slug":1910,"type":16},{"name":1931,"slug":1932,"type":16},"Typography","typography","2026-04-06T17:56:05.042852",{"slug":1935,"name":1935,"fn":1936,"description":1937,"org":1938,"tags":1939,"stars":1917,"repoUrl":1918,"updatedAt":1945},"canvas-design","create posters and visual art as PNG or PDF","Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1940,1941,1942],{"name":1906,"slug":1907,"type":16},{"name":1909,"slug":1910,"type":16},{"name":1943,"slug":1944,"type":16},"PDF","pdf","2026-04-06T17:56:03.794732",{"slug":1947,"name":1947,"fn":1948,"description":1949,"org":1950,"tags":1951,"stars":1917,"repoUrl":1918,"updatedAt":1964},"claude-api","build apps with the Claude API","Reference for the Claude API \u002F Anthropic SDK — model ids, pricing, params, streaming, tool use, MCP, agents, caching, token counting, model migration.\nTRIGGER — read BEFORE opening the target file; don't skip because it \"looks like a one-liner\" — whenever: the prompt names Claude\u002FAnthropic in any form (Claude, Anthropic, Fable, Opus, Sonnet, Haiku, `anthropic`, `@anthropic-ai`, `claude-*`, `us.anthropic.*`, `[1m]`); the user asks about an LLM (pricing\u002Fmodel choice\u002Flimits\u002Fcaching) — never answer from memory; OR the task is LLM-shaped with provider unstated (agent\u002FMCP\u002Ftool-definition\u002Fmulti-agent\u002FRAG\u002FLLM-judge\u002Fcomputer-use; generate\u002Fsummarize\u002Fextract\u002Fclassify\u002Frewrite\u002Fconverse over NL; debugging refusals\u002Fcutoffs\u002Fstreaming\u002Ftool-calls\u002Ftokens).\nSKIP only when another provider is being worked on (overrides all triggers): OpenAI\u002FGPT\u002FGemini\u002FLlama\u002FMistral\u002FCohere\u002FOllama named in the query; OR `grep -rE 'openai|langchain_openai|google.generativeai|genai|mistralai|cohere|ollama'` over the project hits (run this grep FIRST if no provider named — don't Read the file).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1952,1955,1956,1959,1961],{"name":1953,"slug":1954,"type":16},"Agents","agents",{"name":9,"slug":8,"type":16},{"name":1957,"slug":1958,"type":16},"Anthropic SDK","anthropic-sdk",{"name":1960,"slug":1947,"type":16},"Claude API",{"name":1962,"slug":1963,"type":16},"LLM","llm","2026-07-28T05:36:08.213335",{"slug":1966,"name":1966,"fn":1967,"description":1968,"org":1969,"tags":1970,"stars":1917,"repoUrl":1918,"updatedAt":1977},"doc-coauthoring","co-author documentation and technical specs","Guide users through a structured workflow for co-authoring documentation. Use when user wants to write documentation, proposals, technical specs, decision docs, or similar structured content. This workflow helps users efficiently transfer context, refine content through iteration, and verify the doc works for readers. Trigger when user mentions writing docs, creating proposals, drafting specs, or similar documentation tasks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1971,1974],{"name":1972,"slug":1973,"type":16},"Documentation","documentation",{"name":1975,"slug":1976,"type":16},"Technical Writing","technical-writing","2026-04-06T17:56:14.18897",{"slug":1979,"name":1979,"fn":1980,"description":1981,"org":1982,"tags":1983,"stars":1917,"repoUrl":1918,"updatedAt":1998},"docx","create and edit Word documents","Use this skill whenever the user wants to create, read, edit, or manipulate Word documents (.docx files) or Word templates (.dotx files). Triggers include: any mention of 'Word doc', 'word document', '.docx', '.dotx', or requests to produce professional documents with formatting like tables of contents, headings, page numbers, or letterheads. Also use when extracting or reorganizing content from .docx or .dotx files, inserting or replacing images in documents, performing find-and-replace in Word files, working with tracked changes or comments, or converting content into a polished Word document. If the user asks for a 'report', 'memo', 'letter', 'template', or similar deliverable as a Word or .docx file, use this skill. Do NOT use for PDFs, spreadsheets, Google Docs, or general coding tasks unrelated to document generation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1984,1987,1989,1992,1995],{"name":1985,"slug":1986,"type":16},"Documents","documents",{"name":1988,"slug":1979,"type":16},"DOCX",{"name":1990,"slug":1991,"type":16},"Office","office",{"name":1993,"slug":1994,"type":16},"Templates","templates",{"name":1996,"slug":1997,"type":16},"Word","word","2026-07-18T05:16:23.136271",{"slug":2000,"name":2000,"fn":2001,"description":2002,"org":2003,"tags":2004,"stars":1917,"repoUrl":1918,"updatedAt":2018},"frontend-design","design production-grade frontend interfaces","Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2005,2006,2009,2012,2015],{"name":1909,"slug":1910,"type":16},{"name":2007,"slug":2008,"type":16},"Frontend","frontend",{"name":2010,"slug":2011,"type":16},"React","react",{"name":2013,"slug":2014,"type":16},"Tailwind CSS","tailwind-css",{"name":2016,"slug":2017,"type":16},"UI Components","ui-components","2026-04-06T17:56:16.723469",{"slug":2020,"name":2020,"fn":2021,"description":2022,"org":2023,"tags":2024,"stars":1917,"repoUrl":1918,"updatedAt":2032},"internal-comms","write internal company communications","A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2025,2028,2029],{"name":2026,"slug":2027,"type":16},"Communications","communications",{"name":1993,"slug":1994,"type":16},{"name":2030,"slug":2031,"type":16},"Writing","writing","2026-04-06T17:56:20.695522",{"slug":2034,"name":2034,"fn":2035,"description":2036,"org":2037,"tags":2038,"stars":1917,"repoUrl":1918,"updatedAt":2047},"mcp-builder","build MCP servers","Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node\u002FTypeScript (MCP SDK).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2039,2040,2043,2044],{"name":1953,"slug":1954,"type":16},{"name":2041,"slug":2042,"type":16},"API Development","api-development",{"name":1962,"slug":1963,"type":16},{"name":2045,"slug":2046,"type":16},"MCP","mcp","2026-04-06T17:56:10.357665",{"slug":1944,"name":1944,"fn":2049,"description":2050,"org":2051,"tags":2052,"stars":1917,"repoUrl":1918,"updatedAt":2055},"read edit and manipulate PDF files","Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text\u002Ftables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting\u002Fdecrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2053,2054],{"name":1985,"slug":1986,"type":16},{"name":1943,"slug":1944,"type":16},"2026-04-06T17:56:02.483316",{"slug":2057,"name":2057,"fn":2058,"description":2059,"org":2060,"tags":2061,"stars":1917,"repoUrl":1918,"updatedAt":2068},"pptx","create and edit PowerPoint presentations","Use this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an email or summary); editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates (.potx), layouts, speaker notes, or comments. Trigger whenever the user mentions \"deck,\" \"slides,\" \"presentation,\" or references a .pptx or .potx filename, regardless of what they plan to do with the content afterward. If a .pptx or .potx file needs to be opened, created, or touched, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2062,2065],{"name":2063,"slug":2064,"type":16},"PowerPoint","powerpoint",{"name":2066,"slug":2067,"type":16},"Presentations","presentations","2026-07-18T05:16:24.1471",{"slug":2070,"name":2070,"fn":2071,"description":2072,"org":2073,"tags":2074,"stars":1917,"repoUrl":1918,"updatedAt":2084},"skill-creator","create and optimize agent skills","Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2075,2076,2077,2080,2083],{"name":1953,"slug":1954,"type":16},{"name":1972,"slug":1973,"type":16},{"name":2078,"slug":2079,"type":16},"Evals","evals",{"name":2081,"slug":2082,"type":16},"Performance","performance",{"name":1975,"slug":1976,"type":16},"2026-04-19T06:45:40.804",490,{"items":2087,"total":282},[2088,2105,2112,2132,2143,2160],{"slug":2089,"name":2089,"fn":2090,"description":2091,"org":2092,"tags":2093,"stars":26,"repoUrl":27,"updatedAt":2104},"clinical-trial-protocol-skill","generate clinical trial protocols for FDA submissions","Generate clinical trial protocols for medical devices or drugs. This skill should be used when users say \"Create a clinical trial protocol\", \"Generate protocol for [device\u002Fdrug]\", \"Help me design a clinical study\", \"Research similar trials for [intervention]\", or when developing FDA submission documentation for investigational products.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2094,2097,2100,2101],{"name":2095,"slug":2096,"type":16},"Clinical Trials","clinical-trials",{"name":2098,"slug":2099,"type":16},"FDA","fda",{"name":18,"slug":19,"type":16},{"name":2102,"slug":2103,"type":16},"Regulatory Compliance","regulatory-compliance","2026-04-06T17:57:05.297219",{"slug":4,"name":4,"fn":5,"description":6,"org":2106,"tags":2107,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2108,2109,2110,2111],{"name":14,"slug":15,"type":16},{"name":21,"slug":22,"type":16},{"name":24,"slug":25,"type":16},{"name":18,"slug":19,"type":16},{"slug":2113,"name":2113,"fn":2114,"description":2115,"org":2116,"tags":2117,"stars":26,"repoUrl":27,"updatedAt":2131},"nextflow-development","run nf-core bioinformatics pipelines on sequencing data","Run nf-core bioinformatics pipelines (rnaseq, sarek, atacseq) on sequencing data. Use when analyzing RNA-seq, WGS\u002FWES, or ATAC-seq data—either local FASTQs or public datasets from GEO\u002FSRA. Triggers on nf-core, Nextflow, FASTQ analysis, variant calling, gene expression, differential expression, GEO reanalysis, GSE\u002FGSM\u002FSRR accessions, or samplesheet creation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2118,2121,2124,2125,2128],{"name":2119,"slug":2120,"type":16},"Bioinformatics","bioinformatics",{"name":2122,"slug":2123,"type":16},"Data Pipeline","data-pipeline",{"name":18,"slug":19,"type":16},{"name":2126,"slug":2127,"type":16},"Nextflow","nextflow",{"name":2129,"slug":2130,"type":16},"RNA-seq","rna-seq","2026-04-06T17:57:04.014571",{"slug":2133,"name":2133,"fn":2134,"description":2135,"org":2136,"tags":2137,"stars":26,"repoUrl":27,"updatedAt":2142},"scientific-problem-selection","guide scientific research problem selection","This skill should be used when scientists need help with research problem selection, project ideation, troubleshooting stuck projects, or strategic scientific decisions. Use this skill when users ask to pitch a new research idea, work through a project problem, evaluate project risks, plan research strategy, navigate decision trees, or get help choosing what scientific problem to work on. Typical requests include \"I have an idea for a project\", \"I'm stuck on my research\", \"help me evaluate this project\", \"what should I work on\", or \"I need strategic advice about my research\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2138,2139],{"name":18,"slug":19,"type":16},{"name":2140,"slug":2141,"type":16},"Research","research","2026-04-06T17:57:06.62424",{"slug":2144,"name":2144,"fn":2145,"description":2146,"org":2147,"tags":2148,"stars":26,"repoUrl":27,"updatedAt":2159},"scvi-tools","analyze single-cell data with scvi-tools","Deep learning for single-cell analysis using scvi-tools. This skill should be used when users need (1) data integration and batch correction with scVI\u002FscANVI, (2) ATAC-seq analysis with PeakVI, (3) CITE-seq multi-modal analysis with totalVI, (4) multiome RNA+ATAC analysis with MultiVI, (5) spatial transcriptomics deconvolution with DestVI, (6) label transfer and reference mapping with scANVI\u002FscArches, (7) RNA velocity with veloVI, or (8) any deep learning-based single-cell method. Triggers include mentions of scVI, scANVI, totalVI, PeakVI, MultiVI, DestVI, veloVI, sysVI, scArches, variational autoencoder, VAE, batch correction, data integration, multi-modal, CITE-seq, multiome, reference mapping, latent space.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2149,2150,2153,2154,2156],{"name":2119,"slug":2120,"type":16},{"name":2151,"slug":2152,"type":16},"Deep Learning","deep-learning",{"name":18,"slug":19,"type":16},{"name":2155,"slug":226,"type":16},"Python",{"name":2157,"slug":2158,"type":16},"Single-Cell","single-cell","2026-04-06T17:57:02.70437",{"slug":2161,"name":2161,"fn":2162,"description":2163,"org":2164,"tags":2165,"stars":26,"repoUrl":27,"updatedAt":2169},"single-cell-rna-qc","run quality control on single-cell RNA-seq data","Performs quality control on single-cell RNA-seq data (.h5ad or .h5 files) using scverse best practices with MAD-based filtering and comprehensive visualizations. Use when users request QC analysis, filtering low-quality cells, assessing data quality, or following scverse\u002Fscanpy best practices for single-cell analysis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2166,2167,2168],{"name":2119,"slug":2120,"type":16},{"name":18,"slug":19,"type":16},{"name":2129,"slug":2130,"type":16},"2026-04-06T17:57:01.442679"]