[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EC4F204F4WGG2JSESM542V":3,"skill-same:01M6EC4F204F4WGG2JSESM542V":65},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":20,"frontMatter":21,"refName":22,"commitSha":23,"skillDirectory":24,"forksCount":25,"repositoryHtmlUrl":26,"repositoryHomepageUrl":27,"ownerHtmlUrl":28,"ownerBlogUrl":6,"ownerDescription":29,"updatedAt":30,"install":31,"resources":44},"01M6EC4F204F4WGG2JSESM542V","datamol",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FK-Dense-AI\u002Fclaude-scientific-skills\u002Fdatamol\u002FSKILL.md",[],[5],"2026-11-10 10:12:30",false,"# Datamol Cheminformatics Skill\n\n## Overview\n\nDatamol is a Python library that provides a lightweight, Pythonic abstraction layer over RDKit for molecular cheminformatics. Simplify complex molecular operations with sensible defaults, efficient parallelization, and modern I\u002FO capabilities. All molecular objects are native `rdkit.Chem.Mol` instances, ensuring full compatibility with the RDKit ecosystem.\n\n**Key capabilities**:\n- Molecular format conversion (SMILES, SELFIES, InChI)\n- Structure standardization and sanitization\n- Molecular descriptors and fingerprints\n- 3D conformer generation and analysis\n- Clustering and diversity selection\n- Scaffold and fragment analysis\n- Chemical reaction application\n- Visualization and alignment\n- Batch processing with parallelization\n- Cloud storage support via fsspec\n\n## Installation and Setup\n\nGuide users to install datamol:\n\n```bash\nuv pip install datamol\n```\n\n**Import convention**:\n```python\nimport datamol as dm\n```\n\n## Core Workflows\n\n### 1. Basic Molecule Handling\n\n**Creating molecules from SMILES**:\n```python\nimport datamol as dm\n\n# Single molecule\nmol = dm.to_mol(\"CCO\")  # Ethanol\n\n# From list of SMILES\nsmiles_list = [\"CCO\", \"c1ccccc1\", \"CC(=O)O\"]\nmols = [dm.to_mol(smi) for smi in smiles_list]\n\n# Error handling\nmol = dm.to_mol(\"invalid_smiles\")  # Returns None\nif mol is None:\n    print(\"Failed to parse SMILES\")\n```\n\n**Converting molecules to SMILES**:\n```python\n# Canonical SMILES\nsmiles = dm.to_smiles(mol)\n\n# Isomeric SMILES (includes stereochemistry)\nsmiles = dm.to_smiles(mol, isomeric=True)\n\n# Other formats\ninchi = dm.to_inchi(mol)\ninchikey = dm.to_inchikey(mol)\nselfies = dm.to_selfies(mol)\n```\n\n**Standardization and sanitization** (always recommend for user-provided molecules):\n```python\n# Sanitize molecule\nmol = dm.sanitize_mol(mol)\n\n# Full standardization (recommended for datasets)\nmol = dm.standardize_mol(\n    mol,\n    disconnect_metals=True,\n    normalize=True,\n    reionize=True\n)\n\n# For SMILES strings directly\nclean_smiles = dm.standardize_smiles(smiles)\n```\n\n### 2. Reading and Writing Molecular Files\n\nRefer to `references\u002Fio_module.md` for comprehensive I\u002FO documentation.\n\n**Reading files**:\n```python\n# SDF files (most common in chemistry)\ndf = dm.read_sdf(\"compounds.sdf\", mol_column='mol')\n\n# SMILES files\ndf = dm.read_smi(\"molecules.smi\", smiles_column='smiles', mol_column='mol')\n\n# CSV with SMILES column\ndf = dm.read_csv(\"data.csv\", smiles_column=\"SMILES\", mol_column=\"mol\")\n\n# Excel files\ndf = dm.read_excel(\"compounds.xlsx\", sheet_name=0, mol_column=\"mol\")\n\n# Universal reader (auto-detects format)\ndf = dm.open_df(\"file.sdf\")  # Works with .sdf, .csv, .xlsx, .parquet, .json\n```\n\n**Writing files**:\n```python\n# Save as SDF\ndm.to_sdf(mols, \"output.sdf\")\n# Or from DataFrame\ndm.to_sdf(df, \"output.sdf\", mol_column=\"mol\")\n\n# Save as SMILES file\ndm.to_smi(mols, \"output.smi\")\n\n# Excel with rendered molecule images\ndm.to_xlsx(df, \"output.xlsx\", mol_columns=[\"mol\"])\n```\n\n**Remote file support** (S3, GCS, HTTP):\n```python\n# Read from cloud storage\ndf = dm.read_sdf(\"s3:\u002F\u002Fbucket\u002Fcompounds.sdf\")\ndf = dm.read_csv(\"https:\u002F\u002Fexample.com\u002Fdata.csv\")\n\n# Write to cloud storage\ndm.to_sdf(mols, \"s3:\u002F\u002Fbucket\u002Foutput.sdf\")\n```\n\n### 3. Molecular Descriptors and Properties\n\nRefer to `references\u002Fdescriptors_viz.md` for detailed descriptor documentation.\n\n**Computing descriptors for a single molecule**:\n```python\n# Get standard descriptor set\ndescriptors = dm.descriptors.compute_many_descriptors(mol)\n# Returns: {'mw': 46.07, 'logp': -0.03, 'hbd': 1, 'hba': 1,\n#           'tpsa': 20.23, 'n_aromatic_atoms': 0, ...}\n```\n\n**Batch descriptor computation** (recommended for datasets):\n```python\n# Compute for all molecules in parallel\ndesc_df = dm.descriptors.batch_compute_many_descriptors(\n    mols,\n    n_jobs=-1,      # Use all CPU cores\n    progress=True   # Show progress bar\n)\n```\n\n**Specific descriptors**:\n```python\n# Aromaticity\nn_aromatic = dm.descriptors.n_aromatic_atoms(mol)\naromatic_ratio = dm.descriptors.n_aromatic_atoms_proportion(mol)\n\n# Stereochemistry\nn_stereo = dm.descriptors.n_stereo_centers(mol)\nn_unspec = dm.descriptors.n_stereo_centers_unspecified(mol)\n\n# Flexibility\nn_rigid = dm.descriptors.n_rigid_bonds(mol)\n```\n\n**Drug-likeness filtering (Lipinski's Rule of Five)**:\n```python\n# Filter compounds\ndef is_druglike(mol):\n    desc = dm.descriptors.compute_many_descriptors(mol)\n    return (\n        desc['mw'] \u003C= 500 and\n        desc['logp'] \u003C= 5 and\n        desc['hbd'] \u003C= 5 and\n        desc['hba'] \u003C= 10\n    )\n\ndruglike_mols = [mol for mol in mols if is_druglike(mol)]\n```\n\n### 4. Molecular Fingerprints and Similarity\n\n**Generating fingerprints**:\n```python\n# ECFP (Extended Connectivity Fingerprint, default)\nfp = dm.to_fp(mol, fp_type='ecfp', radius=2, n_bits=2048)\n\n# Other fingerprint types\nfp_maccs = dm.to_fp(mol, fp_type='maccs')\nfp_topological = dm.to_fp(mol, fp_type='topological')\nfp_atompair = dm.to_fp(mol, fp_type='atompair')\n```\n\n**Similarity calculations**:\n```python\n# Pairwise distances within a set\ndistance_matrix = dm.pdist(mols, n_jobs=-1)\n\n# Distances between two sets\ndistances = dm.cdist(query_mols, library_mols, n_jobs=-1)\n\n# Find most similar molecules\nfrom scipy.spatial.distance import squareform\ndist_matrix = squareform(dm.pdist(mols))\n# Lower distance = higher similarity (Tanimoto distance = 1 - Tanimoto similarity)\n```\n\n### 5. Clustering and Diversity Selection\n\nRefer to `references\u002Fcore_api.md` for clustering details.\n\n**Butina clustering**:\n```python\n# Cluster molecules by structural similarity\nclusters = dm.cluster_mols(\n    mols,\n    cutoff=0.2,    # Tanimoto distance threshold (0=identical, 1=completely different)\n    n_jobs=-1      # Parallel processing\n)\n\n# Each cluster is a list of molecule indices\nfor i, cluster in enumerate(clusters):\n    print(f\"Cluster {i}: {len(cluster)} molecules\")\n    cluster_mols = [mols[idx] for idx in cluster]\n```\n\n**Important**: Butina clustering builds a full distance matrix - suitable for ~1000 molecules, not for 10,000+.\n\n**Diversity selection**:\n```python\n# Pick diverse subset\ndiverse_mols = dm.pick_diverse(\n    mols,\n    npick=100  # Select 100 diverse molecules\n)\n\n# Pick cluster centroids\ncentroids = dm.pick_centroids(\n    mols,\n    npick=50   # Select 50 representative molecules\n)\n```\n\n### 6. Scaffold Analysis\n\nRefer to `references\u002Ffragments_scaffolds.md` for complete scaffold documentation.\n\n**Extracting Murcko scaffolds**:\n```python\n# Get Bemis-Murcko scaffold (core structure)\nscaffold = dm.to_scaffold_murcko(mol)\nscaffold_smiles = dm.to_smiles(scaffold)\n```\n\n**Scaffold-based analysis**:\n```python\n# Group compounds by scaffold\nfrom collections import Counter\n\nscaffolds = [dm.to_scaffold_murcko(mol) for mol in mols]\nscaffold_smiles = [dm.to_smiles(s) for s in scaffolds]\n\n# Count scaffold frequency\nscaffold_counts = Counter(scaffold_smiles)\nmost_common = scaffold_counts.most_common(10)\n\n# Create scaffold-to-molecules mapping\nscaffold_groups = {}\nfor mol, scaf_smi in zip(mols, scaffold_smiles):\n    if scaf_smi not in scaffold_groups:\n        scaffold_groups[scaf_smi] = []\n    scaffold_groups[scaf_smi].append(mol)\n```\n\n**Scaffold-based train\u002Ftest splitting** (for ML):\n```python\n# Ensure train and test sets have different scaffolds\nscaffold_to_mols = {}\nfor mol, scaf in zip(mols, scaffold_smiles):\n    if scaf not in scaffold_to_mols:\n        scaffold_to_mols[scaf] = []\n    scaffold_to_mols[scaf].append(mol)\n\n# Split scaffolds into train\u002Ftest\nimport random\nscaffolds = list(scaffold_to_mols.keys())\nrandom.shuffle(scaffolds)\nsplit_idx = int(0.8 * len(scaffolds))\ntrain_scaffolds = scaffolds[:split_idx]\ntest_scaffolds = scaffolds[split_idx:]\n\n# Get molecules for each split\ntrain_mols = [mol for scaf in train_scaffolds for mol in scaffold_to_mols[scaf]]\ntest_mols = [mol for scaf in test_scaffolds for mol in scaffold_to_mols[scaf]]\n```\n\n### 7. Molecular Fragmentation\n\nRefer to `references\u002Ffragments_scaffolds.md` for fragmentation details.\n\n**BRICS fragmentation** (16 bond types):\n```python\n# Fragment molecule\nfragments = dm.fragment.brics(mol)\n# Returns: set of fragment SMILES with attachment points like '[1*]CCN'\n```\n\n**RECAP fragmentation** (11 bond types):\n```python\nfragments = dm.fragment.recap(mol)\n```\n\n**Fragment analysis**:\n```python\n# Find common fragments across compound library\nfrom collections import Counter\n\nall_fragments = []\nfor mol in mols:\n    frags = dm.fragment.brics(mol)\n    all_fragments.extend(frags)\n\nfragment_counts = Counter(all_fragments)\ncommon_frags = fragment_counts.most_common(20)\n\n# Fragment-based scoring\ndef fragment_score(mol, reference_fragments):\n    mol_frags = dm.fragment.brics(mol)\n    overlap = mol_frags.intersection(reference_fragments)\n    return len(overlap) \u002F len(mol_frags) if mol_frags else 0\n```\n\n### 8. 3D Conformer Generation\n\nRefer to `references\u002Fconformers_module.md` for detailed conformer documentation.\n\n**Generating conformers**:\n```python\n# Generate 3D conformers\nmol_3d = dm.conformers.generate(\n    mol,\n    n_confs=50,           # Number to generate (auto if None)\n    rms_cutoff=0.5,       # Filter similar conformers (Ångströms)\n    minimize_energy=True,  # Minimize with UFF force field\n    method='ETKDGv3'      # Embedding method (recommended)\n)\n\n# Access conformers\nn_conformers = mol_3d.GetNumConformers()\nconf = mol_3d.GetConformer(0)  # Get first conformer\npositions = conf.GetPositions()  # Nx3 array of atom coordinates\n```\n\n**Conformer clustering**:\n```python\n# Cluster conformers by RMSD\nclusters = dm.conformers.cluster(\n    mol_3d,\n    rms_cutoff=1.0,\n    centroids=False\n)\n\n# Get representative conformers\ncentroids = dm.conformers.return_centroids(mol_3d, clusters)\n```\n\n**SASA calculation**:\n```python\n# Calculate solvent accessible surface area\nsasa_values = dm.conformers.sasa(mol_3d, n_jobs=-1)\n\n# Access SASA from conformer properties\nconf = mol_3d.GetConformer(0)\nsasa = conf.GetDoubleProp('rdkit_free_sasa')\n```\n\n### 9. Visualization\n\nRefer to `references\u002Fdescriptors_viz.md` for visualization documentation.\n\n**Basic molecule grid**:\n```python\n# Visualize molecules\ndm.viz.to_image(\n    mols[:20],\n    legends=[dm.to_smiles(m) for m in mols[:20]],\n    n_cols=5,\n    mol_size=(300, 300)\n)\n\n# Save to file\ndm.viz.to_image(mols, outfile=\"molecules.png\")\n\n# SVG for publications\ndm.viz.to_image(mols, outfile=\"molecules.svg\", use_svg=True)\n```\n\n**Aligned visualization** (for SAR analysis):\n```python\n# Align molecules by common substructure\ndm.viz.to_image(\n    similar_mols,\n    align=True,  # Enable MCS alignment\n    legends=activity_labels,\n    n_cols=4\n)\n```\n\n**Highlighting substructures**:\n```python\n# Highlight specific atoms and bonds\ndm.viz.to_image(\n    mol,\n    highlight_atom=[0, 1, 2, 3],  # Atom indices\n    highlight_bond=[0, 1, 2]      # Bond indices\n)\n```\n\n**Conformer visualization**:\n```python\n# Display multiple conformers\ndm.viz.conformers(\n    mol_3d,\n    n_confs=10,\n    align_conf=True,\n    n_cols=3\n)\n```\n\n### 10. Chemical Reactions\n\nRefer to `references\u002Freactions_data.md` for reactions documentation.\n\n**Applying reactions**:\n```python\nfrom rdkit.Chem import rdChemReactions\n\n# Define reaction from SMARTS\nrxn_smarts = '[C:1](=[O:2])[OH:3]>>[C:1](=[O:2])[Cl:3]'\nrxn = rdChemReactions.ReactionFromSmarts(rxn_smarts)\n\n# Apply to molecule\nreactant = dm.to_mol(\"CC(=O)O\")  # Acetic acid\nproduct = dm.reactions.apply_reaction(\n    rxn,\n    (reactant,),\n    sanitize=True\n)\n\n# Convert to SMILES\nproduct_smiles = dm.to_smiles(product)\n```\n\n**Batch reaction application**:\n```python\n# Apply reaction to library\nproducts = []\nfor mol in reactant_mols:\n    try:\n        prod = dm.reactions.apply_reaction(rxn, (mol,))\n        if prod is not None:\n            products.append(prod)\n    except Exception as e:\n        print(f\"Reaction failed: {e}\")\n```\n\n## Parallelization\n\nDatamol includes built-in parallelization for many operations. Use `n_jobs` parameter:\n- `n_jobs=1`: Sequential (no parallelization)\n- `n_jobs=-1`: Use all available CPU cores\n- `n_jobs=4`: Use 4 cores\n\n**Functions supporting parallelization**:\n- `dm.read_sdf(..., n_jobs=-1)`\n- `dm.descriptors.batch_compute_many_descriptors(..., n_jobs=-1)`\n- `dm.cluster_mols(..., n_jobs=-1)`\n- `dm.pdist(..., n_jobs=-1)`\n- `dm.conformers.sasa(..., n_jobs=-1)`\n\n**Progress bars**: Many batch operations support `progress=True` parameter.\n\n## Common Workflows and Patterns\n\n### Complete Pipeline: Data Loading → Filtering → Analysis\n\n```python\nimport datamol as dm\nimport pandas as pd\n\n# 1. Load molecules\ndf = dm.read_sdf(\"compounds.sdf\")\n\n# 2. Standardize\ndf['mol'] = df['mol'].apply(lambda m: dm.standardize_mol(m) if m else None)\ndf = df[df['mol'].notna()]  # Remove failed molecules\n\n# 3. Compute descriptors\ndesc_df = dm.descriptors.batch_compute_many_descriptors(\n    df['mol'].tolist(),\n    n_jobs=-1,\n    progress=True\n)\n\n# 4. Filter by drug-likeness\ndruglike = (\n    (desc_df['mw'] \u003C= 500) &\n    (desc_df['logp'] \u003C= 5) &\n    (desc_df['hbd'] \u003C= 5) &\n    (desc_df['hba'] \u003C= 10)\n)\nfiltered_df = df[druglike]\n\n# 5. Cluster and select diverse subset\ndiverse_mols = dm.pick_diverse(\n    filtered_df['mol'].tolist(),\n    npick=100\n)\n\n# 6. Visualize results\ndm.viz.to_image(\n    diverse_mols,\n    legends=[dm.to_smiles(m) for m in diverse_mols],\n    outfile=\"diverse_compounds.png\",\n    n_cols=10\n)\n```\n\n### Structure-Activity Relationship (SAR) Analysis\n\n```python\n# Group by scaffold\nscaffolds = [dm.to_scaffold_murcko(mol) for mol in mols]\nscaffold_smiles = [dm.to_smiles(s) for s in scaffolds]\n\n# Create DataFrame with activities\nsar_df = pd.DataFrame({\n    'mol': mols,\n    'scaffold': scaffold_smiles,\n    'activity': activities  # User-provided activity data\n})\n\n# Analyze each scaffold series\nfor scaffold, group in sar_df.groupby('scaffold'):\n    if len(group) >= 3:  # Need multiple examples\n        print(f\"\\nScaffold: {scaffold}\")\n        print(f\"Count: {len(group)}\")\n        print(f\"Activity range: {group['activity'].min():.2f} - {group['activity'].max():.2f}\")\n\n        # Visualize with activities as legends\n        dm.viz.to_image(\n            group['mol'].tolist(),\n            legends=[f\"Activity: {act:.2f}\" for act in group['activity']],\n            align=True  # Align by common substructure\n        )\n```\n\n### Virtual Screening Pipeline\n\n```python\n# 1. Generate fingerprints for query and library\nquery_fps = [dm.to_fp(mol) for mol in query_actives]\nlibrary_fps = [dm.to_fp(mol) for mol in library_mols]\n\n# 2. Calculate similarities\nfrom scipy.spatial.distance import cdist\nimport numpy as np\n\ndistances = dm.cdist(query_actives, library_mols, n_jobs=-1)\n\n# 3. Find closest matches (min distance to any query)\nmin_distances = distances.min(axis=0)\nsimilarities = 1 - min_distances  # Convert distance to similarity\n\n# 4. Rank and select top hits\ntop_indices = np.argsort(similarities)[::-1][:100]  # Top 100\ntop_hits = [library_mols[i] for i in top_indices]\ntop_scores = [similarities[i] for i in top_indices]\n\n# 5. Visualize hits\ndm.viz.to_image(\n    top_hits[:20],\n    legends=[f\"Sim: {score:.3f}\" for score in top_scores[:20]],\n    outfile=\"screening_hits.png\"\n)\n```\n\n## Reference Documentation\n\nFor detailed API documentation, consult these reference files:\n\n- **`references\u002Fcore_api.md`**: Core namespace functions (conversions, standardization, fingerprints, clustering)\n- **`references\u002Fio_module.md`**: File I\u002FO operations (read\u002Fwrite SDF, CSV, Excel, remote files)\n- **`references\u002Fconformers_module.md`**: 3D conformer generation, clustering, SASA calculations\n- **`references\u002Fdescriptors_viz.md`**: Molecular descriptors and visualization functions\n- **`references\u002Ffragments_scaffolds.md`**: Scaffold extraction, BRICS\u002FRECAP fragmentation\n- **`references\u002Freactions_data.md`**: Chemical reactions and toy datasets\n\n## Best Practices\n\n1. **Always standardize molecules** from external sources:\n   ```python\n   mol = dm.standardize_mol(mol, disconnect_metals=True, normalize=True, reionize=True)\n   ```\n\n2. **Check for None values** after molecule parsing:\n   ```python\n   mol = dm.to_mol(smiles)\n   if mol is None:\n       # Handle invalid SMILES\n   ```\n\n3. **Use parallel processing** for large datasets:\n   ```python\n   result = dm.operation(..., n_jobs=-1, progress=True)\n   ```\n\n4. **Leverage fsspec** for cloud storage:\n   ```python\n   df = dm.read_sdf(\"s3:\u002F\u002Fbucket\u002Fcompounds.sdf\")\n   ```\n\n5. **Use appropriate fingerprints** for similarity:\n   - ECFP (Morgan): General purpose, structural similarity\n   - MACCS: Fast, smaller feature space\n   - Atom pairs: Considers atom pairs and distances\n\n6. **Consider scale limitations**:\n   - Butina clustering: ~1,000 molecules (full distance matrix)\n   - For larger datasets: Use diversity selection or hierarchical methods\n\n7. **Scaffold splitting for ML**: Ensure proper train\u002Ftest separation by scaffold\n\n8. **Align molecules** when visualizing SAR series\n\n## Error Handling\n\n```python\n# Safe molecule creation\ndef safe_to_mol(smiles):\n    try:\n        mol = dm.to_mol(smiles)\n        if mol is not None:\n            mol = dm.standardize_mol(mol)\n        return mol\n    except Exception as e:\n        print(f\"Failed to process {smiles}: {e}\")\n        return None\n\n# Safe batch processing\nvalid_mols = []\nfor smiles in smiles_list:\n    mol = safe_to_mol(smiles)\n    if mol is not None:\n        valid_mols.append(mol)\n```\n\n## Integration with Machine Learning\n\n```python\n# Feature generation\nX = np.array([dm.to_fp(mol) for mol in mols])\n\n# Or descriptors\ndesc_df = dm.descriptors.batch_compute_many_descriptors(mols, n_jobs=-1)\nX = desc_df.values\n\n# Train model\nfrom sklearn.ensemble import RandomForestRegressor\nmodel = RandomForestRegressor()\nmodel.fit(X, y_target)\n\n# Predict\npredictions = model.predict(X_test)\n```\n\n## Troubleshooting\n\n**Issue**: Molecule parsing fails\n- **Solution**: Use `dm.standardize_smiles()` first or try `dm.fix_mol()`\n\n**Issue**: Memory errors with clustering\n- **Solution**: Use `dm.pick_diverse()` instead of full clustering for large sets\n\n**Issue**: Slow conformer generation\n- **Solution**: Reduce `n_confs` or increase `rms_cutoff` to generate fewer conformers\n\n**Issue**: Remote file access fails\n- **Solution**: Ensure fsspec and appropriate cloud provider libraries are installed (s3fs, gcsfs, etc.)\n\n## Additional Resources\n\n- **Datamol Documentation**: https:\u002F\u002Fdocs.datamol.io\u002F\n- **RDKit Documentation**: https:\u002F\u002Fwww.rdkit.org\u002Fdocs\u002F\n- **GitHub Repository**: https:\u002F\u002Fgithub.com\u002Fdatamol-io\u002Fdatamol\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FK-Dense-AI\u002Fclaude-scientific-skills\u002Fdatamol",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill datamol",{"tool":37,"command":38},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill datamol",{"tool":40,"command":41},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill datamol","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FK-Dense-AI\u002Fclaude-scientific-skills\u002Fdatamol\u002FSKILL.md",true,[45,51,55,59],{"path":46,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":49,"sourceHtmlUrl":50},"BENCHMARK.md","REFERENCE","参考文档",2762,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fmcore-split-pr\u002FBENCHMARK.md",{"path":52,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":53,"sourceHtmlUrl":54},"evals\u002Fevals.json",3,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fmcore-split-pr\u002Fevals\u002Fevals.json",{"path":56,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":57,"sourceHtmlUrl":58},"skill-card.md",2463,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fmcore-split-pr\u002Fskill-card.md",{"path":60,"resourceType":61,"resourceTypeDesc":62,"sizeBytes":63,"sourceHtmlUrl":64},"skill.oms.sig","OTHER","其他",4581,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fmcore-split-pr\u002Fskill.oms.sig",[66,80,90,99,105,112],{"skillNo":67,"name":68,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":76,"publishedAt":18},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[71],{"categoryNo":72,"categoryName":73,"taxonomyType":74,"taxonomyTypeDesc":75},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[77,78,79],"model","model hierarchy","model hierarchy skill",{"skillNo":81,"name":82,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":86,"publishedAt":18},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[85],{"categoryNo":72,"categoryName":73,"taxonomyType":74,"taxonomyTypeDesc":75},[87,88,89],"MCP","zoom","zoom mcp",{"skillNo":91,"name":92,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":18},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[96,97,98,88],"sdk","zoom apps sdk","apps",{"skillNo":100,"name":101,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":18},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[101],{"skillNo":106,"name":107,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":111,"publishedAt":18},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[110],{"categoryNo":72,"categoryName":73,"taxonomyType":74,"taxonomyTypeDesc":75},[107],{"skillNo":113,"name":114,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":117,"publishedAt":18},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[114]]