ADMET Prediction for Drug Candidates
GPTomics/bioSkills
Predicts absorption, distribution, metabolism, excretion and toxicity for drug candidates with ADMETlab 3.0, ADMET-AI, DeepChem and chemprop, plus druglikeness filters.
Agent skill
by jinzhezenggroup in jinzhezenggroup/computational-chemistry-agent-skills
Generates 3D molecular conformers from SMILES strings or files with RDKit, keeps the lowest-energy one per molecule, and falls back to 2D coordinates when embedding fails.
$ npx skills add jinzhezenggroup/computational-chemistry-agent-skills --skill rdkit-conf -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jinzhezenggroup/computational-chemistry-agent-skills rdkit-conf --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/jinzhezenggroup/computational-chemistry-agent-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/molecular-conformer/rdkit-conf .claude/skills/rdkit-conf && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "rdkit-conf" agent skill from https://github.com/jinzhezenggroup/computational-chemistry-agent-skills/tree/master/molecular-conformer/rdkit-conf into .claude/skills/rdkit-conf/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rdkit-conf", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/jinzhezenggroup/computational-chemistry-agent-skills/tree/master/molecular-conformer/rdkit-confType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add jinzhezenggroup/computational-chemistry-agent-skills --skill rdkit-conf -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jinzhezenggroup/computational-chemistry-agent-skills rdkit-conf --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jinzhezenggroup/computational-chemistry-agent-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/molecular-conformer/rdkit-conf .agents/skills/rdkit-conf && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "rdkit-conf" agent skill from https://github.com/jinzhezenggroup/computational-chemistry-agent-skills/tree/master/molecular-conformer/rdkit-conf into .agents/skills/rdkit-conf/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rdkit-conf", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jinzhezenggroup/computational-chemistry-agent-skills --skill rdkit-conf -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jinzhezenggroup/computational-chemistry-agent-skills rdkit-conf --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jinzhezenggroup/computational-chemistry-agent-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/molecular-conformer/rdkit-conf .cursor/skills/rdkit-conf && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "rdkit-conf" agent skill from https://github.com/jinzhezenggroup/computational-chemistry-agent-skills/tree/master/molecular-conformer/rdkit-conf into .cursor/skills/rdkit-conf/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rdkit-conf", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/jinzhezenggroup/computational-chemistry-agent-skills.git --path molecular-conformer/rdkit-conf--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add jinzhezenggroup/computational-chemistry-agent-skills --skill rdkit-conf -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jinzhezenggroup/computational-chemistry-agent-skills rdkit-conf --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jinzhezenggroup/computational-chemistry-agent-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/molecular-conformer/rdkit-conf .gemini/skills/rdkit-conf && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "rdkit-conf" agent skill from https://github.com/jinzhezenggroup/computational-chemistry-agent-skills/tree/master/molecular-conformer/rdkit-conf into .gemini/skills/rdkit-conf/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rdkit-conf", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install jinzhezenggroup/computational-chemistry-agent-skills rdkit-confInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add jinzhezenggroup/computational-chemistry-agent-skills --skill rdkit-conf -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jinzhezenggroup/computational-chemistry-agent-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/molecular-conformer/rdkit-conf .github/skills/rdkit-conf && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "rdkit-conf" agent skill from https://github.com/jinzhezenggroup/computational-chemistry-agent-skills/tree/master/molecular-conformer/rdkit-conf into .github/skills/rdkit-conf/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rdkit-conf", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jinzhezenggroup/computational-chemistry-agent-skills --skill rdkit-conf -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jinzhezenggroup/computational-chemistry-agent-skills rdkit-conf --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jinzhezenggroup/computational-chemistry-agent-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/molecular-conformer/rdkit-conf .opencode/skills/rdkit-conf && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "rdkit-conf" agent skill from https://github.com/jinzhezenggroup/computational-chemistry-agent-skills/tree/master/molecular-conformer/rdkit-conf into .opencode/skills/rdkit-conf/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rdkit-conf", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
rdkit-confGenerates 3D molecular conformers from SMILES strings or files with RDKit, keeps the lowest-energy one per molecule, and falls back to 2D coordinates when embedding fails.
A helper script, scripts/rdkit_conf_helper.py, samples several conformers per molecule with ETKDGv3 (10 by default, set by the num-confs option), optimizes each with MMFF94s or UFF, and keeps the lowest-energy result. SMILES can come from a single string, a CSV with a configurable column and optional name column, or an SMI file where the second token is the name. Output goes to SDF by default, or to XYZ.
If every 3D attempt fails, the molecule gets a 2D layout and a warning line is printed. Invalid SMILES are skipped and logged to a skipped CSV, and 2D fallbacks go to a separate fallback CSV. Each run prints the detected Python, RDKit and pandas environment, a summary count of 3D, 2D and skipped molecules, and the absolute paths of the files it wrote. The results suit docking, visualization or 3D descriptor calculations.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 5c19e75. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
uvFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
rdkit.orgFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Requires uv. Dependencies (rdkit, pandas) are declared as PEP 723 inline script metadata and are installed automatically when the script is invoked with `uv run <script_path>` (do NOT use `uv run python <script_path>` -- that bypasses the inline metadata and will not install dependencies automatically).
From compatibility in the SKILL.md frontmatter.
RDKit Conformer Generator loads about 2.4k tokens when it runs. Until then it costs about 136 tokens; SKILL.md has 739 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from jinzhezenggroup/computational-chemistry-agent-skills at commit 5c19e75, republished under its LGPL-3.0 licence (© jinzhezenggroup). 739 words, ~2,380 tokens.
.claude/skills/rdkit-conf/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.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 molecule
via 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 instead
and 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.csvFor 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 embedded
conformer is individually optimized. MMFF94s transparently falls back to UFF if
parameters are unavailable for that molecule.--ff none, the first embedded conformer
is kept without energy ranking.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>) is
written 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 ...© jinzhezenggroup, LGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (scripts) in molecular-conformer/rdkit-conf of jinzhezenggroup/computational-chemistry-agent-skills.
Open the folder on GitHubat commit 5c19e75
RDKit Conformer Generator next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| RDKit Conformer Generator this skilljinzhezenggroup/computational-chemistry-agent-skills | 148 | — | ~2.4k | Automated safety check: Pass | LGPL-3.0 | |
| ADMET Prediction for Drug CandidatesGPTomics/bioSkills | 1.2k | 1 repos | ~5k | Automated safety check: Pass | MIT | |
| DiffDock Molecular DockingK-Dense-AI/scientific-agent-skills | 48k | 1 repos | ~3k | Automated safety check: Notes | MIT | |
| Edu Chem Reactionwy51ai/edulab | 1.4k | — | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| Rowanlamm-mit/scienceclaw | 246 | 4 repos | ~3.1k | Automated safety check: Warn | Proprietary | |
| Coot Rdkitpemsley/coot | 168 | — | ~981 | Automated safety check: Pass | GPL-3.0 |
GPTomics/bioSkills
Predicts absorption, distribution, metabolism, excretion and toxicity for drug candidates with ADMETlab 3.0, ADMET-AI, DeepChem and chemprop, plus druglikeness filters.
K-Dense-AI/scientific-agent-skills
Predicts how small molecules bind to a protein with DiffDock, covering batch docking, pose ranking by confidence and checks on the results; not for binding affinity.
wy51ai/edulab
把一个化学反应做成自包含的微观 3D 交互演示网页:左/上为 Three.js 可交互分子动画 (拖滑块看断键·成键·原子重组,分步高亮),右为 KaTeX 反应方程 + 分步讲解 + 原子守恒计数 + 可选能量-反应进程曲线。支持三入口——给定文字反应/方程、随机出题、上传图片识别后演示。
lamm-mit/scienceclaw
Cloud-based quantum chemistry platform with Python API. An agent skill from lamm-mit/scienceclaw.
pemsley/coot
RDKit molecular manipulation and visualization within Coot's Python environment.
davila7/claude-code-templates
Guides molecular work with RDKit in Python: reading SMILES and SDF, sanitization, descriptors, fingerprints, substructure and similarity search, reactions and coordinates.
jinzhezenggroup/computational-chemistry-agent-skills
Turns a user-supplied atomic structure and DFT settings into a runnable Quantum ESPRESSO input file, stopping short of submitting the job.
jinzhezenggroup/computational-chemistry-agent-skills
Prepares, validates and runs DP-GEN simplify jobs that thin out repeated or redundant DeepMD datasets, generating param.json and machine.json for local or scheduler runs.
jinzhezenggroup/computational-chemistry-agent-skills
Prepares and runs molecular dynamics simulations in LAMMPS with a DeePMD machine-learning potential, writing the input script and choosing NVE, NVT or NPT.
jinzhezenggroup/computational-chemistry-agent-skills
Prepares and explains LAMMPS input scripts for reactive molecular dynamics with the ReaxFF potential, including charge equilibration and ensemble choice.
jinzhezenggroup/computational-chemistry-agent-skills
Computes RDKit physicochemical descriptors and molecular fingerprints from SMILES through a uv-run CLI script that skips and logs invalid molecules.
jinzhezenggroup/computational-chemistry-agent-skills
A standardized CLI wrapper for Uni-Mol molecular ML workflows that handles representation extraction (embeddings), model training (regression/classification), and property prediction with built-in…
Categories
Generates 3D molecular conformers from SMILES strings or files with RDKit, keeps the lowest-energy one per molecule, and falls back to 2D coordinates when embedding fails. py, samples several conformers per molecule with ETKDGv3 (10 by default, set by the num-confs option), optimizes each with MMFF94s or UFF, and keeps the lowest-energy result. SMILES can come from a single string, a CSV with a configurable column and optional name column, or an SMI file where the second token is the name.
RDKit Conformer Generator fits situations like: preparing 3D geometries from a SMILES dataset before docking; producing SDF or XYZ files for visualization; computing 3D descriptors that need optimized conformers.
Run `npx skills add jinzhezenggroup/computational-chemistry-agent-skills --skill rdkit-conf -a claude-code`. Or copy the skill folder (molecular-conformer/rdkit-conf in jinzhezenggroup/computational-chemistry-agent-skills) into .claude/skills/rdkit-conf in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jinzhezenggroup/computational-chemistry-agent-skills --skill rdkit-conf -a codex`. Or copy the skill folder (molecular-conformer/rdkit-conf in jinzhezenggroup/computational-chemistry-agent-skills) into .agents/skills/rdkit-conf in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jinzhezenggroup/computational-chemistry-agent-skills --skill rdkit-conf -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/rdkit-conf, .gemini/skills/rdkit-conf, .github/skills/rdkit-conf and .opencode/skills/rdkit-conf in your project.
Going by SKILL.md and its folder, RDKit Conformer Generator needs Python for the scripts in its folder and the command-line tools its instructions call (uv). Our summary lists: uv installed, with the script run through uv run and not uv run python; RDKit and pandas, installed automatically from the script's inline metadata. Compatibility (from SKILL.md): Requires uv. Dependencies (rdkit, pandas) are declared as PEP 723 inline script metadata and are installed automatically when the script is invoked with `uv run <script_path>` (do NOT use `uv run python <script_path>` -- that bypasses the inline metadata and will not install dependencies automatically)..
SKILL.md names 1 domain. As links in the text: rdkit.org. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
RDKit Conformer Generator is published under the LGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.4k tokens (SKILL.md is roughly 9.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with RDKit Conformer Generator: ADMET Prediction for Drug Candidates (GPTomics/bioSkills, 1.2k stars), DiffDock Molecular Docking (K-Dense-AI/scientific-agent-skills, 48k stars), Edu Chem Reaction (wy51ai/edulab, 1.4k stars) and Rowan (lamm-mit/scienceclaw, 246 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jinzhezenggroup (a GitHub organization) maintains it in jinzhezenggroup/computational-chemistry-agent-skills, which has 148 GitHub stars. The repository holds 62 skills in this directory. The repository was last updated on October 9, 2026.
Source: jinzhezenggroup/computational-chemistry-agent-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.