bid-evaluator
Evaluate tabulated subcontractor bids against specs and drawings — scope gap analysis, exclusion risk scoring, award…
Draft RFIs and manage the ambient issue registry. Reviews issues surfaced by other skills, escalates to formal RFIs. Triggers: 'draft RFI', 'write RFI', 'drawing conflict', 'review issues', 'issue queue'.
Claude Code
$ npx -y skills add dleerdefi/claude-code-construction --skill rfi-drafter --agent claude-code
Codex
$ npx skills add dleerdefi/claude-code-construction --skill rfi-drafter -a codex -y
Cursor
$ npx skills add dleerdefi/claude-code-construction --skill rfi-drafter -a cursor -y
Gemini CLI
$ npx skills add dleerdefi/claude-code-construction --skill rfi-drafter -a gemini-cli -y
GitHub Copilot
$ npx skills add dleerdefi/claude-code-construction --skill rfi-drafter -a github-copilot -y
OpenCode
$ npx skills add dleerdefi/claude-code-construction --skill rfi-drafter -a opencode -y
Windsurf
$ npx skills add dleerdefi/claude-code-construction --skill rfi-drafter -a windsurf -y
name: rfi-drafter description: > Draft RFIs and manage the ambient issue registry. Reviews issues surfaced by other skills, escalates to formal RFIs. Triggers: 'draft RFI', 'write RFI', 'drawing conflict', 'review issues', 'issue queue'. argument-hint: "[issue id or description of the conflict]" disable-model-invocation: true
Two responsibilities: (1) draft formal RFIs from identified issues, and (2) manage the issue detection registry where potential problems surface during other skill workflows. Detection is ambient. Drafting is user- triggered. No RFI is ever created without explicit user instruction.
**Design**: RIGID output format and quality checks. GUIDED research sequence before drafting. FLEXIBLE across any trade, CSI division, or document conflict type.
Does NOT: autonomously discover issues and write RFIs, send RFIs without user review, or determine whether an issue is actually an error vs. intentional design.
| Script | Location | Purpose | |--------|----------|---------| | `rfi_export.py` | `${CLAUDE_SKILL_DIR}/scripts/rfi_export.py` | Populate firm's .docx template or generate generic RFI | | `issue_manager.py` | `${CLAUDE_PLUGIN_ROOT}/scripts/issue_manager.py` | CRUD for issue registry (.construction/skills/issues/) | | `generate_rfi_pdf.py` | `${CLAUDE_PLUGIN_ROOT}/scripts/rfi/generate_rfi_pdf.py` | Generate PDF RFI (alternative format) | | `rasterize_page.py` | `${CLAUDE_PLUGIN_ROOT}/scripts/pdf/rasterize_page.py` | Rasterize drawing pages for vision reading | | `crop_region.py` | `${CLAUDE_PLUGIN_ROOT}/scripts/pdf/crop_region.py` | Crop regions for targeted reading |
Run every script through `${CLAUDE_PLUGIN_ROOT}/bin/construction-python`, which selects the toolkit's Python on Windows, macOS and Linux. Never call bare `python`.
Do NOT create custom scripts during execution. All output goes through the scripts above.
---
The user identifies an issue and instructs Claude to draft an RFI. This is the primary workflow — a 30-minute task compressed to minutes.
Before the first RFI, ask the user for their firm's RFI form template. Construction teams have a branded template they use for all official RFIs — the output MUST match their format exactly.
**If .docx template provided:** 1. Read with python-docx to identify field locations (table cells, placeholders like `[PROJECT NAME]`, content controls) 2. Build a field mapping JSON linking each RFI data field to its location in the template 3. Store mapping at `.construction/skills/rfi-drafter/rfi_template_map.json` 4. Store a SHA-256 hash of the template for change detection
**If PDF template provided:** 1. Rasterize each page at 200 DPI 2. Read with vision to understand field layout and structure 3. Build the mapping JSON from visual analysis 4. Store at `.construction/skills/rfi-drafter/rfi_template_map.json`
**If no template available:** Fall back to the generic format built into `rfi_export.py`. Inform the user that providing their template is recommended for production RFIs.
On subsequent RFIs, reuse the stored mapping. If the template file hash differs from the stored hash, re-map.
Gather from the user (or from an issue registry record if escalating):
structural, drawing vs spec, etc.)
If the user's description is vague, ask clarifying questions. Never draft from ambiguous input — an RFI that doesn't clearly state the problem wastes everyone's time.
Before drafting, systematically gather evidence. Read `references/research-checklist.md` for the full checklist.
**Minimum research before any RFI:** 1. Read the specific area on the source sheet(s) 2. Check related details/sections for the same condition 3. Check the relevant spec section for requirements 4. Check if general notes address the condition 5. Check addenda and ASIs for superseding changes 6. Check existing RFI log for duplicates (if available)
Read the sheet by rasterizing it and cropping to the conflict zone (the `${CLAUDE_PLUGIN_ROOT}` paths below are substituted only here in SKILL.md, not in the reference files):
mkdir -p ".construction/skills/rfi-drafter/pages"
"${CLAUDE_PLUGIN_ROOT}/bin/construction-python" "${CLAUDE_PLUGIN_ROOT}/scripts/pdf/rasterize_page.py" "{pdf}" {page} --dpi 200 --output ".construction/skills/rfi-drafter/pages/page.png"
"${CLAUDE_PLUGIN_ROOT}/bin/construction-python" "${CLAUDE_PLUGIN_ROOT}/scripts/pdf/crop_region.py" ".construction/skills/rfi-drafter/pages/page.png" --box x1,y1,x2,y2 --normalized --output ".construction/skills/rfi-drafter/pages/conflict_area.png"Page images are working data: run these from the project folder and keep them under `.construction/skills/rfi-drafter/pages/`, never in the project root, never in `/tmp` or any other folder outside the project.
`{page}` is 1-based: `1` for a split sheet PDF, `page_index + 1` for a page in a bound set (sheet_index.yaml counts `page_index` from 0). The box is 0–1 fractions of the page.
First read `.construction/project.yaml`: present and readable means AgentCM manages the folder. A listing that shows the file does not decide it: read it. In AgentCM mode, read its files for cross-references to the affected area. See `references/research-checklist.md` for which files, and follow `${CLAUDE_PLUGIN_ROOT}/reference/agentcm-mode.md` (which source wins, missing files, drawings through `crop.sh`, corrections of AgentCM's data).
If research reveals the issue is already resolved (by addendum, ASI, or existing RFI response), inform the user — no RFI needed.
Use the format in `references/rfi-format.md`. Every RF
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…