Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when working with CONTAM projects through the local contam MCP server, including discovering CONTAM executables and API integrations, listing .prj/.sim/.wth/.ctm files, inspecting or diagnosing project references, cloning scenario folders, running baseline/intervention case matrices, using contamxpy for step-by-step co-simulation, updating weather or contaminant references, running simulations, upgrading projects, comparing .sim results, analyzing text outputs, exporting simulation text, or
.claude/skills/hashgraph-online-contam-mcp/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 129% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 106% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 146% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 154% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 189% | 0% |
Use this skill when the user wants to inspect, diagnose, clone, batch-run, co-simulate, upgrade, compare, analyze, or export CONTAM projects through the contam MCP server.
scripts/start-contam-mcp.ps1.scripts/Invoke-ContamProjectGuard.ps1 for local PRJ hygiene, input checks, output cleanup, result-profile updates, and XLog triage.CONTAM_PLUGIN_ROOT is set by the launcher when the plugin runs from this repository.CONTAM_HOME may point to the directory containing CONTAM executables.CONTAM_CHINESE_HOME may point to an extracted contam_chinese release; when set, the launcher uses those localized executables unless explicit tool paths override them.CONTAMX_PATH, CONTAMW_PATH, PRJUP_PATH, SIMREAD_PATH, SIMCOMP_PATH.contamx3.exe, prjup.exe, simread.exe, and simcomp.exe; do not assume GUI automation through contamw3.exe.discover_contam_installationdiscover_contam_api_stacklist_contam_case_filesinspect_contam_projectdiagnose_contam_projectupdate_contam_project_referencescreate_contam_case_variantrun_contam_case_matrixapply_contam_sketchpad_layoutscripts/Invoke-ContamProjectGuard.ps1 -ProjectPath <file.prj> -Mode InputCheck -ResultProfile GuiSafeResults -CleanOutputs -RequireSingleProjectcontamxpy when available:inspect_contamxpy_projectrun_contamxpy_cosimulationrun_contam_simulationupgrade_contam_projectcompare_contam_sim_resultsexport_contam_sim_textanalyze_contam_text_resultsUse Invoke-ContamProjectGuard.ps1 whenever a generated or modified PRJ is expected to open in ContamW or be handed to another user.
Typical commands:
powershell.\scripts\Invoke-ContamProjectGuard.ps1 ` -ProjectPath "<case>\model.prj" ` -Mode InputCheck ` -ResultProfile GuiSafeResults ` -CleanOutputs ` -RequireSingleProject
For a command-line full run:
powershell.\scripts\Invoke-ContamProjectGuard.ps1 ` -ProjectPath "<case>\model.prj" ` -Mode Run ` -ResultProfile GuiSafeResults
Use this flow before GUI work:
case-spec.json, layout.json, inputs/*.csv, and ERRORS.md in the case folder..prj in a case folder unless the user explicitly wants scenarios; remove failed variants and stale result files.InputCheck after every PRJ edit. A ContamX input check passing means the text structure is readable; it does not prove SketchPad geometry is GUI-valid..xlog; trust Simulation completed successfully. over a GUI impression that the console "closed".CONTAMX.EXE: simulation terminated abnormally but command-line ContamX exits 0 and writes a successful XLog, treat it as a GUI result handoff/loading issue, not a solver issue.For generated models that are meant to match a hand-built ContamW reference, pass structural expectations into the guard:
powershell.\scripts\Invoke-ContamProjectGuard.ps1 ` -ProjectPath "<case>\model.prj" ` -Mode InputCheck ` -ExpectedZoneCount 9 ` -ExpectedPathCount 49 ` -ExpectedAmbientPathCount 40 ` -ExpectedInterzonePathCount 9 ` -MinimumAmbientPathsPerZone 1
Use the expected counts from the reference case, not from the generated model. A model can pass ContamX input checks while still being too simplified for the user's intended ContamW case.
When the user provides a hand-built ContamW .prj as a reference for a generated project, treat the hand-built file as the structural source of truth before changing generation logic.
Recent lesson from a two-floor SF6/COMIS-style comparison: the hand-built reference had 9 zones, 18 flow elements, and 49 flow paths (40 ambient and 9 interzone), while a generated GUI variant had 9 zones, 20 flow elements, and 27 flow paths (20 ambient and 7 interzone). The useful correction is not to copy the case values into the plugin, but to force generated workflows to carry over the reference model's path inventory and check ambient/interzone counts explicitly.
Use run_contam_case_matrix when the user needs a complete case workflow from an existing .prj:
.prj reference changes when requested: weatherFile, contaminantFile, continuousValuesFile, discreteValuesFile, wpcFile, ewcFile.testInputOnly first for new or uncertain cases.analyze_contam_text_results for quick .xlog or simread text triage, then write separate post-processing scripts for final charts or paper tables when needed.Use apply_contam_sketchpad_layout when an existing .prj already has simulation records but needs a ContamW-visible drawing.
polygon points for jogged rooms, and explicit wallSegments for shared partitions that are visible in the sketch.pathIcons or sourceSinkIcons. If a path is hidden and the user saves/runs from ContamW, ContamW may rewrite the PRJ from SketchPad state and drop that path.The same zone is on both sides of the wall that the path is on.20 in generated layouts. It can be valid in official projects, but in some generated wall graphs it triggered ContamW GUI crashes; prefer simpler wall graphs or side-specific stable nodes and verify manually.cleanDisplay: true so pseudo-geometry is hidden and unplaced/helper paths are omitted. Use hideAirflowPathIcons: true only for a read-only screenshot pass, not for a model that the user will save or run from ContamW.outputPath for a first pass.InputCheck after layout changes, then ask the user to manually open in ContamW for Building Check screenshots if needed.Treat this as template-based SketchPad generation, not proof that ContamW will exactly reproduce a paper figure. Complex floor-plan tracing, curved geometry, and publication-style airflow diagrams still need dedicated post-processing or manual GUI checks.
When the user reports ContamW Building Check messages:
At least one zone is not defined on level: the SketchPad walls usually do not form closed regions on that level. Simplify to closed rectangles or fix wall graph nodes.The same zone is on both sides of the wall that the path is on: the path icon is on the wrong wall side, lies inside a zone, or the surrounding wall does not divide two zones. Move the icon to the correct shared/exterior wall and align its direction.Zone not connected to ambient by variable flow link: ambient links may exist in PRJ records but are hidden or not recognized in SketchPad. Show one valid exterior variable flow path per relevant zone.Vertical path is not above a sublevel or floor same-zone errors: do not fake stairs with arbitrary vertical path icons. Either model a proper sublevel/stair representation or keep the uncertain vertical connection out of the GUI-run PRJ and document the assumption.PathList reordering error or repeated possible level errors: stop editing the GUI variant, restore from the data spec or a known-good PRJ, then reapply a simpler layout.Always record the user-visible message and the fix in a case-local ERRORS.md or equivalent notes file. Do not commit case-local logs or generated outputs into the plugin repository.
Prefer the guard's GuiSafeResults profile when the user will run from ContamW:
textdoDlg=1 pfsave=1 zfsave=1 zcsave=0 ach=1 csm=1 srf=1 log=1
This follows a known working output pattern and avoids zcsave=1, which can trigger ContamW result handoff/display problems in generated models.
Use NoResults only for GUI crash isolation. If NoResults runs but result display fails, run the same PRJ with command-line ContamX and parse XLog/results outside the GUI.
Do not treat a ContamX console window closing after Enter as a failure by itself. Check the newest .xlog; if it says Simulation completed successfully., the run completed normally.
For literature reproduction or report cases, keep the plugin generic and keep all paper-specific values in case-local files. A report generally needs:
The ContamW SketchPad screenshot is optional unless explicitly requested. It is a model-check artifact, not the primary evidence.
Use bridge sessions when the user needs zone, path, ambient target, AHS, or contaminant metadata, or when they need controlled changes during a run:
start_contam_bridge_sessionget_contam_bridge_sessionlist_contam_bridge_entitiesadvance_contam_bridge_sessionclose_contam_bridge_sessionAlways close sessions when finished. For ambiguous path or zone selections, list entities first and use stable ids or selector labels rather than guessing.
Use discover_contam_api_stack when the user references the CONTAM API paper, contamx-lib, contamxpy, contamp-lib, ANT, Rhino, or Grasshopper.
contamxpy is available, prefer inspect_contamxpy_project for API-level metadata and run_contamxpy_cosimulation for time-step control, custom control logic, zone concentration sampling, flow sampling, and supported dynamic adjustments.contamp-lib project creation unless Rhino/Grasshopper ANT or a callable ContamP/contamp-lib binding is actually present..prj files.contamp-lib-style geometry/model creation.contamxpy as optional; if missing, run the repository setup script or ask the user before installing into a persistent environment.CONTAM_HOME or the specific executable override instead of searching personal directories.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 16,197 | 14,729 | -9% | 1 | 1 | 0% | 414 | 3,832 | +826% | 0 | 0 | — |
case-02 | fail→fail | 17,092 | 11,081 | -35% | 1 | 1 | 0% | 187 | 4,138 | +2113% | 0 | 0 | — |
case-03 | fail→fail | 11,598 | 11,198 | -3% | 1 | 1 | 0% | 890 | 4,057 | +356% | 0 | 0 | — |
case-04 | fail→pass | 40,194 | 9,739 | -76% | 1 | 1 | 0% | 2,306 | 5,277 | +129% | 0 | 0 | — |
case-05 | fail→pass | 20,652 | 13,163 | -36% | 1 | 1 | 0% | 2,332 | 4,796 | +106% | 0 | 0 | — |
case-06 | pass→pass | 18,801 | 14,322 | -24% | 1 | 1 | 0% | 2,067 | 5,038 | +144% | 0 | 0 | — |
case-07 | pass→pass | 20,058 | 7,659 | -62% | 1 | 1 | 0% | 2,102 | 4,948 | +135% | 0 | 0 | — |
case-08 | fail→pass | 14,001 | 8,003 | -43% | 1 | 1 | 0% | 1,972 | 4,846 | +146% | 0 | 0 | — |
case-09 | fail→pass | 18,786 | 14,449 | -23% | 1 | 1 | 0% | 2,025 | 5,134 | +154% | 0 | 0 | — |
case-10 | fail→pass | 20,601 | 20,525 | -0% | 1 | 1 | 0% | 2,090 | 6,046 | +189% | 0 | 0 | — |
case-11 | pass→pass | 20,849 | 18,089 | -13% | 1 | 1 | 0% | 2,320 | 5,747 | +148% | 0 | 0 | — |
case-12 | fail→pass | 19,589 | 13,090 | -33% | 1 | 1 | 0% | 2,225 | 4,901 | +120% | 0 | 0 | — |
case-13 | fail→pass | 14,764 | 4,389 | -70% | 1 | 1 | 0% | 1,578 | 4,271 | +171% | 0 | 0 | — |
case-14 | fail→pass | 15,870 | 14,126 | -11% | 1 | 1 | 0% | 2,163 | 5,133 | +137% | 0 | 0 | — |
case-15 | pass→pass | 15,742 | 8,077 | -49% | 1 | 1 | 0% | 1,635 | 5,021 | +207% | 0 | 0 | — |
case-16 | fail→fail | 22,824 | 11,347 | -50% | 1 | 1 | 0% | 4,292 | 3,984 | -7% | 0 | 0 | — |
case-17 | fail→pass | 12,934 | 4,625 | -64% | 1 | 1 | 0% | 1,053 | 4,338 | +312% | 0 | 0 | — |
case-18 | pass→pass | 16,260 | 9,104 | -44% | 1 | 1 | 0% | 1,587 | 4,256 | +168% | 0 | 0 | — |
case-19 | pass→pass | 17,948 | 12,952 | -28% | 1 | 1 | 0% | 2,431 | 6,041 | +148% | 0 | 0 | — |
case-20 | pass→pass | 15,538 | 14,773 | -5% | 1 | 1 | 0% | 1,978 | 5,316 | +169% | 0 | 0 | — |
case-21 | pass→pass | 5,673 | 4,831 | -15% | 1 | 1 | 0% | 1,009 | 4,326 | +329% | 0 | 0 | — |
case-22 | pass→pass | 15,833 | 16,206 | +2% | 1 | 1 | 0% | 2,216 | 5,296 | +139% | 0 | 0 | — |
case-23 | fail→pass | 15,599 | 9,268 | -41% | 1 | 1 | 0% | 1,868 | 5,040 | +170% | 0 | 0 | — |
case-24 | fail→fail | 24,218 | 14,797 | -39% | 1 | 1 | 0% | 3,128 | 3,916 | +25% | 0 | 0 | — |
case-25 | fail→pass | 16,826 | 13,791 | -18% | 1 | 1 | 0% | 2,128 | 5,076 | +139% | 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. 25 cases were attempted, and 20 counted toward the lift figure. The other 5 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 +44 percentage points is the difference between those two pass rates over the 20 comparable cases.
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.