Swmm design review
Skill Zhonghao1995/agentic-swmm-workflow/skills/swmm-design-review
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-design-reviewAssembled 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
Score a completed SWMM run against a configurable YAML rulebook of design checks — GB50014-style standards for real catchments, or the reference-free physical-plausibility rulebook for synthesized networks. Reads the run's existing manifest.json / model.rpt / model.inp and never re-runs SWMM. Use it post-run for compliance or plausibility review; continuity gating stays with postflight.
SKILL.md
6.4 KB, as published. Nobody here has run it
swmm-design-review — Design Review / Code-Compliance Checker
What this skill does
Evaluates a completed SWMM run against a configurable rulebook of design checks.
Reads the run's existing artifacts (manifest.json + model.rpt + model.inp) — SWMM
is never re-run. Classifies each rule as pass, fail, warn, or needs-data
and writes 11_review/design_review.json + 11_review/design_review.md into the
run directory (canonical per ADR-0004; the underlying script's own bare default
is the legacy 09_review/ — see CLI usage below).
This skill is decision-support only. It never certifies regulatory compliance.
CLI usage
# Standalone script
python3 skills/swmm-design-review/scripts/design_review.py \
--run-dir <path> # required: directory with model.rpt, manifest.json, model.inp
[--rpt <path>] # override: explicit model.rpt path
[--inp <path>] # override: explicit model.inp path
[--manifest <path>] # override: explicit manifest.json path
[--rules <rulebook>] # override rulebook YAML/JSON (repeatable for multiple books)
[--out-dir <dir>] # bare-script default: <run-dir>/09_review/ (legacy)
[--no-inp] # skip INP-derived metrics (slope, diameter)
# CLI verb (registered in aiswmm CLI) — always passes --out-dir explicitly,
# defaulting to the canonical <run-dir>/11_review/ (ADR-0004)
aiswmm review --run-dir <path> [--rules <rulebook.yaml>] [--out-dir <dir>]
Exit codes: 0 = pass/warn/needs-data only; 1 = any FAIL; 2 = script/input error.
Agent tool: review_run
Registered in AgentToolRegistry. Direct handler (not MCP-routed) — writes
11_review/design_review.json + 11_review/design_review.md into the run dir
(canonical per ADR-0004).
review_run(run_dir="runs/my_run/")
review_run(run_dir="runs/my_run/", rules="skills/swmm-design-review/rulebooks/gb50014_template.yaml")
is_read_only=False — QUICK profile prompts the user (tool writes files).
Executed example
python3 skills/swmm-design-review/scripts/design_review.py \
--run-dir tests/fixtures/design_review \
--manifest tests/fixtures/design_review/sample_manifest.json \
--rpt tests/fixtures/design_review/sample_mini.rpt \
--inp tests/fixtures/design_review/sample_mini.inp \
--rules tests/fixtures/design_review/sample_rules.yaml \
--out-dir /tmp/design_review_out
# Exit 1 = FAIL (1 pass, 1 fail, 0 warn, 1 needs-data)
# Report: /tmp/design_review_out/design_review.md
Return-period adequacy workflow
To check return-period adequacy (RETURN_PERIOD_ADEQUACY rule):
generate_design_stormwith the target return period P.build_inpto integrate the design storm into the model.run_swmm_inp --storm-return-period-yr Pto propagate provenance to manifest.design_review.py --run-dir <path>— extractor readsmanifest.metadata.storm_return_period_yr.
Until step 3 is wired (separate PR), RETURN_PERIOD_ADEQUACY returns needs-data.
Metrics available today (PR1)
| Metric | Source |
|---|---|
run.peak_flow | manifest.json |
run.continuity_error_pct | manifest.json |
link.max_velocity | rpt Link Flow Summary |
link.max_full_flow_ratio | rpt Link Flow Summary |
link.max_full_depth_ratio | rpt Link Flow Summary |
link.peak_flow | rpt Link Flow Summary |
outfall.max_flow | rpt Outfall Loading Summary |
node.flow_balance_error_pct | rpt Node Inflow Summary |
conduit.slope_pct | INP [CONDUITS] + [JUNCTIONS]/[OUTFALLS] join |
conduit.diameter_m | INP [XSECTIONS] GEOM1 (CIRCULAR only) |
conduit.roughness | INP [CONDUITS] |
Metrics returning needs-data until PR2: node.surcharge_hours, node.max_depth_m,
node.flooding_hours, node.flooding_volume_m3, junction.freeboard_m,
run.return_period_yr.
Output files
<run-dir>/11_review/design_review.json— machine-readable results (schema_version 1.0)<run-dir>/11_review/design_review.md— human report with disclaimer and sign-off table
(Canonical location per ADR-0004. Runs from before that migration, or the bare
script invoked without --out-dir, carry these under the legacy 09_review/.)
What the agent MUST say
When presenting review results, the agent must:
- Lead with the overall status (PASS / FAIL / WARN / NEEDS-DATA).
- State the disclaimer: "Findings are decision-support only and do NOT constitute compliance with any drainage standard."
- Invite the engineer to inspect any FAIL or NEEDS-DATA finding before proceeding.
- List NEEDS-DATA rules prominently with the reason they cannot produce a result.
What the agent MUST NOT say
- Do NOT say "the design is compliant with GB 50014" or any equivalent.
- Do NOT say "no issues found" when there are NEEDS-DATA rules — those are not passes.
- Do NOT paraphrase away the disclaimer.
- Do NOT imply the thresholds are authoritative — all template thresholds carry
verify: trueprecisely because they must be confirmed by the user.
Custom rulebooks
Write a YAML file following the schema in rulebooks/gb50014_template.yaml.
Every rule must have:
id(SCREAMING_SNAKE_CASE, unique)metric(named extractor from the table above)operator(lte/lt/gte/gt/eq/neq/between)threshold(float, SI) orthreshold_low+threshold_highforbetweenunits: SIseverity: FAILorseverity: WARNcitation— clause reference or"TODO: cite local standard"verify: trueunless you have personally confirmed the threshold against the applicable edition of the standard
Honesty rule: a rule MUST NOT have verify: false while citation is still
"TODO: cite local standard". The test suite enforces this invariant.
Part of
Issue #249 capability backlog — design-review / code-compliance checker. PR1: extractor layer + evaluator + rulebook + reports + tests. PR2 (upcoming): ToolSpec wiring, CLI verb, rpt_summary extensions.