Best for
- one agent-facing entrypoint for SWMM modelling,
- end-to-end build + run + QA,
- an agent to decide which SWMM module comes next,
Zhonghao1995/agentic-swmm-workflow/skills/swmm-end-to-end/SKILL.md
Top-level orchestration skill for agentic SWMM modelling. Use when an agent needs one entrypoint that decides which module tools to run, in what order, and when to stop, for example to build, run, QA, and optionally calibrate a SWMM case from prepared or partially prepared inputs.
Decision brief
Part of Agentic SWMM — install the project first for the executable toolchain (aiswmm CLI, SWMM solver, MCP servers).
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/Zhonghao1995/agentic-swmm-workflow --skill "skills/swmm-end-to-end"Inspect the Agent Skill "swmm-end-to-end" from https://github.com/Zhonghao1995/agentic-swmm-workflow/blob/b4fd1f9e52f3807b7f1307a1fe81588e76cfe78d/skills/swmm-end-to-end/SKILL.md at commit b4fd1f9e52f3807b7f1307a1fe81588e76cfe78d. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Use gispreprocesssubcatchments only when a subcatchment polygon dataset already exists.
maplanduse and mapsoil should target the same subcatchment ID universe.
formatrainfall should create both JSON metadata and timeseries text.
Use importnetwork only when raw conduits/junctions/outfalls exist.
buildinp is the only handoff into swmmrun.
Permission review
The documentation asks the agent to run terminal commands or scripts.
`python3 skills/swmm-experiment-audit/scripts/audit_run.py --run-dir runs/<case>` — direct script path; Obsidian export is on by default (suppress with `--no-obsidian`).The documentation asks the agent to run terminal commands or scripts.
`python3 skills/swmm-experiment-audit/scripts/audit_run.py --run-dir runs/<case>` — direct script path; Obsidian export is on by default.The documentation asks the agent to create, modify, or delete local files.
create a case run directory,Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 95/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 22 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Part of Agentic SWMM — install the project first for the executable toolchain (aiswmm CLI, SWMM solver, MCP servers).
agent/memory/.swmm-canada (entry skill for Canadian AOIs — real municipal pipes where covered, synthesized elsewhere in Canada)swmm-anywhere (entry skill for data-scarce regions outside Canada — no real pipe data)swmm-gisswmm-climateswmm-paramsswmm-networkswmm-builderswmm-runnerswmm-design-reviewswmm-plotswmm-calibrationswmm-uncertaintyswmm-lid-optimizationswmm-experiment-auditThe orchestrator MUST inspect the user's inputs before choosing the entry skill:
.shp, .csv, network.json, a CAD file, or an existing .inp path → the user has real data; route to swmm-network (or swmm-builder if the INP is already prepared).swmm-canada (the SWMMCanada upstream returns real published municipal storm pipes where a supported city covers the AOI, synthesized elsewhere in Canada). Outside Canada route to swmm-anywhere, which produces a synth .inp. Either way, downstream skills (swmm-runner, swmm-experiment-audit, swmm-plot) consume the result identically to a real-data INP.swmm-network); only fall back to swmm-anywhere if the user explicitly asks for a synth baseline for comparison.scripts/real_cases/run_todcreek_minimal.py.Use this skill when the user asks for:
Do not use this skill when the user clearly wants only one module in isolation, such as only rainfall formatting or only calibration metrics.
Before using this skill in Codex, OpenClaw, Hermes, or another compatible runtime, load the Markdown files in agent/memory/:
identification_memory.mdsoul.mdoperational_memory.mdmodeling_workflow_memory.mdevidence_memory.mduser_bridge_memory.mdThose files define the public project identity, agent posture, evidence boundaries, and first-run user behavior. This skill remains the execution contract; the memory files should shape decisions and communication, not replace tool calls or depend on the maintainer's private local workspace.
Use this when the user is testing the Agentic SWMM framework itself, especially with prompts like "test the end-to-end framework", "test skill and MCP tool calls", "from raw data to INP", or "automatic modeling smoke test".
This mode tests orchestration behavior before scientific model quality. It must:
swmm-end-to-end skill first;The run manifest for this mode must include:
tool_transport: mcp when the MCP server was called through the protocol, script_fallback when the tool contract exists but the MCP transport was bypassed, or temporary_script when no MCP contract exists yet;mcp_tool_calls: ordered records of the intended or actual tool calls, including server, tool name, input paths, output paths, and status;missing_or_fallback_inputs: explicit data gaps and assumptions such as missing soil, nonnumeric pipe diameter fallback, inferred outfall, inferred invert elevation, or shortened rainfall window;framework_gaps: MCP/skill gaps discovered during the run that should be implemented later.Use scripts/mcp_stdio_call.py when Codex needs to verify the MCP transport directly from this repository. The helper initializes a server over stdio, checks tools/list, calls one tool with JSON arguments, and stores the raw MCP response as an artifact. Use repo-root relative paths in the JSON arguments; the helper resolves those to absolute paths before sending the tool call so server-local working directories do not corrupt path resolution.
For a raw-data to INP smoke test, prefer this MCP call order when inputs are present:
swmm-gis-mcp.qgis_area_weighted_params for land-use/soil area-weighted params, or record a missing-input fallback if soil is absent.swmm-climate-mcp.format_rainfall for event rainfall.swmm-climate-mcp.build_raingage_section when an explicit raingage artifact is needed.
4a. swmm-network-mcp.prepare_storm_inputs for raw municipal shapefiles (clip pipes + manholes to basin, fill mapping from skills/swmm-network/templates/city_mapping_raw_shapefile.template.json). Skip when the source is already a structured CAD export with explicit from/to nodes.
4b. swmm-network-mcp.snap_pipe_endpoints — heal sub-millimetre to centimetre vertex drift between adjacent pipe segments. Reasonable starting tolerance is 0.5–3 m. Reports clusters merged + any pipes dropped as self-loops.
4c. swmm-network-mcp.infer_outfall (mode endpoint_nearest_watercourse when a watercourse layer is available; else lowest_endpoint).
4d. swmm-network-mcp.reorient_pipes to BFS-flip flow direction.
4e. swmm-network-mcp.import_city_network to assemble network.json.swmm-network-mcp.qa. With the 4a–4d steps above, no_outfall_path warnings should be limited to genuinely disconnected sub-graphs (e.g. trunk pipes that fall outside the basin clip).
5b. swmm-network-mcp.assign_subcatchment_outlets — REQUIRED when the subcatchments came out of basin_shp_to_subcatchments (which seeds every subcatchment's outlet to the literal outfall). This step rewrites each subcatchment's outlet to a real upstream junction (mode=nearest_junction reads network.json's junctions list; or mode=manual_lookup for an explicit mapping). Without it the pipe network is in the .inp but receives no surface runoff. Pass the rewritten CSV (not the original) to build_inp in step 6.swmm-builder-mcp.build_inp.swmm-runner-mcp.swmm_run.swmm-runner-mcp.swmm_continuity.swmm-runner-mcp.swmm_peak.Stop and report if a required MCP contract is absent. Continue with a temporary script only when the user explicitly asked to test the framework and the run manifest records the gap under framework_gaps.
Use this when the required explicit inputs already exist or can be produced safely:
subcatchments.csvnetwork.jsonExecution order:
swmm-gisswmm-paramsswmm-climateswmm-networkswmm-builderswmm-runnerswmm-design-review (reference-free plausibility review — no observed data needed)swmm-plotswmm-calibrationswmm-uncertaintyswmm-lid-optimizationswmm-experiment-auditswmm-report (client Word deliverable; embeds any figures the run's plot stage holds, so plot before reporting when figures are wanted)Exact MCP call chain for the full modular path. Two parallel branches
(GIS / hydrology vs network) merge at build_inp. Region-agnostic:
substitute the user's basin shapefile, pipe shapefile, watercourse
shapefile, landuse layer, soil layer, and rainfall input wherever the
inputs are referenced.
GIS / hydrology branch (subcatchments + params)
swmm-gis-mcp.basin_shp_to_subcatchments — basin shp → subcatchments.geojson + .csv. (Or gis_preprocess_subcatchments if a pre-attributed subcatchment shp + DEM exist.)swmm-gis-mcp.qgis_area_weighted_params — intersect subcatchments × landuse × soil → weighted_params.json. Inspect the warnings array for any landuse classes that fell through to DEFAULT.swmm-params-mcp.map_landuse → map_soil → merge_params.Climate branch (rainfall)
4. swmm-climate-mcp.format_rainfall — rainfall CSV (or .dat via inputDatPaths) → rainfall.json + timeseries.txt.
5. swmm-climate-mcp.build_raingage_section (only when an explicit raingage artefact is needed).
Network branch (pipe topology)
6. swmm-network-mcp.prepare_storm_inputs — clip pipes (+optional manholes) shp to the basin, fill mapping.json from templates/city_mapping_raw_shapefile.template.json. (Skip when the source is already a structured CAD export with explicit from/to nodes.)
7. swmm-network-mcp.snap_pipe_endpoints — heal sub-millimetre vertex drift between pipe segments so import_city_network can infer connected junctions. (BACKLOG.md B8; skip pre-B8.)
8. swmm-network-mcp.infer_outfall — pick a single outfall point (mode endpoint_nearest_watercourse when a watercourse shp is available, else lowest_endpoint).
9. swmm-network-mcp.reorient_pipes — BFS-from-outfall flow-direction fix.
10. swmm-network-mcp.import_city_network — assemble network.json from the prepared geojsons + mapping.
11. swmm-network-mcp.qa — topology + required-attribute QA.
Wiring + assembly
12. swmm-network-mcp.assign_subcatchment_outlets — REQUIRED if subcatchments came from basin_shp_to_subcatchments (which writes outlet=OUT1 as a placeholder). Rewrites the CSV so each subcatchment drains into a real upstream junction; without this the pipe network sits idle.
13. swmm-builder-mcp.build_inp — assemble model.inp + builder manifest.
Run + QA + plot
14. swmm-runner-mcp.swmm_run — omit the node arg to auto-detect the first [OUTFALLS] entry from the .inp.
15. swmm-runner-mcp.swmm_continuity
16. swmm-runner-mcp.swmm_peak — pass the actual outfall name explicitly (no longer defaults to O1).
16b. aiswmm review --run-dir runs/<case> --rules skills/swmm-design-review/rulebooks/synth_plausibility.yaml — reference-free plausibility review (no observed data); writes 11_review/design_review.json + .md. Direct review_run tool / CLI verb, not an MCP server. Use the synth_plausibility rulebook for swmm-anywhere runs; use gb50014_template (or a local rulebook) for real-data design checks.
17. optional swmm-plot-mcp.plot_rain_runoff_si — paired rain + flow figure for any node.
14. optional calibration tools:
swmm-calibration-mcp.swmm_sensitivity_scanswmm-calibration-mcp.swmm_calibrateswmm-calibration-mcp.swmm_calibrate_searchswmm-calibration-mcp.swmm_calibrate_sceuaswmm-calibration-mcp.swmm_calibrate_dream_zsswmm-calibration-mcp.swmm_validateswmm-uncertainty-mcp.swmm_sensitivity_oat — one-at-a-time sensitivity (parameter ranking)swmm-uncertainty-mcp.swmm_sensitivity_morris — Morris elementary-effects screeningswmm-uncertainty-mcp.swmm_sensitivity_sobol — Sobol' first-order + total-effect indicesswmm-uncertainty-mcp.swmm_uncertainty_source_decomposition — integrate raw ensemble outputspython3 skills/swmm-uncertainty/scripts/uncertainty_propagate.py ... (fuzzy alpha-cut)python3 skills/swmm-uncertainty/scripts/monte_carlo_propagate.py ... (Monte Carlo)python3 skills/swmm-lid-optimization/scripts/entropy_lid_priority.py ...python3 skills/swmm-lid-optimization/scripts/lid_scenario_builder.py ...swmm-experiment-audit via CLI:aiswmm audit --run-dir runs/<case> — canonical path; adds backup/MOC/memory-hook. Pass --obsidian to also copy the note to the local Obsidian vault.python3 skills/swmm-experiment-audit/scripts/audit_run.py --run-dir runs/<case> — direct script path; Obsidian export is on by default (suppress with --no-obsidian).Use this when subcatchments.csv, network.json, params JSON, and rainfall references already exist.
Execution order:
swmm-builderswmm-runnerswmm-design-review (reference-free plausibility review)swmm-experiment-auditExact MCP call chain for prepared inputs:
swmm-builder-mcp.build_inpswmm-runner-mcp.swmm_runswmm-runner-mcp.swmm_continuityswmm-runner-mcp.swmm_peak
4b. aiswmm review --run-dir runs/<case> [--rules <rulebook.yaml>] — reference-free plausibility review; writes 11_review/. Defaults to the gb50014_template rulebook; pass --rules skills/swmm-design-review/rulebooks/synth_plausibility.yaml for synthesized networks.swmm-plot-mcp.plot_rain_runoff_siswmm-experiment-audit via CLI:
aiswmm audit --run-dir runs/<case> — canonical path; adds backup/MOC/memory-hook. Pass --obsidian to also copy the note to the local Obsidian vault.python3 skills/swmm-experiment-audit/scripts/audit_run.py --run-dir runs/<case> — direct script path; Obsidian export is on by default.Use this only when the user wants a real-data run but the full modular path is not ready because there is no trustworthy multi-subcatchment + network input yet.
Script:
scripts/real_cases/run_todcreek_minimal.pyAudit command after the script returns:
aiswmm audit --run-dir runs/real-todcreek-minimal --workflow-mode "minimal real-data fallback" — canonical path with backup/MOC/memory-hook.Characteristics:
This fallback is a script path, not a module-MCP path. The agent should choose it only when:
The orchestrator should decide these items explicitly:
network.json or equivalent network source files?If the answer is unclear, prefer:
The run should stop and report missing inputs if any of these are absent:
network.jsonThe run requires:
data/Todcreek/Geolayer/n48_w124_1arc_v3_Clip_Projec1.tifdata/Todcreek/Geolayer/landuse.shpdata/Todcreek/Geolayer/soil.shpdata/Todcreek/Rainfall/1984rain.datdata/Todcreek/outlet_candidate.geojsonruns/<case>/... or another explicit run directory.swmm-experiment-audit after the attempt, even when the run fails or stops early. The audit record should reflect partial evidence rather than invent missing outputs.The top-level skill should pass artifacts between MCP tools using explicit run-local paths.
Recommended stage layout:
runs/<case>/01_gis/subcatchments.csvruns/<case>/01_gis/subcatchments.jsonruns/<case>/02_params/landuse.jsonruns/<case>/02_params/soil.jsonruns/<case>/02_params/merged_params.jsonruns/<case>/03_climate/rainfall.jsonruns/<case>/03_climate/timeseries.txtruns/<case>/03_climate/raingage.jsonruns/<case>/03_climate/raingage.txtruns/<case>/04_network/network.jsonruns/<case>/04_network/network_qa.jsonruns/<case>/05_builder/model.inpruns/<case>/05_builder/manifest.jsonruns/<case>/06_runner/model.rptruns/<case>/06_runner/model.outruns/<case>/06_runner/manifest.jsonruns/<case>/07_qa/continuity.jsonruns/<case>/07_qa/peak.jsonruns/<case>/08_plot/...runs/<case>/09_calibration/...runs/<case>/09_uncertainty/...runs/<case>/09_lid/...runs/<case>/09_audit/experiment_provenance.jsonruns/<case>/09_audit/comparison.jsonruns/<case>/09_audit/experiment_note.mdBefore running any operating mode, every MCP server under mcp/<server>/
must have its node_modules installed. node_modules/ is .gitignored,
so a fresh clone (or any server added later) needs an install step:
scripts/install_mcp_deps.sh # install for all mcp/*/ servers
scripts/install_mcp_deps.sh swmm-calibration # install for one server
The script loops over every mcp/*/package.json and runs npm install.
Exit code is non-zero if any install fails. Servers that fail to install
will not respond to tools/list, so a cold-start agent that skips this
step will see ambiguous "MCP server exited before response" errors deep
into Mode 0 instead of a clean install failure up front.
After install, verify with a tools/list probe per server, for example:
python3 skills/swmm-end-to-end/scripts/mcp_stdio_call.py \
--server-dir mcp/swmm-calibration --tool __probe__ \
--arguments-json '{}' --out-response /tmp/_.json
The harness will print the Available tools: [...] for that server in its
error output (a dedicated --list-tools flag is on the framework backlog).
gis_preprocess_subcatchments only when a subcatchment polygon dataset already exists.map_landuse and map_soil should target the same subcatchment ID universe.merge_params should be treated as the single params handoff into build_inp.format_rainfall should create both JSON metadata and timeseries text.build_raingage_section should run after rainfall formatting so series_name or rainfall_json stays consistent.import_network only when raw conduits/junctions/outfalls exist.network.json already exists, skip import and run qa directly.build_inp is the only handoff into swmm_run.swmm_run creates the canonical manifest.json.swmm_continuity and swmm_peak are mandatory QA steps, not optional metrics.swmm_peak parser path that reads the correct summary block.swmm-experiment-audit after success, failure, or early stop.--compare-to <baseline-run-dir> when the user requests baseline/scenario or before/after comparison.09_audit/experiment_provenance.json, 09_audit/comparison.json, and Obsidian-compatible 09_audit/experiment_note.md inside the run directory.--no-obsidian.~/Documents/Agentic-SWMM-Obsidian-Vault, with 10_Memory_Layer for durable lessons and 20_Audit_Layer for run-level evidence.When an agent uses this skill, it should:
swmm-experiment-audit on the run directory,Minimum QA checks for a successful run:
.rpt and .out existFor calibration mode, also require:
At minimum, the orchestrator should leave behind:
.inp.rpt.outmanifest.json11_review/design_review.json + 11_review/design_review.md (reference-free plausibility review)09_audit/experiment_provenance.json09_audit/comparison.json09_audit/experiment_note.mdIf plotting is requested, also produce:
If calibration is requested, also produce:
swmm-network; it only coordinates it.Frequently asked questions
Part of Agentic SWMM — install the project first for the executable toolchain (aiswmm CLI, SWMM solver, MCP servers).
The source record exposes this install command: npx skills add https://github.com/Zhonghao1995/agentic-swmm-workflow --skill "skills/swmm-end-to-end". Inspect the command and pinned source before running it.
Static rules flagged exec-script, write-files in the source; the page lists the matching lines and excerpts.
Alternatives
coreyhaines31/marketingskills
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program
garrytan/gbrain
End-to-end discipline for turning any large data source (audio libraries, email takeouts, document corpora, chat exports, API dumps) into brain pages at scale. The lifecycle spine: SCHEMA → ACCESS → TRIAL → EVALUATE → IMPROVE → CODIFY → TEST → SKILLIFY → BULK → MONITOR. State is tracked in a durable JSON manifest (see MANIFEST-PATTERN.md) so any crash, session boundary, or subagent fan-out resumes from ground truth instead of memory.
alirezarezvani/claude-skills
App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist
dotnet/skills
Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP). Use when user asks to "migrate to MTP", "switch from VSTest", "enable Microsoft.Testing.Platform", "use MTP runner", set OutputType=Exe only for test projects in Directory.Build.props, or mentions EnableMSTestRunner, EnableNUnitRunner, or UseMicrosoftTestingPlatformRunner. USE FOR: MTP behavioral differences vs VSTest (exit code 8, zero tests discovered, --ignore-exit-code, TESTINGPLATFORM_EXITCODE_IGNORE); centralizing