mikeonbreeze/cc-crossbeam/adu-targeted-page-viewer

Claude Code and agent skill by mikeonbreeze/cc-crossbeam

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Extracts construction plan PDFs into page PNGs, reads the sheet index to build a sheet-to-page manifest, and enables targeted viewing of specific sheets. This skill should be used when a corrections letter references specific plan sheets (e.g., "Sheet A3", "Detail 2/S3.1") and those sheets need to be located and analyzed within the PDF binder. Much faster than full plan extraction — builds the sheet manifest in under 2 minutes, then individual sheet lookups are instant. Triggers when a plan PDF…

Install

npx vskill@latest install mikeonbreeze/cc-crossbeam/adu-targeted-page-viewer

SKILL.md

ADU Targeted Page Viewer

Overview

Extract a construction plan PDF into page PNGs and build a JSON manifest mapping sheet IDs to page numbers. This enables fast, targeted viewing of specific sheets referenced in corrections letters — without doing deep content extraction of every page.

Speed: Under 2 minutes for the manifest. Individual sheet lookups are instant after that.

Key difference from full extraction: This skill only identifies WHICH page is WHICH sheet. It does not extract content, dimensions, materials, or structural details from each page. That analysis happens on-demand when a specific sheet is requested.

Prerequisites

  • pdftoppm / pdfinfo (from poppler): apt-get install poppler-utils (Linux) or brew install poppler (macOS)
  • ImageMagick (for resize + title block cropping): apt-get install imagemagick (Linux) or brew install imagemagick (macOS)

Workflow

Step 1: Extract All Pages to PNG

Check first: PNGs may already be pre-extracted. Look for pages-png/page-01.png in the project files directory. If PNGs already exist, skip this step entirely — go straight to Step 2.

If PNGs don't exist, run scripts/extract-pages.sh to split the PDF into individual page PNGs:

bash
scripts/extract-pages.sh <input.pdf> <output-dir>

This produces output-dir/pages-png/page-01.png, page-02.png, etc. at 200 DPI (full resolution, no resize). Takes ~5 seconds for a 26-page set. The script is idempotent — if PNGs already exist it exits immediately.

Step 2: Read the Cover Sheet and Find the Sheet Index

Read pages-png/page-01.png visually. The sheet index is typically in the top-right or right-side area of the cover sheet.

Extract the index as a list of entries:

CS → Cover Sheet
A1 → Site Plan
A2 → Floor Plan
A3 → Elevations & Roof Plan
S1.0 → Structural Notes
S2.0 → Foundation Plan
...

This gives the list of expected sheets and their descriptions.

If the index is not on page 1, check page 2 — some sets have a separate title page before the cover sheet.

Step 3: Match Sheet IDs to Page Numbers

The sheet index order generally matches the PDF page order, but there can be mismatches — the index might list 12 sheets while the PDF has 15 pages (extra city forms, checklists, etc.).

To resolve the mismatch, read the title blocks:

  1. Check if title block crops already exist at title-blocks/title-block-01.png. If they do, skip the cropping step. Otherwise, run scripts/crop-title-blocks.sh to crop the bottom-right corner of each page:
bash
scripts/crop-title-blocks.sh <output-dir>/pages-png <output-dir>/title-blocks
  1. Read each title block image to extract the sheet ID. Title blocks are small crops, so this is fast — the sheet ID is prominently displayed.
  1. Match each page's sheet ID against the index entries.

Optimization: If the page count matches the index count exactly, skip the title block reading — the index order IS the page order. Only do title block reading when there's a mismatch.

Parallel processing: When reading title blocks, launch parallel subagents (3-5 at a time) to read batches of title block crops. Each crop is tiny, so reading is fast.

Step 4: Build the Sheet Manifest

Output a JSON manifest file:

json
{
"source_pdf": "plans.pdf",
"total_pages": 15,
"indexed_sheets": 12,
"sheets": [
{
"sheet_id": "CS",
"page_number": 1,
"file": "page-01.png",
"description": "Cover Sheet"
},
{
"sheet_id": "A1",
"page_number": 5,
"file": "page-05.png",
"description": "(E) & (N) Site Plan"
},
{
"sheet_id": "S2.0",
"page_number": 11,
"file": "page-11.png",
"description": "Foundation Plan"
}
],
"unindexed_pages": [
{
"page_number": 2,
"file": "page-02.png",
"title_block_text": "City of Long Beach Forms"
}
]
}

Save this as output-dir/sheet-manifest.json.

Step 5: Targeted Sheet Viewing (On Demand)

When a corrections letter references a specific sheet:

  1. Look up the sheet ID in the manifest → get the page number and PNG path
  2. Read that PNG visually
  3. Analyze the specific area referenced (e.g., "Detail 2" → look for the detail numbered "2" on the sheet)
  4. Report what is on the sheet and what needs to change

See references/plan-sheet-conventions.md for how to navigate construction plan sheets — where title blocks are, how detail callouts work, and the sheet numbering system.

Integration with Corrections Interpreter

The corrections interpreter extracts sheet references from the corrections letter during its Phase 1 (reading the letter). It passes those references to this skill:

Corrections interpreter: "I need sheets A1, A3, S1.0, and S2.0"
↓
This skill: "A1 = page-05.png, A3 = page-07.png, S1.0 = page-09.png, S2.0 = page-11.png"
↓
Corrections interpreter reads those PNGs and produces targeted findings:
"On Sheet A3 (page 7), Detail 2 in the lower-right shows a standard soffit.
The patio is within 5' of the property line — replace with 1-hour fire-rated
assembly detail showing 5/8" Type X gypsum on the underside."

Important Notes

  • Do NOT do deep content extraction. This skill builds the sheet-to-page map, nothing more. Content analysis happens on-demand for specific sheets.
  • Title block = ground truth. The sheet index is a guide, but the title block on each page is the definitive source for which sheet that page is.
  • Contractors provide PDFs. The input will always be a PDF. The PNGs are intermediate artifacts for analysis.
  • Cache the manifest. Once built, the manifest is reusable for the entire corrections response process. No need to rebuild it.
  • Handle watermarks. Some plan sets have diagonal watermarks ("Study Set", "Not For Construction", "Review Copy"). These don't affect sheet identification — the title block is still readable.

Scripts

ScriptPurposeRuntime
scripts/extract-pages.shPDF → page PNGs at 200 DPI (full res, no resize). Idempotent.~5 sec for 26 pages
scripts/crop-title-blocks.shCrop bottom-right title block from each page. Idempotent.~2 sec for 26 pages

References

FileContents
references/plan-sheet-conventions.mdSheet numbering system, title block locations, detail callout conventions, common ADU plan set sizes

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
171
Repository forks
61
7-day trend score
26

Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 18 Mar 2026, 7 months ago.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/mikeonbreeze/cc-crossbeam/adu-targeted-page-viewer/badge)](https://verified-skill.com/skills/mikeonbreeze/cc-crossbeam/adu-targeted-page-viewer)

Something wrong with this skill or its page? Tell us.