mcpbeat

Gjf Flux

jinzhezenggroup/gjf-flux

> Assemble and extract Gaussian .gjf input file sections (directives, route, title, molecule blocks, appendices) and build single- or multi-step Link1 jobs from modular component files. USE WHEN needed for generating, refactoring, templating, or scripting Gaussian job files.

2k tokens
context cost
the whole folder, loaded on every use
1
files
instructions only
0
copies elsewhere
how many repositories repackaged it
118
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/jinzhezenggroup/computational-chemistry-agent-skills --skill gjf-flux

The instruction itself

16 sections, as written by the author

gjf-flux (Gaussian Job File Assembly & Extraction)

gjf-flux is a command-line workflow for modular Gaussian .gjf files:

  • Extract a specific section from an existing .gjf (including Link1 multi-step jobs).
  • Assemble directives/route/molecule/appendix blocks into a complete .gjf, or merge multiple tasks into a Link1 job.

When to use

Use this skill when you need to:

  • Reuse parts of Gaussian inputs across many calculations (e.g., route lines, molecule blocks, basis/constraints appendices).
  • Programmatically build .gjf jobs from smaller files (fragments, templates, parameterized directives).
  • Inspect/compare .gjf files by extracting specific sections.

Assumptions / Parsing model (important)

gjf-flux assumes a standard Gaussian input layout:

  • Link1 steps are separated by a blank line, then --Link1--, then a newline.
  • Within each Link1 step, blocks are separated by blank lines.
  • The route section begins at the first line starting with # and continues through subsequent lines.
  • A molecule block is detected when the first line of a block looks like paired integers

(e.g., 0 1 or 0 1 0 1 0 1), representing charge/multiplicity pairs.

If a .gjf deviates from these conventions, extraction may fail or misclassify blocks.

Inputs you should request from the user

When helping a user, clarify:

  • Target action: extract vs assemble.
  • File paths:
  • Existing .gjf to read, or component files to assemble.
  • For Link1 jobs:
  • Which step to extract (job_index, 0-based), or how many steps to assemble.
  • Molecule content:
  • Total charge/multiplicity, fragment charge/multiplicity (if using fragments), coordinate format.
  • Appendices:
  • Whether there are basis sets, ECPs, ModRedundant constraints, etc.

Core commands (cheat sheet)

1) Extract a section from a .gjf

uvx gjf-flux extract <section_name> <FILE.gjf> [--job_index N]

Where <section_name> is one of:

  • directives
  • route
  • title
  • molecule or molecule-<idx>
  • appendix or appendix-<idx>

Notes:

  • <idx> is 0-based.
  • --job_index selects the Link1 step (0-based, default 0).

Examples:

# Extract the route line from the first Link1 step
uvx gjf-flux extract route input.gjf

# Extract the second molecule block from step 0
uvx gjf-flux extract molecule-1 input.gjf

# Extract the first appendix block from Link1 step 2
uvx gjf-flux extract appendix-0 input.gjf --job_index 2

2) Assemble directives (Link0 commands)

uvx gjf-flux assemble directives --chk FILE --mem SIZE --nprocshared N

This command accepts key/value pairs in the form --key value.

Examples:

uvx gjf-flux assemble directives --chk job.chk --mem 16GB --nprocshared 16

Tip: redirect to a file for later composition:

uvx gjf-flux assemble directives --chk job.chk --mem 16GB --nprocshared 16 > directives.txt

3) Assemble the route section (# line)

uvx gjf-flux assemble route [-l p|n|t|""] <keywords...>

Examples:

#p Opt B3LYP/6-31G(d)
uvx gjf-flux assemble route -l p Opt B3LYP/6-31G(d)

# Use quotes for keywords with parentheses
uvx gjf-flux assemble route -l p "Opt(MaxCycle=100)" "Freq"

Tip:

uvx gjf-flux assemble route -l p "Opt(MaxCycle=100)" "Freq" > route.txt

4) Merge molecule fragments into one molecule block

uvx gjf-flux assemble molecules <frag1.txt> <frag2.txt> ... [--as-fragment] [--charge INT] [--multi INT]

