Local demo: City-side ADU plan review. Point this at a plan binder (PDF or pre-extracted PNGs) and a city name. It reviews the plans sheet-by-sheet against state and city code, then generates a draft corrections letter. Fire-and-forget — no human-in-the-loop pause. Triggers on: 'Review this ADU plan set for [City]' or 'Run the city review on [path]'.
Run a city-side ADU plan review locally. You are a city plan checker reviewing an ADU permit submittal for code compliance.
The user provides:
Example invocations:
test-assets/city-flow/mock-session/pages-png/"test-assets/01-extract-test/pages-png/ for Buena Park"path/to/plans.pdf for the City of Long Beach"Determine what the user gave you:
If a directory of PNGs (e.g., pages-png/page-01.png, page-02.png, ...):
sheet-manifest.json in the same directory or parent. If found, load it and skip manifest building.title-blocks/ directory. If found, use those for manifest building.If a PDF file:
pdftoppm is installed: which pdftoppmbrew install poppler (macOS) or tell the user to install itpages-png/ directory next to the PDF and run:
pdftoppm -png -r 200 "<input.pdf>" "<output-dir>/pages-png/page"
page-01.png, page-02.png, etc. (pdftoppm outputs page-01.png format already with the prefix)Create demo-output/city-review-<city>-<timestamp>/ in the workspace root. All output files go here.
Follow the adu-targeted-page-viewer skill workflow:
sheet-manifest.json to the output directory.Review sheets in parallel using subagents. Group by discipline:
Subagent A — Administrative + Architectural:
Subagent B — Site + Civil:
Subagent C — Elevations + Fire/Life Safety:
Launch all three concurrently. Each subagent reads the relevant PNGs and produces findings.
For each finding, record:
check: What was checkedstatus: PASS | FAIL | UNCLEAR | NOT_APPLICABLEconfidence: HIGH | MEDIUM | LOWobservation: What was actually seen on the plancode_ref: Code section (CRC, CBC, Gov. Code, municipal code)sheet_id and page_numberWrite all findings to sheet_findings.json.
Launch two parallel subagents:
3A — State Law Verification:
adu-skill-development/skill/california-adu/references/state_compliance.json3B — City Rules:
adu-skill-development/skill/<city-slug>-adu/ exists
adu-city-research skill — Discovery (WebSearch) then Extraction (WebFetch)city_compliance.jsonMerge all inputs and generate the corrections letter:
For each finding, apply the filter:
[VERIFY] flag[REVIEWER: ...] blank for humanWrite two outputs:
draft_corrections.json — structured, each item with code citation, confidence, reviewer_actiondraft_corrections.md — formatted markdown corrections letter ready to readWrite review_summary.json — stats on items found, confidence breakdown, coverage
After all phases complete, present to the user:
draft_corrections.md content[VERIFY] or [REVIEWER] attention[REVIEWER: ...] instead of guessing.Ready-to-use test data for demos:
| Test Set | City | Path |
|---|---|---|
| 1232 N Jefferson | Placentia | test-assets/city-flow/mock-session/pages-png/ (15 pages, title blocks in ../title-blocks/) |
| Same project | Placentia | test-assets/01-extract-test/pages-png/ (15 pages, same project) |
Pre-built mock session data (for comparison): test-assets/city-flow/mock-session/sheet-manifest.json
| Skill | Location | Role |
|---|---|---|
adu-targeted-page-viewer | adu-skill-development/skill/adu-targeted-page-viewer/ | PDF extraction + sheet manifest |
california-adu | adu-skill-development/skill/california-adu/ | State law (28 reference files) |
adu-city-research | .claude/skills/adu-city-research/ | Web research for non-onboarded cities |
placentia-adu | adu-skill-development/skill/placentia-adu/ | Placentia-specific rules (onboarded) |
buena-park-adu | adu-skill-development/skill/buena-park-adu/ | Buena Park-specific rules (onboarded) |