bid-evaluator
Evaluate tabulated subcontractor bids against specs and drawings — scope gap analysis, exclusion risk scoring, award…
Split a bound drawing set PDF into individual sheet PDFs. Extracts sheet numbers from title blocks via vision, renames files, and records where the cover sheet's drawing index disagrees with the set, logging the ones that need an RFI for rfi-drafter. Triggers: 'split drawings',
Claude Code
$ npx -y skills add dleerdefi/claude-code-construction --skill sheet-splitter --agent claude-code
Codex
$ npx skills add dleerdefi/claude-code-construction --skill sheet-splitter -a codex -y
Cursor
$ npx skills add dleerdefi/claude-code-construction --skill sheet-splitter -a cursor -y
Gemini CLI
$ npx skills add dleerdefi/claude-code-construction --skill sheet-splitter -a gemini-cli -y
GitHub Copilot
$ npx skills add dleerdefi/claude-code-construction --skill sheet-splitter -a github-copilot -y
OpenCode
$ npx skills add dleerdefi/claude-code-construction --skill sheet-splitter -a opencode -y
Windsurf
$ npx skills add dleerdefi/claude-code-construction --skill sheet-splitter -a windsurf -y
name: sheet-splitter description: > Split a bound drawing set PDF into individual sheet PDFs. Extracts sheet numbers from title blocks via vision, renames files, and records where the cover sheet's drawing index disagrees with the set, logging the ones that need an RFI for rfi-drafter. 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:
In an AgentCM project the app splits drawing sets (Split & Rename), and this skill only says so (Step 1).
Sheet Split Progress: - [ ] Step 1: Check the mode, and whether 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, rename files with sheet number + title - [ ] Step 5: Check the sheets against the drawing index - [ ] Step 6: Write the sheet index - [ ] Step 7: Update project context
First read `.construction/project.yaml`. If it exists, AgentCM manages this folder: do not split, rename or index anything.
Without `.construction/project.yaml`, drawings are already split if:
If already split, report the count and skip.
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_PLUGIN_ROOT}/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:
Use PDF bookmarks and the title-block text layer only as candidates — they are often abbreviated or stale (e.g. a bookmark "Site Grading Plan" on a sheet printed "Proposed Site Plan"). The printed title block wins. Read the title block by vision whenever there is no candidate, the candidate disagrees with the title-block text, or the sheet number carries a suffix (e.g. `C9.04H`, `K-1.1`).
1. Rasterize the title block region of each page, from the project folder:
mkdir -p ".construction/skills/sheet-splitter/pages"
"${CLAUDE_PLUGIN_ROOT}/bin/construction-python" "${CLAUDE_PLUGIN_ROOT}/scripts/pdf/rasterize_page.py" "{sheets_dir}/page_NNN.pdf" 1 --dpi 200 --output ".construction/skills/sheet-splitter/pages/tb_NNN.png"Title-block images are working data: keep them under `.construction/skills/sheet-splitter/pages/`. Never put them in the sheets folder, where the PE's split sheets are, and never in `/tmp` or any other folder outside the project.
2. 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. When a bookmark title differs from the printed title, keep it as `bookmark_title`.
**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.
The cover or title sheet usually lists every sheet in a drawing index (also called a sheet index or list of drawings). When the set has one, compare it with the title blocks read in Step 4. The title blocks still name the files; the index only shows where the set disagrees with itself.
1. Read the index sheet's tex
Open-source skills that give Claude Code the working knowledge of a Project Engineer.
Evaluate tabulated subcontractor bids against specs and drawings — scope gap analysis, exclusion risk scoring, award…
Extract data from subcontractor bid PDFs and produce a comparison spreadsheet. Feeds into /bid-evaluator. Triggers: 'tabulate…
Researches which building codes, accessibility standards and authority requirements (health department, fire marshal, state…
Operating guide for construction project documents — load before reading drawings, specs, schedules, RFIs, submittals or bids.…
Checks construction drawings and specs for what's missing, cross-trade coordination conflicts and scope gaps, with PE judgment.…
Set up a construction project — inventories files, classifies drawings/specs/schedules/registers and appends construction context…
Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work. Also covers…
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling…