Install
$ agentstack add skill-dleerdefi-claude-code-construction-sheet-splitter ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Sheet Splitter
Splits a bound drawing set PDF into individual page PDFs. Mirrors what spec-splitter does for specifications.
Pipeline Position
Run after /project-setup identifies bound drawing sets. Produces split PDFs and sheet_index.yaml consumed by /schedule-extractor and all drawing analysis skills.
This is valuable for:
- Project teams: Navigate drawings by sheet number instead of scrolling a multi-page PDF
- Other skills:
sheet-index-builder,drawing-reader, and all drawing analysis skills work better with individual sheet files - AgentCM: Split files become the basis for per-sheet structured data
Workflow
Sheet Split Progress:
- [ ] Step 1: Check if drawings are already split
- [ ] Step 2: Locate the bound drawing set
- [ ] Step 3: Split into individual page PDFs
- [ ] Step 4: Extract sheet numbers from title blocks
- [ ] Step 5: Rename files with sheet number + title
- [ ] Step 6: Update project context
- [ ] Step 7: Write graph entry (AgentCM only)
Step 1: Check if Drawings Are Already Split
Look for individual sheet PDFs. Drawings are already split if:
- AgentCM:
.construction/index/sheet_index.yamlexists with individual sheet entries and file paths point to split PDFs - Multiple PDFs exist with sheet number patterns in filenames (e.g.,
A-1.1 - FLOOR PLAN.pdf) - A
sheet_index.yamlexists in the drawings directory
If already split, report the count and skip. If AgentCM has the sheet index but files haven't been physically split on disk, offer to split using the existing metadata for naming.
Step 2: Find ALL Drawing PDFs
Search the project directory for ALL PDFs that are drawings. Many projects have multiple drawing PDFs:
- Multi-part sets: Part1.pdf, Part2.pdf, Part3.pdf (split by file size)
- Discipline sets: Architectural.pdf, Civil.pdf, Electrical.pdf, Mechanical.pdf
- Single combined: one large PDF with all sheets
Search in:
- Folders named
drawings/,plans/,01 - Drawings/, or similar (case-insensitive) - The project root (some projects have no folder structure)
- Look for PDFs > 2MB with keywords: "plan", "drawing", "bid set", "dwg", discipline names
Process EACH PDF found. All split pages go to the same sheets/ output directory.
If the user specifies a single file (/sheet-splitter path/to/specific.pdf), process only that file.
Step 3: Split Pages
Run the split script on each drawing PDF found:
${CLAUDE_SKILL_DIR}/../../bin/construction-python ${CLAUDE_SKILL_DIR}/scripts/split_drawing_set.py \
"{drawing_set.pdf}" \
--output-dir "{drawings_directory}/sheets"
The script splits each page into its own PDF: page_001.pdf, page_002.pdf, etc. It does NOT attempt to read sheet numbers — that's unreliable across different title block formats.
Step 4: Identify Sheets via Vision
After splitting, read each page to identify sheet numbers and titles:
- Rasterize the title block region of each page:
${CLAUDE_SKILL_DIR}/../../bin/construction-python ${CLAUDE_SKILL_DIR}/../../scripts/pdf/rasterize_page.py page_NNN.pdf 1 --dpi 200 --output tb.png
- Use vision on the rasterized title block: "Read the title block on this construction drawing. What is the sheet number and sheet title?"
- Rename the file:
page_001.pdf→A-1.1 - FLOOR PLAN.pdf
- Update
sheet_index.yamlwith the identified sheet number, title, and discipline.
Title blocks vary significantly across firms — they can be on the east side, south side, or bottom-center. Some use VA standard forms, some use firm-specific formats. Vision handles all these variations.
Step 5: Write Sheet Index
After identifying all sheets, write .construction/index/sheet_index.yaml.
Output
sheets/
A-1.1 - FLOOR PLAN.pdf ← renamed by Claude via vision
A-2.1 - ELEVATIONS.pdf
S-1.1 - FOUNDATION PLAN.pdf
page_006.pdf ← could not read title block
...
sheet_index.yaml
Step 6: Update Project Context
After splitting and identifying, update .construction/project_context.yaml with:
documents.drawing_count: number of sheetsdocuments.disciplines: list of unique discipline prefixes found
Step 7: Write Graph Entry (AgentCM only)
If .construction/ directory exists, write a graph entry:
${CLAUDE_SKILL_DIR}/../../bin/construction-python ${CLAUDE_SKILL_DIR}/../../scripts/graph/write_finding.py \
--type "drawings_split" \
--title "Drawing set split: {N} sheets from {source_pdf}" \
--data '{"sheet_count": N, "source_pdf": "...", "identified_count": M, "unidentified_count": K, "disciplines": ["A","S","M","E"]}'
If no .construction/ directory exists, skip — the sheet_index.yaml serves as the local record.
Multi-Set Projects
When a project has multiple drawing set PDFs (e.g., Architectural, MEP, Civil as separate files), use the source PDF name as a subdirectory to avoid filename collisions:
sheets/
Architectural_Bid_Set/
page_001.pdf ... page_050.pdf
MEP_Bid_Set/
page_001.pdf ... page_030.pdf
sheet_index.yaml ← merged from all sets
Pass --output-dir "{drawings_directory}/sheets/{source_pdf_stem}" to the split script for each set. The sheet_index.yaml merge logic combines entries from all subdirectories into a single index.
Report to user: number of pages split, how many identified via vision, output location.
File Safety
Never overwrite existing split sheet PDFs. If sheets/ directory already contains files, check for conflicts before writing. The sheet_index.yaml merge uses additive logic — existing entries are preserved.
Allowed Scripts
Allowed scripts — exhaustive list. Only execute these scripts during this skill:
scripts/split_drawing_set.py— split bound PDF into per-page PDFs../../scripts/pdf/rasterize_page.py— rasterize PDF pages for vision identification../../scripts/graph/write_finding.py— graph entry (Step 7)
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: dleerdefi
- Source: dleerdefi/claude-code-construction
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.