Each fragment file must follow this format:

  • Line 1: charge multiplicity (e.g., 0 1)
  • Following lines: atomic coordinates (Gaussian-style)

Modes:

  • Default: merges into a single molecule block.
  • --as-fragment: assigns Fragment=1,2,... tags and expands the charge/multiplicity header.

Examples:

# Merge two fragments into a single molecule block
uvx gjf-flux assemble molecules fragA.txt fragB.txt > molecule.txt

# Merge as fragments, overriding total charge/multiplicity
uvx gjf-flux assemble molecules fragA.txt fragB.txt --as-fragment --charge 0 --multi 1 > molecule.txt

5) Assemble appendices

uvx gjf-flux assemble appendices <app1.txt> <app2.txt> ...

Examples:

uvx gjf-flux assemble appendices basis.txt modredundant.txt > appendix.txt

6) Assemble a complete single-step .gjf

uvx gjf-flux assemble job \
    --directives directives.txt \
    --route route.txt \
    --title "Your title" \
    --molecule molecule.txt [molecule2.txt ...] \
    [--appendices appendix.txt ...]

7) Merge multiple tasks into a Link1 multi-step job

uvx gjf-flux assemble tasks step1.gjf step2.gjf [step3.gjf ...] > link1.gjf

End-to-end example (one-liners with command substitution)

This example shows a single-step job assembled from:

  • directives: produced directly from CLI flags
  • route: produced inline from assemble route
  • molecule: extracted from an existing .gjf, then re-merged (optionally overriding multiplicity)
  • appendices: extracted from other .gjf files and concatenated

> Note: This uses bash/zsh process substitution (<(...)). If you are on a shell that does not support it, redirect each block into a file first.

# 1) Build directives to a file (recommended; easier to audit)
uvx gjf-flux assemble directives --chk job.chk --mem 16GB --nprocshared 16 > directives.txt

# 2) Assemble a full .gjf using inline-generated route/molecule/appendix blocks
uvx gjf-flux assemble job \
    --directives directives.txt \
    --route <(uvx gjf-flux assemble route -l p "Opt(MaxCycle=100)" "Freq" B3LYP/6-31G(d)) \
    --title "Opt+Freq from extracted building blocks" \
    --molecule <( \
        gjf-flux assemble molecules \
        <(uvx gjf-flux extract molecule-0 reactant.gjf) \
        fragment_extra.xyz \
        --multi 1 \
    ) \
    --appendices \
    <(uvx gjf-flux extract appendix-1 reactant.gjf) \
    <(uvx gjf-flux extract appendix-0 reference.gjf) \
    app_manual.txt \
    > job.gjf

Variants:

  • If you only want to reuse an extracted molecule block verbatim (no merge), pass:
  • --molecule <(uvx gjf-flux extract molecule-0 input.gjf)
  • If you are assembling a Link1 workflow, build each step as its own .gjf and then:
  • uvx gjf-flux assemble tasks step1.gjf step2.gjf > link1.gjf
  • Create/derive component blocks:
  • directives.txt (from assemble directives or manual)
  • route.txt (from assemble route)
  • molecule.txt (from assemble molecules or extracted from a prior .gjf)
  • appendix.txt (optional)
  • Assemble a complete job via assemble job.
  • If you have multiple steps, build each step as a .gjf and then merge using assemble tasks.
  • Verify by extracting critical sections from the final output.

Common pitfalls

  • Wrong indexing: job_index, molecule-<idx>, and appendix-<idx> are all 0-based.
  • Non-standard .gjf formatting: unusual blank-line structure can break parsing.
  • Fragment files must start with charge multiplicity: otherwise molecule merge will fail.
  • Keyword quoting: route keywords with parentheses should be quoted in the shell.

Notes for agents

  • Prefer asking the user for a concrete example .gjf if parsing fails.
  • When assembling, keep each component file small and purpose-specific; it makes debugging far easier.
  • If the user wants a repeatable pipeline, suggest storing reusable components (route templates, basis set appendices, fragment libraries) in version control.

How to use it

Copy the folder

Take jinzhezenggroup/gjf-flux 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 uvx. Without those the skill loads but fails at the first command.