Swmm plot
Agentic SWMM is an automated, auditable, and memory-informed framework for reproducible stormwater modelling, integrating QGIS and EPA SWMM through the aiswmm runtime, reusable Skills, and MCP interfaces, with QA verification, provenance tracking, calibration support, and Codex, Hermes, Claude code as well as OpenClaw compatibility
npx -y skills add Zhonghao1995/agentic-swmm-workflow --skill swmm-plotAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 21 stars21 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Publication-grade plotting for SWMM rainfall–runoff time-series figures. Use when an agent needs to produce a paired rainfall (top, inverted) + node flow (bottom) figure from a SWMM .inp + .out, with strict style rules (SI units, Arial, ticks inward, no title), optionally cropped to an event window or focus day.
SKILL.md
6.3 KB, as published. Nobody here has run it
SWMM Plot (publication spec)
Part of Agentic SWMM — install the project first for the executable toolchain (aiswmm CLI, SWMM solver, MCP servers).
Before calling plot — ask the user
When the user asks to plot, always ask these questions first before calling any plot tool:
- Which entity? A specific node (junction / outfall) — by name — or a specific link (conduit) — by name?
- List 3–5 high-peak-flow candidates from the run's RPT
Link Flow Summaryso the user can pick.
- List 3–5 high-peak-flow candidates from the run's RPT
- Which attribute? Node options:
Total_inflow,Depth_above_invert,Volume_stored_ponded,Flow_lost_flooding. Link options:Flow_rate,Velocity,Depth. - Time window? Default is the full simulation (24h). Offer to limit to a focus day or HH:MM-HH:MM window if peaks occur in a short period.
Do NOT silently pick defaults. The user needs control — different plots answer different questions (peak inspection vs continuity vs flooding).
What this skill provides
- A plotting script that reads:
- rainfall TIMESERIES from a SWMM
.inp(one named series at a time); - flow series from a SWMM
.outbinary (viaswmmtoolbox).
- rainfall TIMESERIES from a SWMM
- Renders a paired rainfall + node-flow figure with a fixed publication style:
- SI units (rain in mm per timestep or mm/h depending on
rainKind); - rainfall on the top axis, inverted (depth grows downward);
- flow on the bottom axis;
- inward ticks, Arial, no auto title;
- optional
focusDayto crop to a single day; optionalwindowStart/windowEnd(HH:MM, only together withfocusDay) for a sub-day window.
- SI units (rain in mm per timestep or mm/h depending on
When to use this skill
Use after swmm-runner.swmm_run has produced both .inp and .out, and you want a single rainfall-vs-flow figure for one node (typically the model's outfall or the assigned upstream junction of a subcatchment of interest).
Do not use this skill for multi-node ensemble plots, exceedance curves, or sensitivity scans — those would belong to swmm-uncertainty / swmm-calibration (no plot tools there yet).
MCP tools
This skill backs three LLM-facing tools. plot_rain_runoff_si is routed through the MCP server; inspect_plot_options and map_run are direct Python handlers in the tool registry (agentic_swmm/agent/tool_handlers/swmm_plot.py and swmm_map.py).
-
inspect_plot_options— inspect a run directory (or an explicit.inp/.outpath) and return the available rainfall series names, node IDs, and node output attributes. Call this beforeplot_runso you can pass real names instead of placeholders. Required args:run_dir(orinp_path+out_file). Read-only; auto-approved under the QUICK permission profile. -
map_run— render the spatial network layout (subcatchments + conduits + outfalls) as a PNG. Reads the INP from the run directory automatically; passinpto override. Required arg:run_dir. Optional:out_png,dpi,no_subcatchments,no_vertices. -
plot_run(proxies toplot_rain_runoff_sion the MCP server) — create a paired rainfall + node-flow figure from a run directory. Required arg:run_dir. Supply eithernodeorlink(mutually exclusive) to select the lower panel. Optional:rain_ts,rain_kind,node_attr,out_png. Day-window cropping: passfocus_day(YYYY-MM-DD) to crop the axis to one calendar day; passwindow_startandwindow_end(bothHH:MM) to further narrow to a sub-day window — both requirefocus_day(the server rejectswindow_start/window_endwithoutfocus_day).
mcp/swmm-plot/server.js exposes one underlying tool:
plot_rain_runoff_si— low-level render call used byplot_run. Preferplot_run(which acceptsrun_dir) over calling this directly.- Args:
inp(required): path to the SWMM .inp (the rainfall TIMESERIES is read from here).out(required): path to the SWMM .out binary.outPng(required): where to write the PNG.rainTs(no usable default — the schema ships the self-documenting placeholder<rainfall-series-name>, which fails at render time if not replaced; always supply the actual series name from the .inp[TIMESERIES]section viainspect_plot_options): name of the rainfall TIMESERIES inside the .inp.rainKind(default"depth_mm_per_dt"): one ofintensity_mm_per_hr,depth_mm_per_dt,cumulative_depth_mm.dtMin(default5): timestep of the rainfall series in minutes.node(no usable default — the schema ships the self-documenting placeholder<outfall-or-junction>, which fails at render time if not replaced; always supply a real outfall or junction name viainspect_plot_options): node ID to plot from the .out.nodeAttr(default"Total_inflow"): whichswmmtoolboxattribute (e.g.Total_inflow,Lateral_inflow,Flow_lost_flooding).dpi(default300).focusDay(optional,YYYY-MM-DD): crop axis to a single day plus padding.windowStart/windowEnd(optional,HH:MM; only valid together withfocusDay): sub-day time window within the focus day. Rejected with a clear error if used withoutfocusDay.padHours(default2).
- Args:
Recommended orchestration
inspect_plot_options → list available series + node names
swmm-runner.run_swmm_inp → model.inp + model.out
plot_run → outfall_flow.png (or junction_flow.png)
Call inspect_plot_options first to get the real rainfall series name and outfall node name, then pass those to plot_run. If multiple nodes need to be plotted, call plot_run once per node with a different out_png path.
Conventions
- Strict publication style: do not write a title in the plot; titles belong to the surrounding document.
- SI units only.
- Rainfall axis is always inverted; depth grows downward so it doesn't overlap the flow series visually.
Known limitations
- Only one rainfall series is plotted at a time (
rainTsis a single name); multi-gauge inputs need separate figures.