From full
Maps computational materials tasks to workflow engines (atomate2, jobflow, AiiDA, pyiron, or scripts) based on reproducibility, provenance, restart, and HPC needs.
How this skill is triggered — by the user, by Claude, or both
Slash command
/full:workflow-engine-mapperThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Choose the smallest workflow structure that preserves reproducibility, restartability, and provenance for a materials simulation task.
Choose the smallest workflow structure that preserves reproducibility, restartability, and provenance for a materials simulation task.
| Input | Description | Example |
|---|---|---|
| Task | Workflow purpose | VASP relax-static-DOS for 200 structures |
| Code | Main simulation engine | vasp, qe, lammps, ase |
| Runs | Approximate number of calculations | 200 |
| Provenance | Whether audit trail matters | true |
| Restart | Whether jobs may resume after failure | true |
| HPC | Whether remote scheduler is required | true |
The recommendations are emitted in a fixed precedence so the prose and the implemented thresholds agree: an explicit --preferred engine overrides everything; otherwise one-off (small local, no provenance/HPC) -> AiiDA (provenance AND remote/large) -> atomate2 (VASP/QE/CP2K/force-field, >= 10 runs) -> pyiron (ASE/LAMMPS, no provenance) -> jobflow (fallback).
scripts/workflow_engine_mapper.py emits:
recommended_enginedag_patternprovenance_requirementsrestart_strategystorage_layoutmigration_triggersnotespython3 skills/simulation-workflow/workflow-engine-mapper/scripts/workflow_engine_mapper.py \
--task "relax static dos for 200 oxides" \
--code vasp \
--runs 200 \
--needs-provenance \
--needs-restart \
--hpc \
--json
Use the output to scaffold the workflow before writing engine-specific code.
If the task has too few details, choose the conservative pattern and ask for engine, run count, and restart needs before implementation.
The skill does not replace the official APIs of atomate2, jobflow, AiiDA, or pyiron; it selects and explains the workflow shape.
--json payload from workflow_engine_mapper.py (including inputs) and confirmed the echoed runs, code, needs_provenance, needs_restart, and hpc match the task you actually intend, not a guessed default.recommended_engine follows the documented precedence for these inputs: --preferred override -> one-off (runs<5, no provenance, no HPC) -> aiida (provenance AND (hpc or runs>=50)) -> atomate2 (code in vasp/qe/cp2k/forcefield AND runs>=10) -> pyiron (ase/lammps, no provenance) -> jobflow fallback; if the result surprises you, re-check which branch the inputs hit rather than overriding blindly.dag_pattern reflects the task keywords: branch terms (dos/band/phonon/static) and sweep terms (screen/sweep/campaign/many/batch) compose into the map+branch pattern, and with restart checkpoints is appended only when --needs-restart was passed.provenance_requirements and restart_strategy against intent: store_code_version/store_environment, checkpoint_jobs (also auto-true at runs>=20), and resume_by_job_id_or_name (false for one-off) are consistent with how the campaign will actually be audited and resumed.migration_triggers; for a one-off recommendation, confirmed the forward-looking "migrate once results are compared/published/screened/resumed or runs reach ~5+" entry is present and planned for, rather than treating one-off as permanent.storage_layout (inputs/, runs/<job-id>/, outputs/, metadata/workflow.json, reports/) as the on-disk scaffold and confirmed it maps onto the chosen engine's native store before writing engine-specific code.0 (a 2 means input validation rejected the args and no recommendation was produced) before trusting any output.| Tempting shortcut | Why it's wrong / what to do |
|---|---|
| "It's only a few runs now, so a one-off script is fine forever." | The mapper emits a migration_triggers entry precisely because one-off is exploratory-only; once results are compared, published, screened, or resumed (or runs reach ~5+), promote to an engine. Treat one-off as a starting point, not a destination. |
| "I need provenance, so the answer must be AiiDA." | AiiDA is gated on provenance AND (HPC or runs>=50). For smaller/local provenance needs the mapper deliberately picks atomate2 or jobflow, whose stores already capture inputs, outputs, code version, and environment. Do not reach for the heavier stack when the lighter store suffices. |
| "The engine ran and printed a recommendation, so the inputs were right." | The script validates bounds, not intent. A forgotten --needs-provenance or --hpc flag, or a defaulted --code general, silently changes the branch taken. Re-read the echoed inputs block in the JSON and confirm each flag matches the real task. |
| "It's a screening campaign, so the DAG is just a map over structures." | If the task also names a property (dos/band/phonon/static), the correct pattern composes both: map over structures -> (relax -> static -> property branches) -> collect -> rank. Check that branch and sweep keywords both surfaced in dag_pattern. |
| "Restart isn't critical, so I can skip checkpointing." | checkpoint_jobs is also forced true at runs>=20 independent of --needs-restart, because large sweeps fail partway. Honor the emitted restart_strategy rather than your gut feel about restart importance. |
"The recommended engine doesn't match what I'd have picked, so I'll just use --preferred." | --preferred overrides everything before any heuristic runs, so it can mask a genuine mismatch in your inputs. First confirm runs/code/provenance/HPC are stated correctly; only override when you have a specific reason, and record it. |
--needs-provenance, --needs-restart, --hpc, --json via store_true).runs must be a positive integer (rejects booleans, non-integers, and values <= 0) and is capped at MAX_RUNS = 1,000,000; main() also rejects non-finite values via math.isfinite.task <= 2000 characters (MAX_TASK_LEN) and must be non-empty after stripping; code and preferred <= 100 characters each (MAX_FIELD_LEN).preferred must be one of the allowed engine names: auto, one-off, jobflow, atomate2, aiida, pyiron.task and code strings are not otherwise restricted by an allowlist; only their length and (for task) emptiness are validated.ValueError, which is printed to stderr and exits with code 2 before any recommendation is computed.allowed-tools: Read, Bash, Write, Grep, Glob.Bash is used only to run the bundled scripts/workflow_engine_mapper.py.Read/Grep/Glob are used to inspect the skill's own files and references (e.g. references/workflow_engines.md) and the user's task context; Write is available to scaffold workflow files from the recommended structure.eval/exec, no subprocess, and no shell invocation inside the script.json.dumps (with --json) or plain text summary lines.runs ceiling (1,000,000) and the task/code/preferred length caps prevent unbounded input.references/workflow_engines.md for engine selection heuristics.script_checks that pin the mapper's exact output (recommended_engine, dag_pattern, provenance_requirements, restart_strategy, migration_triggers) so each case discriminates the skill from a from-memory baseline.npx claudepluginhub heshamfs/materials-simulation-skills --plugin core-numericalBuilds reproducible workflows with Snakemake: define rules for file dependencies, automatic parallelism, and per-rule conda/Singularity envs. Scales NGS/ML pipelines from local to SLURM/AWS/GCP.
Generates correct SLURM sbatch job scripts with MPI/OpenMP layout guidance, resource validation, and conflict detection. Use when preparing cluster submissions or debugging job failures.
Authors a reusable, deterministic agent orchestration workflow as a self-contained .mjs script for Claude Code's Workflow tool, with structured phases, fan-out, and verification.