Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Orchestrate multi-simulation campaigns including parameter sweeps, batch jobs, and result aggregation. Use for running parameter studies, managing simulation batches, tracking job status, combining results from multiple runs, or automating simulation workflows.
.claude/skills/simulation-orchestrator/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | — | — |
| case-15 | ✗→✓ | ▲ Improved | — | — |
| case-14 | ✗→✓ | ▲ Improved | — | — |
| case-13 | ✗→✓ | ▲ Improved | — | — |
| case-07 | ✗→✓ | ▲ Improved | — | — |
Provide tools to manage multi-simulation campaigns: generate parameter sweeps, track job execution status, and aggregate results from completed runs.
Before running orchestration scripts, collect from the user:
| Input | Description | Example | |-------|-------------|---------| | Base config | Template simulation configuration | base_config.json | | Parameter ranges | Parameters to sweep with bounds | dt:[1e-4,1e-2],kappa:[0.1,1.0] | | Sweep method | How to sample parameter space | grid, lhs, linspace | | Output directory | Where to store campaign files | ./campaign_001 | | Simulation command | Command to run each simulation | python sim.py --config {config} |
Need every combination (full factorial)?
├── YES → Use grid (warning: exponential growth with parameters)
└── NO → Is space-filling coverage needed?
├── YES → Use lhs (Latin Hypercube Sampling)
└── NO → Use linspace for uniform sampling per parameter| Method | Best For | Sample Count | |--------|----------|--------------| | grid | Low dimensions (1-3), need exact corners | n^d (exponential) | | linspace | 1D sweeps, uniform spacing | n per parameter | | lhs | High dimensions, space-filling | user-specified budget |
| Parameters | Grid Points Each | Total Runs | Recommendation | |------------|------------------|------------|----------------| | 1 | 10 | 10 | Grid is fine | | 2 | 10 | 100 | Grid acceptable | | 3 | 10 | 1,000 | Consider LHS | | 4+ | 10 | 10,000+ | Use LHS or DOE |
| Script | Output Fields | |--------|---------------| | scripts/sweep_generator.py | configs, parameter_space, sweep_method, total_runs | | scripts/campaign_manager.py | campaign_id, status, jobs, progress | | scripts/job_tracker.py | job_id, status, start_time, end_time, exit_code | | scripts/result_aggregator.py | summary, statistics, best_run, failed_runs |
Create configurations for all parameter combinations:
bashpython3 scripts/sweep_generator.py \ --base-config base_config.json \ --params "dt:1e-4:1e-2:5,kappa:0.1:1.0:3" \ --method linspace \ --output-dir ./campaign_001 \ --json
Create campaign tracking structure:
bashpython3 scripts/campaign_manager.py \ --action init \ --config-dir ./campaign_001 \ --command "python sim.py --config {config}" \ --json
Monitor running jobs:
bashpython3 scripts/job_tracker.py \ --campaign-dir ./campaign_001 \ --update \ --json
Combine results from completed runs:
bashpython3 scripts/result_aggregator.py \ --campaign-dir ./campaign_001 \ --metric objective_value \ --json
bash# Generate 5x3=15 runs varying dt (5 values) and kappa (3 values) python3 scripts/sweep_generator.py \ --base-config sim.json \ --params "dt:1e-4:1e-2:5,kappa:0.1:1.0:3" \ --method linspace \ --output-dir ./sweep_001 \ --json # Generate LHS samples for 4 parameters with budget of 20 runs python3 scripts/sweep_generator.py \ --base-config sim.json \ --params "dt:1e-4:1e-2,kappa:0.1:1.0,M:1e-6:1e-4,W:0.5:2.0" \ --method lhs \ --samples 20 \ --output-dir ./lhs_001 \ --json # Check campaign status python3 scripts/campaign_manager.py \ --action status \ --config-dir ./sweep_001 \ --json # Get summary statistics from completed runs python3 scripts/result_aggregator.py \ --campaign-dir ./sweep_001 \ --metric final_energy \ --json
User: I want to run a parameter sweep on dt and kappa for my phase-field simulation. I want to try 5 values of dt between 1e-4 and 1e-2, and 4 values of kappa between 0.1 and 1.0.
Agent workflow:
bash python3 scripts/sweep_generator.py \ --base-config simulation.json \ --params "dt:1e-4:1e-2:5,kappa:0.1:1.0:4" \ --method linspace \ --output-dir ./dt_kappa_sweep \ --json
bash python3 scripts/campaign_manager.py \ --action init \ --config-dir ./dt_kappa_sweep \ --command "python phase_field.py --config {config}" \ --json
bash python3 scripts/result_aggregator.py \ --campaign-dir ./dt_kappa_sweep \ --metric interface_width \ --json
| Error | Cause | Resolution | |-------|-------|------------| | Base config not found | Invalid file path | Verify base config file exists | | Invalid parameter format | Malformed param string | Use format name:min:max:count or name:min:max | | Output directory exists | Would overwrite | Use --force or choose new directory | | No completed jobs | No results to aggregate | Wait for jobs to complete or check for failures | | Metric not found | Result files missing field | Verify metric name in result JSON |
The simulation-orchestrator works with other simulation-workflow skills:
parameter-optimization simulation-orchestrator
│ │
│ DOE samples ────────────────>│ Generate configs
│ │
│ │ Run simulations
│ │
│<──────────────────────────── │ Aggregate results
│ │
│ Sensitivity analysis │
│ Optimizer selection │parameter-optimization/doe_generator.py to get sample pointssimulation-orchestrator/sweep_generator.py to create configssimulation-orchestrator/result_aggregator.py to collect resultsparameter-optimization/sensitivity_summary.py to analyzereferences/campaign_patterns.md - Common campaign structuresreferences/sweep_strategies.md - Parameter sweep design guidancereferences/aggregation_methods.md - Result aggregation techniques| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
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. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 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 +59 percentage points is the difference between those two pass rates over the 21 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.