ccr-summary
CCR summary, summarize a CCR, Consumer Confidence Report PDF, water quality report PDF, 40 CFR 141.156, § 141.156 summary
Skill by KroniK907
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/kronik907-ccr-summary
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: documents
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/ccr-summary
What's inside
- Skill name
ccr-summary- Description
- CCR summary, summarize a CCR, Consumer Confidence Report PDF, water quality report PDF, 40 CFR 141.156, § 141.156 summary
- License
- MIT
- Instructions
- 269 lines in SKILL.md · view on GitHub
Files (3)
- SKILL.md
- example.md
- requirements.md
SKILL.md (first lines)
# CCR Summary (40 CFR § 141.156)
Generate the **opening summary** for a CCR by reading the full report PDF and mapping findings to [40 CFR § 141.156](https://www.law.cornell.edu/cfr/text/40/141.156). The summary is **not** a rewrite of the whole report. It states what consumers need first.
**Scope note:** This workflow **excludes § 141.156(c)(2)** (limited English proficiency / translated reports). Only include that block if the user explicitly asks and the system is subject to § 141.153(h)(3).
**Local references** (in this repo): `40 CFR § 141.153…html`, `40 CFR § 141.155…html`, `40 CFR § 141.156…html`.
For the full regulatory checklist and PDF search patterns, read [requirements.md](requirements.md). For a worked small-system example, read [example.md](example.md).
---
## Heading rule (do not skip)
**All subsection headings in summary output MUST be h5 - five hash marks (`#####`) in markdown.**
| Correct | Wrong |
|-----------|---------|
| `##### Your water at a glance` | `## Your water at a glance` |
| `##### How to get more information` | `### How to get more information` |
| `##### Paper copy of this report` | `#### Paper copy of this report` |
- **Opening paragraphs:** no heading (the printed report supplies the title).
- **Subsections below the opening:** `#####` only - never `#`, `##`, `###`, or `####`.
- **§ 141.156(f) sharing block:** omit the heading if the layout supplies it; if you include one, it must still be `##### Please share this report`.
This matches the CCR layout template. Using `##` or other levels will break formatting.
---
## Workflow
Copy this checklist and mark items as you go:
```
CCR summary progress:
- [ ] Step 1: Extract full PDF text
- [ ] Step 2: Identify system metadata and delivery context
- [ ] Step 3: Scan for violations/compliance (required sources)
- [ ] Step 4: Extract contact information
- [ ] Step 5: Evaluate conditional § 141.156(c) and (e) items
- [ ] Step 6: Draft summary using template (**subsection headings = `#####` / h5 only**)
- [ ] Step 7: Compliance self-check (**verify h5 headings before sending**)
```
### Step 1: Extract full PDF text
Do not rely on partial reads. Extract **every page** to a UTF-8 text file (avoids Windows console encoding errors):
```python
from pypdf import PdfReader
path = r"<absolute-path-to-ccr.pdf>"
out = r"<absolute-path-to-extract.txt>"
reader = PdfReader(path)
with open(out, "w", encoding="utf-8") as f:
for i, page in enumerate(reader.pages):
f.write(f"--- PAGE {i+1} ---\n")
f.write(page.extract_text() or "")
f.write("\n\n")
```
If `pypdf` is missing: `pip install pypdf`. If extraction is empty or garbled, tell the user the PDF may be scanned - OCR will be needed before summarizing.
### Step 2: System metadata and delivery context
Record from the report (usually cover, footer, or “System Contact”):
| Field | Where to look |
|-------|----------------|
| System name | Title / header |
| PWSID | Header or contact block |
| Report year / monitoring period | Title (“For The Year Of …”) |
| Population served | Sometimes in header or certification (not always in PDF) |
| Delivery method | Cover “online version,” QR code, website URL, mail/email notices |
**Delivery drives conditionals:**
- **Paper mail/hand delivery only** → § 141.156(c)(1) usually **not** needed.
- **Website link, email link, or other electronic delivery** (§ 141.155(a)(1)(ii)-(iv)) → summary **must** include directions to request a **paper copy** per § 141.155(a)(2). Use the system’s actual request process if stated; otherwise use the regulatory minimum (contact phone/email/mail).
**Biannual / 6-month update (§ 141.156(e)):** Required only if the system serves **≥ 10,000 persons** and distributes twice per year (§ 141.155(j)(2)). Small systems like mobile home parks typically **skip (e)** unless the report itself states biannual delivery.
### Step 3: Violations and compliance summary (§ 141.156(b)(1))
Summarize **only what appears in the report** for the monitoring period covered. Source sections in the **full report** (not only the summary you are writing):
| CFR source | What to find in the PDF |
|------------|-------------------------|
| **§ 141.153(d)(6)** | Contaminant tables: `Violation` = Y/Yes; values over MCL/MRDL/TT; narrative “violation,” “exceeded,” “failed to meet.” Include length, health effects language, and corrective actions if provided. |
| **§ 141.153(d)(8)** | Lead **action level** exceedance: 90th percentile or `Samples > AL` > 0; lead exceedance explanation; consumer steps to reduce exposure; corrective actions. |
| **§ 141.153(f)** | NPDWR compliance violations **other than** contaminant-level exceedances already in (d)(6): monitoring/reporting failures, filtration/disinfection (subpart H), lead/copper **rule** violations (failure to complete required actions - not the same as AL exceedance in (d)(8)), subpart K, recordkeeping, §§ 141.40/141.41 monitoring, variance/exemption/order violations. |
| **§ 141.153(h)(6)** | Groundwater Rule (subpart S): uncorrected **significant deficiency**, fecal indicator-positive source, state-approved correction plan - often a dedicated section. |
| **§ 141.153(h)(7)** | Revised Total Coliform Rule (subpart Y): Level 1/2 assessments, E. coli MCL, missed assessments/corrective actions - often a dedicated section. |
**If no violations in any category:** State clearly that the report shows **no violations** of drinking water standards for the period covered (still required content for (b)(1)).
**Do not treat as violations:**
- Educational arsenic/lead text when MCL/AL are met
- Monitoring **waivers** (e.g., SOC, asbestos) unless the report says a violation occurred
- Detected contaminants **below** MCL/AL with `Violation` = N
**Testing waivers (optional one-sentence summary):** If the report has a “Testing Waivers” (or similar) section and the system had **no violations**, you may add **one short plain-language sentence** in **Your water at a glance** so readers know skipped tests are not problems. **Do not** name EPA, the state, primacy agency, or any regulator as who granted the waiver - the report may say “EPA,” “State,” or “ADEC,” but the summary must stay **agency-neutral**.
| Avoid | Use instead |
|-------|-------------|
| “when EPA allowed us to skip tests” | “we were not required to run some tests” |
| “EPA granted a waiver” | “some tests do not apply to our system” |
| “ADEC/the State approved…” | (omit agency name entirely) |
**Example (plain language):** “We also did not run some tests (for example, asbestos and certain chemicals) because they do not apply to our system. Skipping those tests is **not** a violation.”
See [requirements.md](requirements.md) for subsection detail and search keywords.
### Step 4: Contact information (§ 141.156(b)(2) / § 141.153(h)(2))
Include **telephone** (required) for owner, operator, or designee. Also include name, email, and address when present. Prefer the block labeled “System Contact,” “Operator Contact,” or end-of-report contact.From KroniK907/agent-config, MIT.
More from KroniK907/agent-config
- 0.570score
babysit
KroniK907
Babysit a pull request: wait for reviewbot, fix what holds up, push, and repeat until the review comes back clean, then merge.
SkillAFreshness: AClaude Code +9 - 0.567score
backlog-sweep
KroniK907
Sweep a repo's open GitHub issues: close what shipped or went stale, narrow what is half done, and label small quick work priority: high.
SkillAFreshness: AClaude Code +9 - 0.565score
subagent
KroniK907
Pick the model and reasoning effort for a subagent before you spawn one.
SkillAFreshness: AClaude Code +9 - 0.565score
hatch
KroniK907
Open a hatch: serve a dev server, static page, report, or prototype on a private tailnet URL with the hatch CLI.
SkillAFreshness: AClaude Code +9 - 0.561score
writing-for-agents
KroniK907
writing for agents, create or edit skills, AGENTS.md, CLAUDE.md, project rules, skill description pointers, context pointers, leading words
SkillAFreshness: AClaude Code +9 - 0.561score
commit
KroniK907
commit this chat, git commit agent output, snapshot chat changes, commit work from this conversation, commit only this session's changes, split commits from…
SkillAFreshness: AClaude Code +9 - 0.561score
improve-codebase-architecture
KroniK907
deep modules, shallow modules, improve architecture, refactoring opportunities, consolidate tightly-coupled modules, module deepening, architectural friction
SkillAFreshness: AClaude Code +9 - 0.558score
triage-issue
KroniK907
triage, bug report, file issue with fix plan, investigate a problem, root cause and TDD fix plan, what's broken
SkillAFreshness: AClaude Code +9 - 0.553score
write-a-skill
KroniK907
write-a-skill, create a skill, write a skill, build an agent skill, new agent skill
SkillAFreshness: AClaude Code +9 - 0.553score
wayfinder
KroniK907
Overview of the wayfinder map lifecycle - map, grill, build, release - and which skill runs each step.
SkillAFreshness: AClaude Code +9 - 0.552score
taste-skill-v2
KroniK907
Anti-slop frontend skill for landing pages, portfolios, and redesigns.
SkillAFreshness: AClaude Code +9 - 0.539score
code-review
KroniK907
Review a PR, branch, or diff since a ref on two axes - standards and spec - and report or post the findings.
SkillAFreshness: AClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 7
- Last commit (this folder)
- Sep 26, 2026 (1 month ago)
- Last release
- Sep 23, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/KroniK907/agent-config
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from KroniK907
- 0.570score
babysit
KroniK907
Babysit a pull request: wait for reviewbot, fix what holds up, push, and repeat until the review comes back clean, then merge.
SkillAFreshness: AClaude Code +9 - 0.567score
backlog-sweep
KroniK907
Sweep a repo's open GitHub issues: close what shipped or went stale, narrow what is half done, and label small quick work priority: high.
SkillAFreshness: AClaude Code +9 - 0.565score
subagent
KroniK907
Pick the model and reasoning effort for a subagent before you spawn one.
SkillAFreshness: AClaude Code +9 - 0.565score
hatch
KroniK907
Open a hatch: serve a dev server, static page, report, or prototype on a private tailnet URL with the hatch CLI.
SkillAFreshness: AClaude Code +9 - 0.561score
commit
KroniK907
commit this chat, git commit agent output, snapshot chat changes, commit work from this conversation, commit only this session's changes, split commits from…
SkillAFreshness: AClaude Code +9 - 0.561score
improve-codebase-architecture
KroniK907
deep modules, shallow modules, improve architecture, refactoring opportunities, consolidate tightly-coupled modules, module deepening, architectural friction
SkillAFreshness: AClaude Code +9
Cite this page
ccr-summary skill. Agent Mart. https://agentmart.dev/skills/kronik907-ccr-summary (last updated 2026-10-24)