jinzhezenggroup/packmol-generate-mixture
> A tool for generating initial packed molecular configurations (XYZ format) from single-molecule structures by calculating box dimensions, writing input scripts, and executing Packmol. USE WHEN you need to randomly pack a specific number of molecules into a simulation box (defined by target density or fixed lengths) to create starting geometries for molecular dynamics or related computational chemistry workflows.
npx skills add https://github.com/jinzhezenggroup/computational-chemistry-agent-skills --skill packmol-generate-mixture
Use Packmol to generate an initial packed configuration for a molecular mixture.
species1.xyz, species2.xyz)species1: 100, species2: 650)tolerance (Å)box_length_A: use it.box_length_A from density (see formula below).${system_name}.inp:structure ... end structure block per componentinside box 0 0 0 L L Luvx packmol -i ${system_name}.inpuvx --from packmol packmol -i ${system_name}.inpIf the user plans to run LAMMPS (especially ReaxFF), they often need a LAMMPS data file with correct box bounds.
lammps-md-tools from PyPI:uvx --from lammps-md-tools lammps-fix-box \
--in input.data \
--out output.boxfix.data \
--L 60.690 \
--wrap
This rewrites xlo/xhi, ylo/yhi, zlo/zhi to 0..L, zeroes tilt factors, and optionally wraps atoms into the box.
If the user didn’t specify them, ask at minimum:
species1=100, species2=650)tolerance (Å) should be used? (common starting point: 2.0 Å)If the user says “use defaults”, propose defaults:
tolerance = 2.0 Åpacked/ subfolder under the folder containing the input XYZExample (replace with your own species/files):
system_name: mixture_pack
output_dir: /path/to/output/packed
# Choose ONE of the following:
density_g_cm3: 0.25
# box_length_A: 60.69
tolerance_A: 2.0
components:
- name: species1
structure_file: /path/to/species1.xyz
number: 100
- name: species2
structure_file: /path/to/species2.xyz
number: 650
When density_g_cm3 is provided and box_length_A is not, estimate L from total mass:
m_cfg = M_total / N_A (g)V_cm3 = m_cfg / density_g_cm3V_A3 = V_cm3 * 1e24L_A = V_A3 ** (1/3)This is an initial packing estimate (geometry construction), not an equilibrated density.
The run should produce (within output_dir):
${system_name}.inp (Packmol input)${system_name}.xyz (packed XYZ output; name may include _packed suffix)packmol.out (stdout log; capture with tee)Take jinzhezenggroup/packmol-generate-mixture from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
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.
The instructions reference uvx.
Without those the skill loads but fails at the first command.