kohulan/chemaudit/chemaudit-standardization
Claude Code and agent skill by kohulan/chemaudit
- community
Checking that the SKILL.md file is still in the repository.
Standardize chemical structures using ChemAudit's ChEMBL-compatible pipeline (Checker → Standardizer → GetParent → optional Tautomer) with full per-stage provenance, charge/bond/ring-change tracking, and stereochemistry comparison. Use when user says "standardize this molecule", "normalize structure", "strip salts", "neutralize charges", "canonical SMILES", "ChEMBL standardization", "parent molecule", "tautomer canonicalization", or "show me what changed after standardization". Shows every transformation applied with before/after InChIKey and atom-level diffs.
Install
npx vskill@latest install kohulan/chemaudit/chemaudit-standardizationSKILL.md
ChemAudit Standardization
Overview
ChEMBL-compatible standardization pipeline with four stages:
- Checker — runs
ChEMBL structure checker; detects structural problems with penalty scores (penalty>0 means the checker flagged something). - Standardizer — fixes nitro groups, metal bonds, sulphoxides, etc. via normalization SMARTS rules.
- GetParent — extracts the largest organic fragment (removes salts, counterions, solvents).
- Tautomer (optional, off by default) — canonicalizes tautomers via
TautomerEnumerator. Warning: may destroy E/Z double-bond stereochemistry.
Optional detailed provenance records atom-level charge/bond/ring changes per stage.
Access modes
- API:
POST /api/v1/standardize. - CLI:
chemaudit standardize --smiles "CCO"(server) or--local(offline). - Cross-pipeline diagnostic:
POST /api/v1/diagnostics/cross-pipelineruns three pipelines (RDKit MolStandardize, ChEMBL-style, minimal) and compares outputs.
Workflow
1. Default standardization
Response:
2. Enable tautomer canonicalization (opt-in)
Adds a tautomer_canonicalization step. Watch stereo_comparison.double_bond_stereo_lost — tautomer enumeration can collapse E/Z bonds.
3. Full provenance (atom-level diff)
The result.provenance field fills with per-stage records:
Cross-references to Deep Validation check IDs (DVAL-01, DVAL-03) appear in dval_cross_refs when the molecule fails those checks — useful for understanding whether standardization addressed a flagged issue.
4. Pass prior validation results for cross-referencing
If you already ran deep validation and want the standardization provenance to cross-reference DVAL IDs:
5. Get available options
Returns the canonical list of pipeline steps, their defaults, and warnings (e.g. tautomer stereo-loss caveat).
6. Compare three pipelines side-by-side
Runs:
- RDKit
MolStandardize(Cleanup + LargestFragment + Uncharger + TautomerEnumerator). - ChEMBL-style pipeline (the same as
/standardize). - Minimal pipeline (parse + sanitize only).
Compares SMILES, InChIKey, MW, formula, charge, stereo count across all three. Surfaces disagreements — critical when picking a pipeline for a new dataset.
7. CLI usage
--local uses app.services.standardization.chembl_pipeline directly — no HTTP. Outputs a Rich table by default, JSON when piped or --format json.
Stereo comparison
result.stereo_comparison summarizes:
| Field | Meaning | |
|---|---|---|
before_count / after_count | Defined stereocenters before and after | |
lost / gained | Net change in defined stereocenters | |
double_bond_stereo_lost | E/Z bonds lost to tautomerization | |
warning | Populated when lost > 0 or double_bond_stereo_lost > 0 |
preserve_stereo: true (default) makes the pipeline attempt to retain stereochemistry through each stage. Tautomer canonicalization is the main offender; the warning surfaces when it strips stereo.
Examples
Example 1 — "Standardize and show what changed"
POST /standardize(defaults).- Print
result.original_smilesvsresult.standardized_smiles. - Loop
result.steps_applied[]; print each step'sdescription+changes. - Print
result.excluded_fragments[]for the salt/solvent story. - Show
structure_comparison.mass_change_percent— usually negative (lost a counterion).
Example 2 — "Why do these three SMILES have different InChIKeys?"
POST /diagnostics/cross-pipelinefor each — read each pipeline's InChIKey.- Look at
disagreementsandproperty_comparison[]to see which property differs. - If
structural_disagreements > 0, the three standardization approaches produced different molecular graphs — investigate the per-pipelineerrorfields.
Example 3 — "Strip salts and neutralize without touching tautomers"
Defaults (include_tautomer: false) already do this. The pipeline runs Checker → Standardizer (normalizes functional groups) → GetParent (salt stripping) — leaving tautomers alone. The result's canonical SMILES is safe to use as a dedup key without risking E/Z loss.
Example 4 — "Preserve stereochemistry in a hard case"
Pass {"options": {"preserve_stereo": true, "include_tautomer": false}} — default. If you need tautomer canonicalization and stereo, accept that some E/Z information may be lost; the response surfaces exactly how much in stereo_comparison.double_bond_stereo_lost.
Rate limits
/standardize: 10/min./standardize/options: 30/min./diagnostics/cross-pipeline: 10/min.
API-key tier raises to 300/min.
Troubleshooting
result.success = false
The pipeline raised an exception; result.error_message has details. Common causes:
- Unparseable input (also surfaces as 400 with
format_detected). - Tautomer enumeration timed out (100+ tautomers) — the engine flags
complexity_flag=true. - Pipeline chose a fragment with unusual chemistry (rare; open an issue with the InChIKey).
standardized_smiles = null but success = true
Stripping all fragments left nothing. Means the input was entirely a salt/counterion with no parent (e.g. [Na+].[Cl-]). Not an error — genuinely no parent exists.
mass_change_percent = 0 but steps_applied shows applied stages
The standardizer applied normalizations that don't change mass (e.g. resonance structure normalization, redrawing nitro groups). Check structure_comparison.diff_summary[] for the qualitative story.
double_bond_stereo_lost > 0 after enabling tautomer
Expected. Tautomer canonicalization breaks and reforms double bonds. If E/Z geometry matters, set include_tautomer: false — accept that different tautomeric inputs will produce different canonical SMILES.
InChIKey changed but structures "look the same"
Likely tautomer canonicalization, or a charge/protonation normalization. Run with include_provenance: true and inspect charge_changes[] and bond_changes[] to see the atom-level story.
Checker issues with penalty_score = 0
Zero-penalty entries are informational. Non-zero penalties mean the ChEMBL checker considers the input substandard.
Further reading
chemaudit-qsar-ready— when you want the full 10-step ML-curation pipeline, not just the 3-4 ChEMBL steps.chemaudit-diagnostics— for cross-pipeline comparison and SMILES round-trip checking.chemaudit-molecule-validation— for deep checks that complement standardization.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/chemaudit-standardization/SKILL.md
Popularity
- Repository stars
- 63
- Repository forks
- 7
- 7-day trend score
- 21
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/kohulan/chemaudit/chemaudit-standardization)