skill-author
Draft a well-formed new skill (a SKILL.md scaffold, optionally with scripts/references) from a described recurring need, for human review and approval. Use…
Generate a client-deliverable Word (.docx) report from an audited SWMM run directory. Reads manifest.json, experiment_provenance.json, model_diagnostics.json, comparison.json, and any PNG figures — SWMM is never re-run. Supports custom YAML/JSON section templates.
$ npx -y skills add Zhonghao1995/agentic-swmm-workflow --skill swmm-report --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/swmm-reportContext preview
The summary Claude sees to decide when to auto-load this skill.
Generate a client-deliverable Word (.docx) report from an audited SWMM run directory. Reads manifest.json, experiment_provenance.json, model_diagnostics.json, comparison.json, and any PNG figures — SWMM is never re-run. Supports custom YAML/JSON section templates.
name: swmm-report description: > Generate a client-deliverable Word (.docx) report from an audited SWMM run directory. Reads manifest.json, experiment_provenance.json, model_diagnostics.json, comparison.json, and any PNG figures — SWMM is never re-run. Supports custom YAML/JSON section templates.
Assemble a reproducible, client-deliverable Word (.docx) report from the artifacts produced by `swmm-experiment-audit` and `swmm-plot`. The script reads only existing files; it never re-runs SWMM or modifies the run directory.
**Prerequisite:** the run directory must contain a `09_audit/` subdirectory with at least `experiment_provenance.json`. Run `aiswmm audit --run-dir <path>` first if that directory is absent.
---
# Standalone script
python3 skills/swmm-report/scripts/generate_report.py \
--run-dir <path> # required: audited run directory
[--out <path.docx>] # default: <run-dir>/report.docx
[--template <path>] # YAML or JSON template (default: built-in)
# CLI verb (registered in aiswmm CLI)
aiswmm report --run-dir <path> [--out <path.docx>] [--template <template.yaml>]Exit codes: `0` = success; `1` = missing dependency, missing audit dir, or template error; `2` = argument error.
**python-docx dependency:** install with `pip install 'aiswmm[report]'`. The script exits immediately with a clear message if python-docx is absent.
---
Registered in `AgentToolRegistry`. Direct handler (not MCP-routed) — shells out to `generate_report.py`, writes `<run-dir>/report.docx` (or the path supplied via `out`).
generate_report(run_dir="runs/my_run/") generate_report(run_dir="runs/my_run/", out="deliverables/run_report.docx") generate_report(run_dir="runs/my_run/", template="templates/client_a.yaml")
`is_read_only=False` — QUICK profile prompts the user (tool writes files).
If python-docx is not installed the tool returns a failure dict whose `summary` carries the install hint `pip install 'aiswmm[report]'`.
---
# Create a minimal synthetic fixture
mkdir -p /tmp/swmm_report_fixture/09_audit
cat > /tmp/swmm_report_fixture/09_audit/experiment_provenance.json << 'EOF'
{
"schema_version": "1.0",
"run_id": "smoke-test-run",
"generated_at_utc": "2025-01-01T00:00:00Z",
"metrics": {"peak_flow": {"value": 1.23, "time_hhmm": "06:30"},
"continuity_error": -0.5, "swmm_return_code": 0},
"qa": {"checks": [{"id": "continuity", "ok": true, "detail": "within tolerance"}]},
"repo": {"git_head": "abc1234", "git_branch": "main"},
"tools": {"swmm5_version": "5.1.015", "python_version": "3.11"},
"artifacts": {
"model.inp": {"role": "input", "sha256": "4840dbe4abcdef", "exists": true,
"produced_by": "builder"}
},
"generated_by": "aiswmm"
}
EOF
python3 skills/swmm-report/scripts/generate_report.py \
--run-dir /tmp/swmm_report_fixture \
--out /tmp/swmm_report_smoke.docx
# Output: Report written to: /tmp/swmm_report_smoke.docxThe generated `.docx` follows engineering-report conventions:
`RGB(0,0,0)` — no Word default blue or grey.
automatically from template order. The cover title is unnumbered.
numbering sequential across the whole document.
the table shows and where the numbers come from (text sourced from template).
from the table counter.
(`fldChar begin` + `instrText " PAGE "` + `fldChar end`) so Word/LibreOffice renders a live page number.
---
Pass `--template <path>` (YAML or JSON) to control which sections appear and in what order. The built-in template at `skills/swmm-report/templates/default.yaml` uses all eleven sections:
| Section ID | Content | |---|---| | `cover` | Title, run ID, generated-at timestamp | | `run_summary` | Peak flow, time of peak, continuity error, return code | | `model_description` | Basin area, simulation window, impervious %, Green-Ampt params | | `qa_gates` | QA check table from `experiment_provenance.json` | | `design_review` | Rulebook verdict and per-rule table from `11_review/design_review.json` (says so when no review was run) | | `evidence_boundary` | Calibration status and review verdict stated in words: what these numbers are and are not | | `figures` | Embedded PNG figures from `00_raw/` (study-area map), `08_plot/` (canonical plots), `07_plots/` and `07_plot/` (legacy), plus root `network_layout.png` | | `diagnostics` | Model diagnostics from `model_diagnostics.json` | | `comparison` | Baseline comparison (skipped silently when unavailable) | | `provenance` | Artifact SHA-256 hashes from `experiment_provenance.json` | | `appendix` | Git head/branch, SWMM version, Python version |
A custom template only needs the sections it uses. Unknown section IDs are warned and skipped — they do not abort the build.
---
artifacts, not re-computed at report time.
internal XML is deterministic for a given template + data combination).
---
| Package | Purpose | Install | |---
Pre-1.0 · stable v0.9.4 · pip install aiswmm==0.9.4 · CHANGELOG Headaches from tedious model setup? Try our another project SWMMCanada, our automated model-building project: draw an area anywhere in Canada and get a ready-to-run SWMM model. Up and running now.
Repo: Zhonghao1995/agentic-swmm-workflow
Draft a well-formed new skill (a SKILL.md scaffold, optionally with scripts/references) from a described recurring need, for human review and approval. Use…
Synthesize a plausible SWMM drainage network from public data (OSM streets + DEM) when NO real pipe-network data exists — input is just a bbox. Use ONLY when…
Assemble a runnable SWMM INP deterministically from subcatchment geometry/attributes, merged parameter JSON, network JSON, and climate references. Use when…
Calibration and validation scaffold for EPA SWMM. Use when an agent needs to (1) compare simulated vs observed flow, (2) evaluate candidate parameter sets, (3)…
Fetch a ready-to-run SWMM model for any Canadian area from the SWMMCanada upstream service — real published municipal storm pipes where a supported city covers…
Deterministic rainfall/climate formatting for SWMM. Use when converting timestamped rainfall CSV files into SWMM-ready [TIMESERIES] lines and [RAINGAGES]…