Skill Tracer
Skills › Scientific Agent Skills › esm

esm

skill · 214 lines · MIT license · skills/esm/SKILL.md

The facts

Its description

Uses the Biohub esm Python SDK for ESM3 protein generation, ESMC embeddings, and ESMFold2 all-atom folding. Applies to local model inference and Biohub hosted clients, including former Forge workflows; distinguishes the separate legacy fair-esm distribution.

The description the agent reads to decide when to use it.

From its settingsline 3

Runs scripts

bin/python, scripts/esm_embeddings.py, python tests/run_all.py

Scripts the text names. Found by matching words, so treat them as pointers.

Found by matching wordsline 33 line 130 line 191

Files it mentions

references/forge-api.md, references/esm3-api.md, scripts/esm_embeddings.py, references/esm-c-api.md, references/biohub-platform.md (first 5 of 7 lines)

Files the text names, such as ones to read or write. Found by matching words, so treat them as pointers.

Found by matching wordsline 66 line 109 line 130 line 134 line 166

What leads to it

Other skills that hand off to this one, call it, require it or offer it instead, found by matching their names, so treat them as pointers.

Found by matching words

Licence

MIT license, from the skill file

The terms its author shares it under, which let it be shown here.

From its settingsline 4 licence text

Other settings

compatibility: Requires Python 3.12+ and esm 3.4.1.post1. Local pretrained inference needs model weights and sufficient RAM or GPU memory; hosted inference needs network access and ESM_API_KEY. Use an isolated environment, separate from fair-esm. metadata: version: "2.0" skill-author: K-Dense Inc. last-reviewed: "2026-09-30" upstream-version: "3.4.1.post1"

More settings at the top of the file, shown as written.

From its settingsline 5 line 6
Other files in this skill (7) Close

The text

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1---
2name: esm
3description: Uses the Biohub esm Python SDK for ESM3 protein generation, ESMC embeddings, and ESMFold2 all-atom folding. Applies to local model inference and Biohub hosted clients, including former Forge workflows; distinguishes the separate legacy fair-esm distribution.
4license: MIT license
5compatibility: Requires Python 3.12+ and esm 3.4.1.post1. Local pretrained inference needs model weights and sufficient RAM or GPU memory; hosted inference needs network access and ESM_API_KEY. Use an isolated environment, separate from fair-esm.
6metadata:
7 version: "2.0"
8 skill-author: K-Dense Inc.
9 last-reviewed: "2026-09-30"
10 upstream-version: "3.4.1.post1"
11---
13# ESM: protein generation, embeddings, and folding

ESM: protein generation, embeddings, and folding

Raw lines 1 to 14
15## When to use
17Use for Biohub's `esm` SDK: ESM3 masked multimodal generation, ESMC sequence
18representations, and ESMFold2 all-atom prediction. The former Forge platform
19migrated to `https://biohub.ai`, including ESM3; SDK class names still contain
20`Forge`. This skill targets the released **esm 3.4.1.post1**, verified against
21its wheel and current official documentation.
23`fair-esm` is Meta's separate, older ESM2/ESMFold/ESM-IF distribution. Both
24packages import as `esm`; install them in separate environments. The legacy
25`esm.pretrained.esm2_*` interface is not the Biohub ESMC interface. Hugging Face
26Transformers' native ESMC implementation is another API: do not interchange its
27version requirements or output types with this SDK.

When to use

Use for Biohub's esm SDK: ESM3 masked multimodal generation, ESMC sequence representations, and ESMFold2 all-atom prediction. The former Forge platform migrated to https://biohub.ai, including ESM3; SDK class names still contain Forge. This skill targets the released esm 3.4.1.post1, verified against its wheel and current official documentation.

fair-esm is Meta's separate, older ESM2/ESMFold/ESM-IF distribution. Both packages import as esm; install them in separate environments. The legacy esm.pretrained.esm2_* interface is not the Biohub ESMC interface. Hugging Face Transformers' native ESMC implementation is another API: do not interchange its version requirements or output types with this SDK.

