bid-evaluator
Evaluate tabulated subcontractor bids against specs and drawings — scope gap analysis, exclusion risk scoring, award…
Extract tabular schedule data from construction drawings — door, window, finish, fixture, panel schedules — and output to Excel. Triggers: 'door schedule', 'extract schedule', 'schedule to Excel', 'panel schedule'.
Claude Code
$ npx -y skills add dleerdefi/claude-code-construction --skill schedule-extractor --agent claude-code
Codex
$ npx skills add dleerdefi/claude-code-construction --skill schedule-extractor -a codex -y
Cursor
$ npx skills add dleerdefi/claude-code-construction --skill schedule-extractor -a cursor -y
Gemini CLI
$ npx skills add dleerdefi/claude-code-construction --skill schedule-extractor -a gemini-cli -y
GitHub Copilot
$ npx skills add dleerdefi/claude-code-construction --skill schedule-extractor -a github-copilot -y
OpenCode
$ npx skills add dleerdefi/claude-code-construction --skill schedule-extractor -a opencode -y
Windsurf
$ npx skills add dleerdefi/claude-code-construction --skill schedule-extractor -a windsurf -y
name: schedule-extractor description: > Extract tabular schedule data from construction drawings — door, window, finish, fixture, panel schedules — and output to Excel. Triggers: 'door schedule', 'extract schedule', 'schedule to Excel', 'panel schedule'. argument-hint: "<sheet_number> [schedule_type]" disable-model-invocation: true
Extracts tabular schedule data embedded in drawing sheets or spec pages and outputs structured Excel files. Schedules are typically one element among many on a sheet — or the entire sheet may be a schedule.
Before extracting or reconciling, read `.construction/project.yaml`. Present and readable means AgentCM mode: note its `contract_version` and follow `${CLAUDE_PLUGIN_ROOT}/reference/agentcm-mode.md`. Absent means flat-file mode. A listing that shows the file, or `.construction/database.yaml` alone, does not decide it: read the file.
Extraction Progress: - [ ] Step 1: Discover schedule locations - [ ] Step 2: Isolate (crop) the schedule region - [ ] Step 3: Extract structured data (pdfplumber + vision) - [ ] Step 4: Validate and clean data - [ ] Step 5: Output to Excel - [ ] Step 6: Ingest to AgentCM (AgentCM mode) - [ ] Step 7: Write a finding
Use a multi-source discovery approach, checking all available sources:
Search `.construction/index/sheet_index.yaml` (or the sheet index you've built) for sheets with "SCHEDULE" in the title. Many important schedules occupy an **entire sheet** — the sheet title tells you exactly what it is:
For dedicated schedule sheets, the entire page is the extraction target — no need to crop.
In AgentCM mode (`.construction/project.yaml` exists; follow `${CLAUDE_PLUGIN_ROOT}/reference/agentcm-mode.md`), `.construction/INDEX.md`'s Schedules and legends table lists every table AgentCM found, each in its own `.construction/schedules/<sheet>-<n>.tsv`. The file's comment line gives the table's box on the sheet (x y w h, 0 to 1 from the top left) and, for a schedule already ingested, its `schedule_id` (`none` for a table read from the sheet's text alone). For embedded schedules on non-schedule sheets, that box is where to look: `sh .construction/crop.sh <sheet> <x> <y> <w> <h>`.
**Note**: A table read from the text is AgentCM's reading, and its box an estimate: treat both as leads, not definitive boundaries. Always verify with vision.
Schedules appear on specific sheet types:
If no index or graph is available:
"${CLAUDE_PLUGIN_ROOT}/bin/construction-python" "${CLAUDE_PLUGIN_ROOT}/scripts/pdf/rasterize_page.py" "{pdf_path}" {page} --dpi 150 --output ".construction/skills/schedule-extractor/pages/full_sheet.png"Use vision on the full sheet image: "Identify any tabular schedules on this drawing sheet. Report the approximate bounding box (top-left x,y and bottom-right x,y) as fractions of the image width and height between 0 and 1, the schedule type, and the column headers visible."
**For dedicated schedule sheets** (entire page is a schedule): Skip cropping — use the full page.
**For embedded schedules** (schedule is one element on a larger sheet):
Crop the identified region with padding. The box is the 0–1 fractions from Step 1, so `--normalized` is required; without it the script reads the values as pixels and returns an empty crop:
"${CLAUDE_PLUGIN_ROOT}/bin/construction-python" "${CLAUDE_PLUGIN_ROOT}/scripts/pdf/crop_region.py" ".construction/skills/schedule-extractor/pages/full_sheet.png" \
--box {x1},{y1},{x2},{y2} --normalized \
--padding 20 \
--output ".construction/skills/schedule-extractor/pages/schedule_crop.png"Re-rasterize at higher DPI (300) for the cropped region to improve text clarity. `rasterize_page.py --crop` takes percentages, so multiply each fraction by 100 (`0.62,0.08,0.98,0.45` becomes `62,8,98,45`):
"${CLAUDE_PLUGIN_ROOT}/bin/construction-python" "${CLAUDE_PLUGIN_ROOT}/scripts/pdf/rasterize_page.py" "{pdf_path}" {page} \
--dpi 300 \
--crop {x1_pct},{y1_pct},{x2_pct},{y2_pct} \
--output ".construction/skills/schedule-extractor/pages/schedule_hires.png"A table INDEX.md lists under Schedules and legends is already read. Turn its file into the exporter's data with the reader, never with a converter of your own:
"${CLAUDE_PLUGIN_ROOT}/bin/construction-python" "${CLAUDE_SKILL_DIR}/scripts/agentcm_schedule.py" ".construction/schedules/<sheet>-<n>.tsv" \
--type door_schedule --data ".construction/skills/schedule-extractor/<sheet>-<n>.json"It prints the header row it took and what it left out. A table read from the sheet's text has its title and header rows at the top: when it took the wrong row, give `--header-row <y>` (the line's position, as the file prints it) and `--header-rows <n>` for a header on several lines. Then verify the table against the drawing with `crop.sh` and the box on the file's comment line (Source B). Where the drawing shows a different value, correct that cell in the
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…