Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Visualize, analyze, and render protein and molecular structures using PyMOL. Use when the user wants to create images of protein structures, perform structural alignments or superposition, measure distances or contacts, highlight binding sites or active site residues, color by B-factor/pLDDT, or analyze protein-ligand interactions. Do not use for docking, molecular dynamics, or sequence-only analysis.
.claude/skills/mkurman-pymol/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 111% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 188% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 99% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 79% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 77% | 0% |
uv: Read the uv skill and follow its Setup instructions to ensureuv is installed and on PATH.
this skill directory then (1) prominently notify the user to check the license at https://www.pymol.org/, then (2) create the file recording the notification text and timestamp.
All PyMOL commands run on the host via uv with OSMesa software rendering — no GPU, display, or X server is needed. Structure files must be downloaded to the host before running PyMOL.
Do NOT use when:
first. Check if any other installed skills can retrieve structures from the PDB or AlphaFold Database before proceeding.
Ensure that uv is installed on the host system. The PyMOL scripts use PEP 0723 headers to declare their dependencies, and uv run will automatically handle installing them (including pymol-open-source-whl) when the script is executed.
Always run PyMOL scripts from the user's project directory.
cmd.png() for output. Never usecmd.draw() or cmd.ray() with hardware acceleration — OSMesa does not support it. Set environment variable PYOPENGL_PLATFORM=osmesa for headless rendering.
.pse session file alongside any PNG output. This letsthe user open the session in their local PyMOL for further inspection.
cmd.quit() at the end of every PyMOL script. Omitting itcauses the process to stop responding.
initialization sequence. from pymol import cmd must come after finish_launching(), not before.
selection syntax, common commands, and gotchas.
you MUST verify that the requested structure file actually exists on the host machine.
cmd.load(),always verify it succeeded by checking cmd.count_atoms("all"). If the result is 0, print an error to stdout and call cmd.quit() immediately.
output.
render.py) with the required initboilerplate and PEP 0723 header.
uv run: bash uv run render.pyrender.py)python# /// script # requires-python = ">=3.10, <3.13" # dependencies = [ # "pymol-open-source-whl", # ] # /// import os import sys # Set environment variable for headless rendering os.environ["PYOPENGL_PLATFORM"] = "osmesa" import pymol # pytype: disable=import-error pymol.pymol_argv = ["pymol", "-cq"] pymol.finish_launching() from pymol import cmd # pytype: disable=import-error cmd.load("AF-P00520-F1-model_v4.cif", "structure") cmd.show("cartoon") cmd.color("green", "ss h") cmd.color("yellow", "ss s") cmd.color("gray", "ss l+''") cmd.orient() cmd.set("ray_opaque_background", 1) cmd.png("output/render.png", width=1200, height=900, dpi=150) cmd.save("output/session.pse") cmd.quit()
See references/RECIPES.md for complete, copy-paste ready recipes. Available recipes:
coloring
focus
contacts
.pse fileoutput/ directory contains PNG images and a .pse session file.stdout by the PyMOL script. Report these values to the user.
.pse file in their local PyMOL to furtherexplore, rotate, or modify the visualization.
.pse in a new script andre-run.
--max_output_mb limit (default500 MB). Increase it with --max_output_mb=1000 if needed.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-19 | pass→pass | 13,729 | 14,841 | +8% | 1 | 1 | 0% | 2,316 | 4,032 | +74% | 0 | 0 | — |
case-01 | fail→fail | 8,229 | 6,479 | -21% | 1 | 1 | 0% | 1,547 | 1,861 | +20% | 0 | 0 | — |
case-02 | fail→fail | 18,127 | 7,728 | -57% | 1 | 1 | 0% | 3,583 | 1,900 | -47% | 0 | 0 | — |
case-03 | fail→fail | 12,938 | 7,826 | -40% | 1 | 1 | 0% | 2,162 | 1,984 | -8% | 0 | 0 | — |
case-04 | fail→pass | 9,658 | 11,287 | +17% | 1 | 1 | 0% | 1,523 | 3,210 | +111% | 0 | 0 | — |
case-05 | fail→fail | 20,914 | 25,380 | +21% | 1 | 1 | 0% | 4,412 | 6,478 | +47% | 0 | 0 | — |
case-06 | fail→fail | 16,113 | 10,061 | -38% | 1 | 1 | 0% | 2,708 | 2,182 | -19% | 0 | 0 | — |
case-07 | fail→fail | 8,114 | 8,568 | +6% | 1 | 1 | 0% | 386 | 2,028 | +425% | 0 | 0 | — |
case-08 | fail→pass | 6,853 | 14,716 | +115% | 1 | 1 | 0% | 1,153 | 3,315 | +188% | 0 | 0 | — |
case-09 | fail→pass | 9,053 | 12,051 | +33% | 1 | 1 | 0% | 1,607 | 3,204 | +99% | 0 | 0 | — |
case-10 | fail→pass | 12,477 | 11,738 | -6% | 1 | 1 | 0% | 2,199 | 3,936 | +79% | 0 | 0 | — |
case-11 | fail→pass | 16,267 | 34,908 | +115% | 1 | 1 | 0% | 2,979 | 5,270 | +77% | 0 | 0 | — |
case-12 | fail→pass | 34,969 | 9,519 | -73% | 1 | 1 | 0% | 6,173 | 3,325 | -46% | 0 | 0 | — |
case-13 | pass→pass | 6,151 | 8,986 | +46% | 1 | 1 | 0% | 1,095 | 3,315 | +203% | 0 | 0 | — |
case-14 | pass→pass | 8,354 | 12,690 | +52% | 1 | 1 | 0% | 1,383 | 3,961 | +186% | 0 | 0 | — |
case-15 | pass→pass | 12,740 | 12,500 | -2% | 1 | 1 | 0% | 2,143 | 3,981 | +86% | 0 | 0 | — |
case-16 | pass→pass | 9,785 | 15,170 | +55% | 1 | 1 | 0% | 1,520 | 3,466 | +128% | 0 | 0 | — |
case-17 | pass→pass | 16,482 | 18,303 | +11% | 1 | 1 | 0% | 1,868 | 5,218 | +179% | 0 | 0 | — |
case-18 | fail→pass | 12,289 | 21,562 | +75% | 1 | 1 | 0% | 2,273 | 5,321 | +134% | 0 | 0 | — |
case-20 | pass→fail | 14,945 | 6,692 | -55% | 1 | 1 | 0% | 2,388 | 1,823 | -24% | 0 | 0 | — |
case-21 | pass→pass | 11,321 | 14,068 | +24% | 1 | 1 | 0% | 2,060 | 4,490 | +118% | 0 | 0 | — |
case-22 | pass→pass | 8,612 | 14,095 | +64% | 1 | 1 | 0% | 1,181 | 3,516 | +198% | 0 | 0 | — |
case-23 | pass→fail | 14,736 | 6,618 | -55% | 1 | 1 | 0% | 2,505 | 1,888 | -25% | 0 | 0 | — |
case-24 | pass→pass | 6,783 | 11,674 | +72% | 1 | 1 | 0% | 1,233 | 3,806 | +209% | 0 | 0 | — |
case-25 | pass→fail | 11,784 | 9,141 | -22% | 1 | 1 | 0% | 2,164 | 2,248 | +4% | 0 | 0 | — |
case-26 | pass→pass | 12,011 | 12,623 | +5% | 1 | 1 | 0% | 2,176 | 3,996 | +84% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 26 cases were attempted, and 18 counted toward the lift figure. The other 8 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +15 percentage points is the difference between those two pass rates over the 18 comparable cases. 5 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.