Raw lines 15 to 28
29## Setup and model choice
31```bash
32uv venv --python 3.12 .venv-esm
33uv pip install --python .venv-esm/bin/python "esm==3.4.1.post1"
34```
36The release declares Python >=3.12, Torch >=2.11,<2.12 and Transformers
37>=4.57.6,<5. Python 3.12, Torch 2.11.0 and Transformers 4.57.6 were tested on
38CPU. Linux x86_64 installs include GPU-specific dependencies; use a supported
39inference machine and budget disk space. Flash Attention is optional; it is
40unnecessary for the tiny CPU tests. Do not install this stack into a shared
41environment containing incompatible Transformers or Torch pins.
43| Task | Local model/API | Hosted client/model |
44| --- | --- | --- |
45| ESM3 sequence/structure/function generation | `ESM3.from_pretrained("esm3-sm-open-v1")` | `client("esm3-medium-2024-08")`; small/large IDs in the ESM3 reference |
46| ESMC embeddings | `EsmcForMaskedLM` and `EsmcTokenizer`; `biohub/ESMC-300M`, `biohub/ESMC-600M`, `biohub/ESMC-6B` | `esmc_client("esmc-600m-2024-12")`; 300M/6B also documented |
47| ESMFold2 all-atom structures | `EsmFold2Model`, `ESMFold2InputBuilder`; `biohub/ESMFold2` | `esmfold2_client("esmfold2-fast-2026-05")` |
49ESMC 6B weights are now available locally. Current Biohub model cards identify
50MIT licensing, with ESMC cards also linking third-party notices; review the
51exact selected artifact's card and access requirements.
52The older `ESMC` class remains as a deprecated compatibility wrapper. Local
53model sizes, hosted availability and account quotas are different constraints;
54a larger model does not guarantee better performance on a particular assay.

Setup and model choice

uv venv --python 3.12 .venv-esm
uv pip install --python .venv-esm/bin/python "esm==3.4.1.post1"

The release declares Python >=3.12, Torch >=2.11,<2.12 and Transformers

=4.57.6,<5. Python 3.12, Torch 2.11.0 and Transformers 4.57.6 were tested on

CPU. Linux x86_64 installs include GPU-specific dependencies; use a supported inference machine and budget disk space. Flash Attention is optional; it is unnecessary for the tiny CPU tests. Do not install this stack into a shared environment containing incompatible Transformers or Torch pins.

TaskLocal model/APIHosted client/model
ESM3 sequence/structure/function generationESM3.from_pretrained("esm3-sm-open-v1")client("esm3-medium-2024-08"); small/large IDs in the ESM3 reference
ESMC embeddingsEsmcForMaskedLM and EsmcTokenizer; biohub/ESMC-300M, biohub/ESMC-600M, biohub/ESMC-6Besmc_client("esmc-600m-2024-12"); 300M/6B also documented
ESMFold2 all-atom structuresEsmFold2Model, ESMFold2InputBuilder; biohub/ESMFold2esmfold2_client("esmfold2-fast-2026-05")

ESMC 6B weights are now available locally. Current Biohub model cards identify MIT licensing, with ESMC cards also linking third-party notices; review the exact selected artifact's card and access requirements. The older ESMC class remains as a deprecated compatibility wrapper. Local model sizes, hosted availability and account quotas are different constraints; a larger model does not guarantee better performance on a particular assay.

Raw lines 29 to 55
Runs code bin/python :33
56## Workflow
581. Specify the sequence/chain/residue mapping and whether the objective is
59 generation, representation extraction or folding. Preserve input IDs and
60 source provenance. Reject accidental `...`, spaces, FASTA headers or gaps
61 in plain single-chain sequences rather than silently deleting them.
622. Choose a local checkpoint or explicit hosted model ID. Record SDK, checkpoint
63 revision, model settings, mask locations and random seed where supported.
643. Check every SDK result for `ESMProteinError`. Hosted failures may be returned
65 as values. Use finite request timeouts, context managers and bounded
66 concurrency. See [hosted contracts](references/forge-api.md).
674. Validate the output contract: sequence length and fixed residues, residue-only
68 embedding axes, or chain/atom mapping and confidence. Keep model predictions
69 separate from experimental validation.
705. Save sequences/structures with settings and identifiers. Avoid caches keyed
71 only by sequence when model, structure, function or generation settings differ.

