rdkit-conf — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited rdkit-conf (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill provides practical command patterns for RDKit 3D/2D conformer generation using the standardized CLI wrapper: <skill_path>/scripts/rdkit_conf_helper.py.
Key behaviors (important for Agents):
--num-confs conformers (default 10) per moleculevia EmbedMultipleConfs, optimizes each with the chosen force field, and keeps the lowest-energy one. Set --num-confs 1 to revert to single-conformer behavior.
Compute2DCoords is used insteadand a [WARN] line is printed to stderr for that molecule.
*.skipped.csv (no crash).*.fallback.csv.[INFO] Done: <N_3d> 3D, <N_2d> 2D-fallback, <N_skip> skipped (total input: <N>)[RESULT] conf_sdf=/abs/path.sdf[RESULT] conf_xyz=/abs/path.xyz[RESULT] fallback_csv=/abs/path.fallback.csv (only if any 2D fallbacks occurred)[RESULT] skipped_csv=/abs/path.skipped.csv (only if any SMILES were skipped)Check CLI help:
uv run <skill_path>/scripts/rdkit_conf_helper.py --help
uv run <skill_path>/scripts/rdkit_conf_helper.py conf --helpDisable environment printing (optional):
uv run <skill_path>/scripts/rdkit_conf_helper.py --no-env conf --smiles "CCO" --output out.sdfSingle SMILES:
uv run <skill_path>/scripts/rdkit_conf_helper.py conf \
--smiles "CCO" \
--output /tmp/CCO.sdfSingle SMILES with a custom molecule name:
uv run <skill_path>/scripts/rdkit_conf_helper.py conf \
--smiles "c1ccccc1" \
--name benzene \
--output /tmp/benzene.sdfFrom CSV (default SMILES column: smiles):
uv run <skill_path>/scripts/rdkit_conf_helper.py conf \
--file data.csv \
--smiles-col smiles \
--output data.sdfFrom CSV with a name column:
uv run <skill_path>/scripts/rdkit_conf_helper.py conf \
--file data.csv \
--smiles-col smiles \
--name-col compound_id \
--output data.sdfFrom SMI (second token per line is used as name automatically):
uv run <skill_path>/scripts/rdkit_conf_helper.py conf \
--file molecules.smi \
--output molecules.sdfDefault (10 conformers sampled, lowest-energy kept):
uv run <skill_path>/scripts/rdkit_conf_helper.py conf \
--file data.csv --output data.sdfSingle conformer (fastest, least thorough):
uv run <skill_path>/scripts/rdkit_conf_helper.py conf \
--file data.csv --num-confs 1 --output data.sdfIncrease sampling for flexible or macrocyclic molecules:
uv run <skill_path>/scripts/rdkit_conf_helper.py conf \
--file data.csv --num-confs 50 --output data.sdfMMFF94s (default, falls back to UFF if unavailable):
uv run <skill_path>/scripts/rdkit_conf_helper.py conf \
--file data.csv --ff mmff94s --output data.mmff.sdfUFF (universal force field):
uv run <skill_path>/scripts/rdkit_conf_helper.py conf \
--file data.csv --ff uff --output data.uff.sdfSkip force-field optimization (raw ETKDG geometry only):
uv run <skill_path>/scripts/rdkit_conf_helper.py conf \
--file data.csv --ff none --output data.etkdg_raw.sdfuv run <skill_path>/scripts/rdkit_conf_helper.py conf \
--file data.csv \
--format xyz \
--output data.xyzLarge or macrocyclic molecules sometimes fail standard ETKDG; try random initial coordinates:
uv run <skill_path>/scripts/rdkit_conf_helper.py conf \
--file macrocycles.csv \
--use-random-coords \
--max-attempts 500 \
--output macrocycles.sdfUse a different random seed (reproducibility):
uv run <skill_path>/scripts/rdkit_conf_helper.py conf \
--file data.csv --seed 123 --output data.seed123.sdfNon-deterministic embedding (seed = -1):
uv run <skill_path>/scripts/rdkit_conf_helper.py conf \
--file data.csv --seed -1 --output data.sdfBy default explicit H atoms are added before embedding for more accurate 3D geometry. Use --no-hs to keep the molecule as-is (heavy atoms only):
uv run <skill_path>/scripts/rdkit_conf_helper.py conf \
--file data.csv --no-hs --output data.noh.sdfuv run <skill_path>/scripts/rdkit_conf_helper.py conf \
--file data.csv \
--output data.sdf \
--error-log logs/skipped.csv \
--fallback-log logs/used_2d.csv______________________________________________________________________
For each molecule, the script runs the following steps in order:
Chem.MolFromSmiles.Chem.AddHs) -- skipped with --no-hs.EmbedMultipleConfs, --num-confs candidates,default 10): tries ETKDGv3, then ETKDGv2, then ETDG, then ETDG+useRandomCoords as a fallback chain until at least one conformer is embedded.
--ff is not none): each successfully embeddedconformer is individually optimized. MMFF94s transparently falls back to UFF if parameters are unavailable for that molecule.
is retained; all others are discarded. If --ff none, the first embedded conformer is kept without energy ranking.
via Compute2DCoords (Z=0 for all atoms), prints a [WARN] to stderr, and records the molecule in the fallback log.
______________________________________________________________________
SDF output (`--format sdf`, default):
--name, --name-col, or auto-generated mol_<i>) iswritten to the SDF header line.
XYZ output (`--format xyz`):
--no-hs is used, hydrogen atoms are absent from the XYZ.*Fallback log (`.fallback.csv`):**
idx, smiles, name, dim (always 2), ff (always 2d_fallback), note.*Skipped log (`.skipped.csv`):**
idx, smiles, error.______________________________________________________________________
When using this skill for users:
.csv requires a SMILES column (default smiles).smi uses the first token per line as SMILES, second token (if present) as name--smiles "[C@@H](O)(F)Cl"--smiles-col for the SMILES column--name-col (optional) for molecule identifiers to embed in SDF/XYZ headers[INFO] Done: summary line for the 3D/2D/skip breakdown.*.fallback.csv:--use-random-coords or --max-attempts tuning for the affected SMILES.[RESULT] ...=/abs/path in stdout.RDKIT_CONF_HELPER_TRACE=1 uv run <skill_path>/scripts/rdkit_conf_helper.py ...~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.