Evaluate tabulated subcontractor bids against specs and drawings — scope gap analysis, exclusion risk scoring, award recommendation. Triggers: 'evaluate bids', 'bid evaluation', 'lowest responsible bidder'.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
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'.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
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:
[PROJECT NAME], content controls).construction/skills/rfi-drafter/rfi_template_map.jsonIf PDF template provided:
.construction/skills/rfi-drafter/rfi_template_map.jsonIf 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):
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:
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 RFI must include:
Read references/rfi-format.md for the full template, field-by-field
guidance, and an example RFI.
Before presenting to user, verify against the checklist in
references/quality-checks.md. Key gates:
Present the draft RFI to the user in conversation. The user may:
On export, write the RFI data with the Write tool to .construction/skills/rfi-drafter/rfi_draft.json (working data, never the project root), then invoke from the project folder; the .docx is the deliverable and goes in the project root (or the folder the PE names), never under .construction/:
# Template mode (preferred — matches firm's format):
"${CLAUDE_PLUGIN_ROOT}/bin/construction-python" "${CLAUDE_SKILL_DIR}/scripts/rfi_export.py" \
--template "path/to/firm_rfi_form.docx" \
--mapping .construction/skills/rfi-drafter/rfi_template_map.json \
--data .construction/skills/rfi-drafter/rfi_draft.json \
--output RFI-026.docx
# Generic mode (fallback — no template):
"${CLAUDE_PLUGIN_ROOT}/bin/construction-python" "${CLAUDE_SKILL_DIR}/scripts/rfi_export.py" \
--data .construction/skills/rfi-drafter/rfi_draft.json \
--output RFI-026.docx
Output is always .docx so the user can make final edits before sending.
The script uses safe_output_path() — never overwrites existing files.
Other skills (tag-audit-and-takeoff, pe-review, submittal-review, etc.)
surface potential issues during their normal work. These issues
accumulate in .construction/skills/issues/ as JSON records, NOT as RFIs.
Any skill can write an issue record. Read references/issue-schema.md
for the full schema. An issue record contains:
Critical rule: no skill writes an RFI directly. Skills write issue records. The user reviews the queue. The user decides which issues become RFIs.
When the user asks to review issues ("check the issues list", "what issues have been found", "any problems detected"):
.construction/skills/issues/# List all open issues (sorted by severity, then confidence)
"${CLAUDE_PLUGIN_ROOT}/bin/construction-python" "${CLAUDE_PLUGIN_ROOT}/scripts/issue_manager.py" list
# List with human-readable table format
"${CLAUDE_PLUGIN_ROOT}/bin/construction-python" "${CLAUDE_PLUGIN_ROOT}/scripts/issue_manager.py" list --table
# Filter by severity or source skill
"${CLAUDE_PLUGIN_ROOT}/bin/construction-python" "${CLAUDE_PLUGIN_ROOT}/scripts/issue_manager.py" list --severity conflict
"${CLAUDE_PLUGIN_ROOT}/bin/construction-python" "${CLAUDE_PLUGIN_ROOT}/scripts/issue_manager.py" list --source-skill "pe-review"
# Get a specific issue
"${CLAUDE_PLUGIN_ROOT}/bin/construction-python" "${CLAUDE_PLUGIN_ROOT}/scripts/issue_manager.py" get --id ISS-2026-0001
# Escalate an issue to RFI
"${CLAUDE_PLUGIN_ROOT}/bin/construction-python" "${CLAUDE_PLUGIN_ROOT}/scripts/issue_manager.py" update \
--id ISS-2026-0001 --status escalated --rfi-number RFI-026
# Summary statistics
"${CLAUDE_PLUGIN_ROOT}/bin/construction-python" "${CLAUDE_PLUGIN_ROOT}/scripts/issue_manager.py" stats
Other skills log issues without loading this skill: the issue_manager.py add
command, the severity mapping and the pattern vocabulary are in
construction-guide's Issue Registry paragraph. This skill only reads the
registry and escalates.
RFI documents are produced as Word (.docx) via scripts/rfi_export.py.
Two modes:
Output is always .docx — the user must be able to edit before sending.
Read references/rfi-format.md for field-by-field content guidance.
Template mapping is stored at .construction/skills/rfi-drafter/rfi_template_map.json.
Created on first RFI, reused for all subsequent RFIs in the project.
Issue records are JSON files in .construction/skills/issues/.
Managed via ${CLAUDE_PLUGIN_ROOT}/scripts/issue_manager.py.
Allowed scripts — exhaustive list. Only execute these scripts during this skill:
scripts/rfi_export.py — export RFI to .docx using a firm template or generic format${CLAUDE_PLUGIN_ROOT}/scripts/issue_manager.py — manage the ambient issue registry (read/write/escalate)${CLAUDE_PLUGIN_ROOT}/scripts/rfi/generate_rfi_pdf.py — generate RFI PDF output${CLAUDE_PLUGIN_ROOT}/scripts/pdf/rasterize_page.py — rasterize a drawing PDF page for issue context${CLAUDE_PLUGIN_ROOT}/scripts/pdf/crop_region.py — crop a region from a rasterized sheet for issue context${CLAUDE_PLUGIN_ROOT}/scripts/corrections_append.py — AgentCM mode: record a correction of AgentCM's data (reference/agentcm-mode.md)아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
Evaluate tabulated subcontractor bids against specs and drawings — scope gap analysis, exclusion risk scoring, award recommendation. Triggers: 'evaluate bids', 'bid evaluation', 'lowest responsible bidder'.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Extract data from subcontractor bid PDFs and produce a comparison spreadsheet. Feeds into /bid-evaluator. Triggers: 'tabulate bids', 'bid comparison', 'compare bids', 'buyout analysis', 'bid tab'.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Researches which building codes, accessibility standards and authority requirements (health department, fire marshal, state agency) apply to a scope or spec section, and which the project documents miss. Use for 'what codes apply', 'code check', 'ADA requirements', 'egress', 'health department'. Not for reading what the drawings or specs say (construction-guide).
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Operating guide for construction project documents — load before reading drawings, specs, schedules, RFIs, submittals or bids. Data-access rules (never read PDFs directly; rasterize first), AgentCM graph-guided vision, drawing and cross-reference conventions, document precedence. Triggers: 'construction project', 'drawings', 'specs', 'sheet', 'RFI', 'submittal'.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Checks construction drawings and specs for what's missing, cross-trade coordination conflicts and scope gaps, with PE judgment. Use for 'what's missing', 'check coordination', 'scope gap', or researching an RFI before answering it. Not for drafting RFIs (rfi-drafter), code research (code-researcher) or reviewing a submittal package (the user runs /construction:submittal-review).
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Set up a construction project — inventories files, classifies drawings/specs/schedules/registers and appends construction context to CLAUDE.md; in an AgentCM project, prints AgentCM's orientation instead. Triggers: 'set up project', 'construction setup', 'classify documents'.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.