Workflow

  1. Specify the sequence/chain/residue mapping and whether the objective is generation, representation extraction or folding. Preserve input IDs and source provenance. Reject accidental ..., spaces, FASTA headers or gaps in plain single-chain sequences rather than silently deleting them.
  2. Choose a local checkpoint or explicit hosted model ID. Record SDK, checkpoint revision, model settings, mask locations and random seed where supported.
  3. Check every SDK result for ESMProteinError. Hosted failures may be returned as values. Use finite request timeouts, context managers and bounded concurrency. See hosted contracts.
  4. Validate the output contract: sequence length and fixed residues, residue-only embedding axes, or chain/atom mapping and confidence. Keep model predictions separate from experimental validation.
  5. Save sequences/structures with settings and identifiers. Avoid caches keyed only by sequence when model, structure, function or generation settings differ.
Raw lines 56 to 72
Reads a file references/forge-api.md :66
73## ESM3 completion and fresh structure prediction
75Illustrative pretrained inference; no weights or hosted jobs were run in this
76refresh. This toy sequence demonstrates API mechanics, not a functional design.
78```python
79import torch
80from esm.models.esm3 import ESM3
81from esm.sdk.api import ESMProtein, ESMProteinError, GenerationConfig
83model = ESM3.from_pretrained("esm3-sm-open-v1", device=torch.device("cpu"))
84prompt = "MPRT___KEND"
85completed = model.generate(
86 ESMProtein(sequence=prompt),
87 GenerationConfig(track="sequence", num_steps=3, temperature=0.7),
89if isinstance(completed, ESMProteinError):
90 raise completed
91assert completed.sequence is not None and len(completed.sequence) == len(prompt)
92assert "_" not in completed.sequence
93assert all(a == "_" or a == b for a, b in zip(prompt, completed.sequence))
95# A fresh sequence-only prompt prevents old coordinates conditioning the check.
96folded = model.generate(
97 ESMProtein(sequence=completed.sequence),
98 GenerationConfig(track="structure", num_steps=8),
100if isinstance(folded, ESMProteinError):
101 raise folded
102assert folded.coordinates is not None
103folded.to_pdb("candidate.pdb")
104```
106Generation fills masked positions. Calling it again on a completed track does
107not implement refinement or temperature annealing; explicitly remask selected
108positions or clear the track. ESM3 structure generation and ESMFold2 prediction
109use different models and result types. See [ESM3](references/esm3-api.md) for
110inverse folding, function vocabulary and coordinate conventions.

ESM3 completion and fresh structure prediction

Illustrative pretrained inference; no weights or hosted jobs were run in this refresh. This toy sequence demonstrates API mechanics, not a functional design.

import torch
from esm.models.esm3 import ESM3
from esm.sdk.api import ESMProtein, ESMProteinError, GenerationConfig

model = ESM3.from_pretrained("esm3-sm-open-v1", device=torch.device("cpu"))
prompt = "MPRT___KEND"
completed = model.generate(
    ESMProtein(sequence=prompt),
    GenerationConfig(track="sequence", num_steps=3, temperature=0.7),
)
if isinstance(completed, ESMProteinError):
    raise completed
assert completed.sequence is not None and len(completed.sequence) == len(prompt)
assert "_" not in completed.sequence
assert all(a == "_" or a == b for a, b in zip(prompt, completed.sequence))

# A fresh sequence-only prompt prevents old coordinates conditioning the check.
folded = model.generate(
    ESMProtein(sequence=completed.sequence),
    GenerationConfig(track="structure", num_steps=8),
)
if isinstance(folded, ESMProteinError):
    raise folded
assert folded.coordinates is not None
folded.to_pdb("candidate.pdb")

Generation fills masked positions. Calling it again on a completed track does not implement refinement or temperature annealing; explicitly remask selected positions or clear the track. ESM3 structure generation and ESMFold2 prediction use different models and result types. See ESM3 for inverse folding, function vocabulary and coordinate conventions.

Raw lines 73 to 111
Reads a file references/esm3-api.md :109
112## ESMC embeddings with correct residue pooling
114Illustrative pretrained loading; the same API and pooling were executed with a
115tiny randomly initialized model on CPU. Add this skill's `scripts/` directory to
116`PYTHONPATH` when importing the bundled helper.
118```python
119from esm.models.esmc import EsmcForMaskedLM, EsmcTokenizer
120from esm_embeddings import embed_sequences
122model = EsmcForMaskedLM.from_pretrained("biohub/ESMC-300M", device="cpu").eval()
123tokenizer = EsmcTokenizer()
124sequences = ["MPRTKEINDAGLIVHSPQWFYK", "ACDEFGHIK"]
125features = embed_sequences(model, tokenizer, sequences)
126assert features.shape == (2, 960)
127```
129`output.last_hidden_state` has shape `(B,T,D)` and includes CLS, EOS and padding;
130`T` is not the raw residue count. [scripts/esm_embeddings.py](scripts/esm_embeddings.py)
131performs one real padded batch, excludes special/padding tokens, validates the
132residue count, and returns `(B,D)` CPU features in input order. Choose batch size
133by sequence lengths and available memory. It does not truncate, download weights
134or contact a service. See [ESMC](references/esm-c-api.md) for hosted output types,
135per-residue extraction, gradient behavior and migration details.

ESMC embeddings with correct residue pooling

Illustrative pretrained loading; the same API and pooling were executed with a tiny randomly initialized model on CPU. Add this skill's scripts/ directory to PYTHONPATH when importing the bundled helper.

from esm.models.esmc import EsmcForMaskedLM, EsmcTokenizer
from esm_embeddings import embed_sequences

model = EsmcForMaskedLM.from_pretrained("biohub/ESMC-300M", device="cpu").eval()
tokenizer = EsmcTokenizer()
sequences = ["MPRTKEINDAGLIVHSPQWFYK", "ACDEFGHIK"]
features = embed_sequences(model, tokenizer, sequences)
assert features.shape == (2, 960)

output.last_hidden_state has shape (B,T,D) and includes CLS, EOS and padding; T is not the raw residue count. scripts/esm_embeddings.py performs one real padded batch, excludes special/padding tokens, validates the residue count, and returns (B,D) CPU features in input order. Choose batch size by sequence lengths and available memory. It does not truncate, download weights or contact a service. See ESMC for hosted output types, per-residue extraction, gradient behavior and migration details.

Raw lines 112 to 136
Runs code scripts/esm_embeddings.py :130
Reads a file scripts/esm_embeddings.py :130
Reads a file references/esm-c-api.md :134
137## Hosted authentication and folding
139Read only the intended credential from the environment; pass it explicitly so
140it is resolved when the client is created. SDK factory defaults capture
141`ESM_API_KEY` at import time. Create keys in the
142[Biohub developer console](https://biohub.ai/developer-console/api-keys).
144Illustrative authenticated inference:
146```python
147import os
148from esm.sdk import esmfold2_client
149from esm.sdk.api import ESMProteinError, FoldingConfig
150from esm.utils.structure.input_builder import ProteinInput, StructurePredictionInput
152fold_input = StructurePredictionInput(
153 sequences=[ProteinInput(id="A", sequence="MPRTKEINDAGLIVHSPQWFYK")]
155with esmfold2_client(
156 model="esmfold2-fast-2026-05", url="https://biohub.ai",
157 token=os.environ["ESM_API_KEY"], request_timeout=300,
158) as client:
159 result = client.fold_all_atom(fold_input, config=FoldingConfig())
160if isinstance(result, ESMProteinError):
161 raise result
162with open("candidate.cif", "w") as handle:
163 handle.write(result.complex.to_mmcif())
164```
166Use the [Biohub/ESMFold2 reference](references/biohub-platform.md) for MSA,
167confidence and complex-input conventions. The fast hosted model ignores MSAs.
168Public source and mocked requests validate the client contract; they do not
169establish account access, service availability or prediction quality.

Hosted authentication and folding

Read only the intended credential from the environment; pass it explicitly so it is resolved when the client is created. SDK factory defaults capture ESM_API_KEY at import time. Create keys in the Biohub developer console.

Illustrative authenticated inference:

import os
from esm.sdk import esmfold2_client
from esm.sdk.api import ESMProteinError, FoldingConfig
from esm.utils.structure.input_builder import ProteinInput, StructurePredictionInput

fold_input = StructurePredictionInput(
    sequences=[ProteinInput(id="A", sequence="MPRTKEINDAGLIVHSPQWFYK")]
)
with esmfold2_client(
    model="esmfold2-fast-2026-05", url="https://biohub.ai",
    token=os.environ["ESM_API_KEY"], request_timeout=300,
) as client:
    result = client.fold_all_atom(fold_input, config=FoldingConfig())
if isinstance(result, ESMProteinError):
    raise result
with open("candidate.cif", "w") as handle:
    handle.write(result.complex.to_mmcif())

Use the Biohub/ESMFold2 reference for MSA, confidence and complex-input conventions. The fast hosted model ignores MSAs. Public source and mocked requests validate the client contract; they do not establish account access, service availability or prediction quality.

Raw lines 137 to 170
171## Scientific checks
173- Function annotations use supported tokenizer labels and **1-based inclusive**
174 ranges; arbitrary labels such as `enzymatic_activity` are not valid prompts.
175- ESM3 coordinates are tensors in atom37 layout; missing atoms use NaN. Tensor
176 copies use `.clone()`. Specify a PDB chain instead of assuming the default
177 selects one chain; the current default is `chain_id="all"`.
178- Predicted coordinates, pLDDT and pTM do not measure thermodynamic stability,
179 binding affinity or catalytic activity. Inverse-folded sequences need fresh
180 prediction, matched-residue structural comparison and experimental screening.
181- Embedding similarity is not a homology/function guarantee. Evaluate supervised
182 models with homology-aware splits; fit normalization and dimensionality
183 reduction on training data. Report uncertainty and independent holdout metrics.
184- See [worked workflows](references/workflows.md) for variant libraries,
185 structure-conditioned design, and clustering without unsupported stability
186 scores or fixed PCA/t-SNE settings that fail on tiny datasets.

Scientific checks

  • Function annotations use supported tokenizer labels and 1-based inclusive ranges; arbitrary labels such as enzymatic_activity are not valid prompts.
  • ESM3 coordinates are tensors in atom37 layout; missing atoms use NaN. Tensor copies use .clone(). Specify a PDB chain instead of assuming the default selects one chain; the current default is chain_id="all".
  • Predicted coordinates, pLDDT and pTM do not measure thermodynamic stability, binding affinity or catalytic activity. Inverse-folded sequences need fresh prediction, matched-residue structural comparison and experimental screening.
  • Embedding similarity is not a homology/function guarantee. Evaluate supervised models with homology-aware splits; fit normalization and dimensionality reduction on training data. Report uncertainty and independent holdout metrics.
  • See worked workflows for variant libraries, structure-conditioned design, and clustering without unsupported stability scores or fixed PCA/t-SNE settings that fail on tiny datasets.
Raw lines 171 to 187
Reads a file references/workflows.md :184
188## Verification and sources
190[references/review.md](references/review.md) records official sources, executed
191CPU tests and limitations. Run `python tests/run_all.py --isolated esm` from the
192repository to exercise synthetic local models, pooling, input serialization,
193PDB round trips and mocked hosted contracts. Pretrained ESM3/ESMC/ESMFold2,
194CUDA inference and authenticated services were not executed.
196Follow the selected model's terms and the
197[Biohub acceptable-use policy](https://biohub.org/acceptable-use-policy/).

Verification and sources

references/review.md records official sources, executed CPU tests and limitations. Run python tests/run_all.py --isolated esm from the repository to exercise synthetic local models, pooling, input serialization, PDB round trips and mocked hosted contracts. Pretrained ESM3/ESMC/ESMFold2, CUDA inference and authenticated services were not executed.

Follow the selected model's terms and the Biohub acceptable-use policy.

Raw lines 188 to 198
Reads a file references/review.md :190
Runs code python tests/run_all.py :191
Boilerplate, lines 199 to 214. The same text appears in 125 other files here. Close
199## Citing Scientific Agent Skills
201This skill is part of Scientific Agent Skills by K-Dense. If it materially contributed to a
202manuscript, report, presentation, or code release, add the paper to the references or
203software section and tell the user you did so:
205> Kassis, T., Agarwal, V., He, Y., Patel, D., & Brueckner, A. M. (2026). Scientific Agent
206> Skills: A Library of Procedural Knowledge for Research Agents. arXiv:2609.00065.
207> https://doi.org/10.48550/arXiv.2609.00065
209Always cite the current version. The DOI and https://arxiv.org/abs/2609.00065 resolve to the
210latest arXiv version, so never append a version suffix such as `v1`. When network access is
211available, fetch https://arxiv.org/abs/2609.00065 (or
212http://export.arxiv.org/api/query?id_list=2609.00065) before writing the reference and take
213the author list, year, and version from that record. If the record lists a journal reference
214or publisher DOI, cite the published version instead.

From K-Dense-AI/scientific-agent-skills at 5f2bc03, 2026-10-26. Not read by a model yet. Summary and techniques by Claude Opus 5.5 on 2026-11-06.