bid-evaluator
Evaluate tabulated subcontractor bids against specs and drawings — scope gap analysis, exclusion risk scoring, award recommendation. Triggers: 'evaluate bids',…
Split a bound drawing set PDF into individual sheet PDFs. Extracts sheet numbers from title blocks via vision, renames files. Triggers: 'split drawings', 'break up the drawing set', 'separate sheets'. Run after /project-setup.
$ npx -y skills add dleerdefi/claude-code-construction --skill sheet-splitter --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/sheet-splitterContext preview
The summary Claude sees to decide when to auto-load this skill.
Split a bound drawing set PDF into individual sheet PDFs. Extracts sheet numbers from title blocks via vision, renames files. Triggers: 'split drawings', 'break up the drawing set', 'separate sheets'. Run after /project-setup.
name: sheet-splitter description: > Split a bound drawing set PDF into individual sheet PDFs. Extracts sheet numbers from title blocks via vision, renames files. Triggers: 'split drawings', 'break up the drawing set', 'separate sheets'. Run after /project-setup. argument-hint: "<drawing_set.pdf> [--output-dir <path>]" disable-model-invocation: true
Splits a bound drawing set PDF into individual page PDFs. Mirrors what spec-splitter does for specifications.
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:
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)
Look for individual sheet PDFs. Drawings are already split if:
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.
Search the project directory for ALL PDFs that are drawings. Many projects have multiple drawing PDFs:
Search in:
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.
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.
After splitting, read each page to identify sheet numbers and titles:
1. 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.png2. Use vision on the rasterized title block: "Read the title block on this construction drawing. What is the sheet number and sheet title?"
3. Rename the file: `page_001.pdf` → `A-1.1 - FLOOR PLAN.pdf`
4. Update `sheet_index.yaml` with 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.
After identifying all sheets, write `.construction/index/sheet_index.yaml`.
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
After splitting and identifying, update `.construction/project_context.yaml` with:
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.
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 setsPass `--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.
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
Open-source skills that give Claude Code the working knowledge of a Project Engineer. Split drawings, parse specs, tabulate bids, generate subcontracts, and more — directly from your terminal or IDE.
Evaluate tabulated subcontractor bids against specs and drawings — scope gap analysis, exclusion risk scoring, award recommendation. Triggers: 'evaluate bids',…
Extract data from subcontractor bid PDFs and produce a comparison spreadsheet. Feeds into /bid-evaluator. Triggers: 'tabulate bids', 'bid comparison', 'compare…
Scope-specific code gap analysis — extracts referenced codes from project docs, researches what should apply, surfaces the delta. Triggers: 'code research',…
Construction document review with PE judgment — RFI research, submittal analysis, coordination checking, scope gap detection. Use when reviewing drawings,…
Set up a construction project — inventories files, classifies drawings/specs/schedules/registers, detects AgentCM mode, appends construction context to…
Draft RFIs and manage the ambient issue registry. Reviews issues surfaced by other skills, escalates to formal RFIs. Triggers: 'draft RFI', 'write RFI',…