mcpbeat Sign in

Evo2 Agent Skill

> Score, embed, and generate DNA sequences with Evo 2, a long-context genomic (1) Computing per-nucleotide or per-sequence likelihoods for variant effect scoring, (2) Embedding genomic windows for downstream classification, (3) Generating DNA conditioned on a prefix, (4) Scoring regulatory or coding regions across species.

1.4k tokens
context cost
SKILL.md, read when the skill is used
2
files
plus reference files
0
copies elsewhere
how many repositories repackaged it
4 788
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/aipoch/open-science --skill evo2

What comes with it

13 bytes besides the instruction
.catalog_stamp

The instruction itself

12 sections, as written by the author

Evo 2 — DNA Language Model

Prerequisites

| Requirement | Minimum | Recommended |

| ----------- | --------------- | ------------ |

| Python | 3.11 | 3.12 (<3.13) |

| CUDA | 12.1+ | 12.4+ |

| GPU VRAM | 24 GB (7B bf16) | 80 GB (40B) |

| RAM | 32 GB | 128 GB |

How to run

Installation

pip install evo2
# Weights pulled from Hugging Face on first model load.

Loading and scoring

from evo2 import Evo2

model = Evo2("evo2_7b")        # or "evo2_40b" — see model table
seqs = ["ATCG" * 50, "GGGCTTAA" * 25]
ll = model.score_sequences(seqs)   # → list[float], mean per-token log-likelihood
print(ll)

Generation

out = model.generate(
    prompt_seqs=["ATGAAAGCT"],
    n_tokens=256,
    temperature=0.7,
)
print(out.sequences[0])

Models

| Name | Params | Context | VRAM (bf16) | Notes |

| -------------- | ------ | ------- | ----------- | ------------------------------------ |

| evo2_7b | 7 B | 1 M nt | ~22 GB | Default; fits on a single 24 GB+ GPU |

| evo2_40b | 40 B | 1 M nt | ~78 GB | H100 80 GB or multi-GPU |

| evo2_1b_base | 1 B | 8 K nt | ~6 GB | FP8 path requires sm_89+ (H100) |

Output format

score_sequences returns a list[float] (or np.ndarray) of mean log-likelihoods,

one per input sequence. More negative ⇒ less likely under the model. For variant

effect, compute Δll = ll_alt - ll_ref over a fixed window.

generate returns a GenerationOutput with .sequences (list[str]), .logits

(list[Tensor]), and .logprobs_mean (list[float]) — always populated, no flag required.

Decision tree

Need a DNA model?
│
├─ Per-base/per-sequence likelihood, generation → Evo 2 ✓
├─ Predict experimental tracks (expression, accessibility) → borzoi
└─ Protein, not DNA → fair-esm2 / esmfold2

Remote compute

7B/40B inference is GPU-bound (≥24 GB / 80 GB VRAM). Read

compute_details({provider, mode:'read'}) for an environment with evo2 +

flash-attn and a pre-cached HF weight mount, then submit:

c = host.compute.create(provider)
job = c.submitJob(
    intent="Evo2-7B score 200bp variant window — 1×GPU, ~2 min",
    inputs=[{"src": "score_evo2.py", "dstFilename": "score_evo2.py"}],
    command="python3 score_evo2.py",   # env selection is host-specific — see compute_details for your provider
    outputs=["scores.json"],
    timeoutSeconds=1800,
)
print(job.job_id)   # cell ends here — kernel never blocks on compute

Retain the exact returned job_id. Query that saved ID with the non-blocking

c.attachJob(job_id).status() or .result() when its state or result is relevant; do not scan Job

history. A final .result() read reports whether its follow-up was suppressed or had already been

committed; otherwise the app starts the later analysis turn for an unread final result. See the

remote-compute-ssh skill for details.

Inside score_evo2.py, point HF_HOME at the provider's weight-cache mount

(path is in compute_details) and set HF_HUB_OFFLINE=1 so the loader

doesn't try to write refs/ into a read-only mount. Weight footprint:

~15 GB (7B), ~80 GB (40B).

Typical performance

| Task | 7B on H100 | Notes |

| ---------------------------- | ---------- | --------------------------- |

| Model load (cached) | ~5-7 min | First call hydrates weights |

| score_sequences, 200×200bp | ~10-20 s | After load |

| generate, 1×512 nt | ~15 s | |

Troubleshooting

| Symptom | Cause | Fix |

| ------------------------------------- | ---------------------------- | ------------------------------------------- |

| Transformer Engine not installed | No FP8 — falls back to bf16 | Informational only on non-H100; ignore |

| OOM on load | 40B on <80 GB GPU | Use evo2_7b or shard with device_map |

| HF tries to write refs/main | HF_HOME points at RO mount | Set HF_HUB_OFFLINE=1 |

| dtype mismatch in score_sequences | Passing tensors not strings | Pass list[str]; the API tokenises for you |


Next: pair with borzoi to predict track-level effects of the same

variants.

How to use it

Copy the folder

Take aipoch/evo2 from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.

Install what it needs

The instructions reference pip. Without those the skill loads but fails at the first command.