bid-evaluator
Evaluate tabulated subcontractor bids against specs and drawings — scope gap analysis, exclusion risk scoring, award recommendation. Triggers: 'evaluate bids',…
Split a bound project manual PDF into individual spec section PDFs and extract searchable text. Triggers: 'split specs', 'break up the project manual', 'separate spec sections', 'extract spec text'. Prerequisite for /submittal-log-generator.
$ npx -y skills add dleerdefi/claude-code-construction --skill spec-splitter --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/spec-splitterContext preview
The summary Claude sees to decide when to auto-load this skill.
Split a bound project manual PDF into individual spec section PDFs and extract searchable text. Triggers: 'split specs', 'break up the project manual', 'separate spec sections', 'extract spec text'. Prerequisite for /submittal-log-generator.
name: spec-splitter description: > Split a bound project manual PDF into individual spec section PDFs and extract searchable text. Triggers: 'split specs', 'break up the project manual', 'separate spec sections', 'extract spec text'. Prerequisite for /submittal-log-generator. argument-hint: "<project_manual.pdf> [--output-dir <path>]" disable-model-invocation: true
Two functions for specification processing:
1. **Split**: Break a bound project manual PDF into individual spec section PDFs — navigable files the project team can use directly 2. **Extract**: Pull searchable text from each section PDF into persistent `.txt` files — enables downstream skills (submittal-log-generator, spec-parser) to work from text without re-extracting from PDFs
Run after `/project-setup` identifies bound spec manuals. Produces split PDFs, `spec_index.yaml`, and extracted text consumed by `/submittal-log-generator` and `/code-researcher`.
Either function can run independently. For example, specs may already be split but text has not yet been extracted.
Spec Split Progress: - [ ] Step 1: Check current state (split? text extracted?) - [ ] Step 2: Discover Specifications directory - [ ] Step 3: Find ALL spec PDFs (bound manuals) - [ ] Step 4-5: Split PDF into individual section files - [ ] Step 6: Write spec index - [ ] Step 7: Extract text from all sections - [ ] Step 8: Repair degraded/poor text quality - [ ] Step 9: Write graph entry (AgentCM only)
Check what already exists:
**Split PDFs present?**
**Text already extracted?**
Determine where split spec PDFs should go. Search for an existing Specifications directory (case-insensitive): 1. `02 - Specifications/` (numbered project folder convention) 2. `Specifications/` 3. Any folder with "specification" in the name
**Output directory resolution:**
Search the project directory for ALL PDFs that are specifications. Many projects have multiple spec PDFs:
Search in:
Process EACH PDF found. All split sections go to the same output directory.
If the user specifies a single file (`/spec-splitter path/to/specific-volume.pdf`), process only that file.
Run the split script with the resolved output directory:
${CLAUDE_SKILL_DIR}/../../bin/construction-python ${CLAUDE_SKILL_DIR}/scripts/split_spec_manual.py \
"{project_manual.pdf}" \
--output-dir "{resolved_spec_sections_dir}"The script: 1. Scans ALL pages for `SECTION XX XX XX` headers to find exact page boundaries — this is the primary method and does NOT depend on a Table of Contents 2. Scans all pages for Table of Contents entries to enrich section titles (optional, best-effort) 3. For sections without ToC titles, extracts titles directly from the section header page 4. Splits into individual PDFs named `{section_number} - {SECTION TITLE}.pdf` 5. Writes `spec_index.yaml` with section metadata
**ToC edge cases handled:**
After splitting (or if specs are already split), extract searchable text from every section:
${CLAUDE_SKILL_DIR}/../../bin/construction-python ${CLAUDE_SKILL_DIR}/scripts/extract_spec_text.py \
--specs-dir "{resolved_spec_sections_dir}" \
--output-dir ".construction/spec_text"The script:
After extraction, check `manifest.json` for sections rated DEGRADED or POOR. Spec-splitter owns text quality — downstream skills (submittal-log-generator, spec-parser) expect clean, repaired text.
**For DEGRADED sections** — attempt repair:
1. Read the `.txt` file and identify failure modes from the manifest 2. **Split word repair**: Scan for sequences of short tokens (≤2 chars) not in known abbreviation lists (GC, CM, PE, QA, SF, LF, etc.). Attempt progressive concatenation of adjacent tokens. Validate against construction vocabulary. Merge if valid; leave as-is if not. 3. **Merged word repair**: Tokens >25 characters that contain multiple dictionary words — insert spaces at word boundaries 4. **Garbled character repair**: Replace known encoding artifacts (e.g., `é` → `é`, ligature breakage) 5. After repair, re-assess quality. If improved, overwrite
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',…