Evaluate tabulated subcontractor bids against specs and drawings — scope gap analysis, exclusion risk scoring, award recommendation. Triggers: 'evaluate bids', 'bid evaluation', 'lowest responsible bidder'.
日本語の概要は準備中です。原文の説明を表示しています。
Expert PE review of a submittal (shop drawings, product data, samples, equipment brochures) against specs, drawings, code questions and trade coordination. Produces findings with both sources, trade routing and a completeness gate. Triggers: 'review submittal', 'review shop drawings'.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Review a submittal the way an experienced Project Engineer does, then hand the PE a draft GC review they can trust. The trust comes from four things:
What it produces: findings with sources and actions, a suggested GC disposition, routing to the trades that must act and by when, code and authority questions, and what could not be verified. What it never does: approve, stamp or send anything. The PE decides the disposition and sends the review.
The procedure is the same for every CSI division. Your knowledge of the trade supplies the checks. references/review-lens.md lists what reviews most often skip: package questions, cross-trade handoffs, and code and authority questions.
| Script | Location | Purpose |
|---|---|---|
find_pages.py | ${CLAUDE_PLUGIN_ROOT}/scripts/pdf/ | Index a large submittal once; find the pages for each element |
check_review.py | ${CLAUDE_SKILL_DIR}/scripts/ | Write review records; prove the review is complete |
export_submittal_review.py | ${CLAUDE_SKILL_DIR}/scripts/ | Build the Excel review, suggested disposition and markup items |
annotate_pdf.py | ${CLAUDE_PLUGIN_ROOT}/scripts/pdf/ | Write review clouds and notes onto a copy of the submittal |
rasterize_page.py, crop_region.py, extract_text_region.py | ${CLAUDE_PLUGIN_ROOT}/scripts/pdf/ | Read submittal and drawing pages |
issue_manager.py | ${CLAUDE_PLUGIN_ROOT}/scripts/ | Log design-team questions as issues for rfi-drafter |
write_finding.py | ${CLAUDE_PLUGIN_ROOT}/scripts/graph/ | Graph entry (AgentCM only) |
Run every script through "${CLAUDE_PLUGIN_ROOT}/bin/construction-python". Double-quote every path. Do not write custom scripts: write the JSON files below directly and let the permitted scripts read them.
Load the construction-guide skill before reading any project document. Never read construction PDFs directly: rasterize pages first.
Everything for one review lives in .construction/skills/submittal-review/{review_id}/, where review_id is the submittal number and revision with spaces as hyphens (12-35-53-001-R0). The exact formats are in ${CLAUDE_SKILL_DIR}/references/review-data.md; read it before Step 1.
state.yaml submittal, sections, facility types, jurisdiction, schedule, status
pages_N.json page index of submittal file N (find_pages.py)
trace.json every element the contract documents require, with every governing reference
inventory.json where each element is in the submittal (or that it is missing)
review_NN.json per element: each governing reference read, findings, unverifiable items, questions
package_review.json the package questions and every cross-document reconciliation
findings_NN.json findings
compliance.json code and authority questions: open, or researched with a source
routing.json each trade that must act: what to send, what is needed back, gate, need-by
prior.json resubmittals only: what happened to each prior finding
state.yaml carries status. On restart, read it and resume at the step after the last completed one.
- [ ] 1. Intake - [ ] 6. Package questions and reconciliations
- [ ] 2. Trace requirements - [ ] 7. Code questions and routing
- [ ] 3. Inventory - [ ] 8. Gate
- [ ] 4. Checkpoint - [ ] 9. Report
- [ ] 5. Review (fan out per element)
.construction/project.yaml present → AgentCM mode; otherwise flat file.submittal-log-generator's labels (Shop Drawings, Product Data, Samples, Design Data, Test Reports, Certificates, Delegated Design, ...).prior.json (Step 6)..construction/skills/spec_text/. If it does not, invoke the construction:spec-splitter skill (Skill tool) yourself.sheet_index.yaml, or AgentCM's index). sheet-splitter is user-invoked only, so you cannot run it from here: ask the user to run /construction:sheet-splitter and resume. If nobody can answer (unattended run), continue with the bound drawing set, locate sheets with find_pages.py, and add a notes entry in state.yaml saying the drawings were not split..construction/skills/project_context.yaml:
building.facility_types): if missing, infer them from the cover sheet and code analysis, and confirm them at the checkpoint.state.yaml as schedule..construction/skills/submittal-review/lessons.yaml exists, read it. It holds what earlier reviews on this project missed or the PE overturned.PY="${CLAUDE_PLUGIN_ROOT}/bin/construction-python"; FP="${CLAUDE_PLUGIN_ROOT}/scripts/pdf/find_pages.py"
"$PY" "$FP" index --pdf "{submittal file N}" --output "{dir}/pages_N.json"
It reports pages with no text layer (scans). Those must be rasterized to be read.Write state.yaml (status: intake).
A review fails most often because the right detail was never pulled. Build trace.json from the contract documents alone:
query_command from .construction/database.yaml; views in .construction/db_schema.yaml).cd_refs): every sheet, detail, section cut, schedule row and spec article that governs it. Follow every cut drawn on an elevation or plan. Record in stated what each one states about the element (sizes, models, ratings, heights, voltages, finishes, supports).Map the submittal to the trace in inventory.json, both ways.
element_terms.json with the search terms for each element: tag, item number, name, scheduled model. Then run:
"$PY" "$FP" map --index "{dir}/pages_N.json" --elements "{dir}/element_terms.json" --output "{dir}/page_map_N.json"
It lists, per element, its heading pages and the pages that follow until the next element's tab. It also lists tabs that match no element (possible extra items), pages that match nothing, and image-only pages.extract_text_region.py, or a rasterized strip). For a short file, identify pages from titles and tags directly.missing;extra_items, with a note;A missing element or package item becomes a completeness finding. Keep this pass light; detailed reading happens in Step 5.
Show the user, in one short message:
Ask two things: confirm the facility types and jurisdiction, and whether to run /construction:code-researcher on those questions. A researched question can be checked. An unresearched one stays open in the report and is never answered from memory.
Write confirmed facility types to project_context.yaml (building.facility_types) if they were missing. If nobody can answer (unattended run), set unattended: true, proceed with the inferred values, leave every question open, and say so at the top of the report.
Start each batch from its records:
"$PY" "${CLAUDE_SKILL_DIR}/scripts/check_review.py" --review-dir "{dir}" --scaffold {NN} --elements "{ids}"
This writes review_{NN}.json with every governing reference of each element marked todo.
${CLAUDE_SKILL_DIR}/references/worker-prompt.md. Fill {plugin_root} with ${CLAUDE_PLUGIN_ROOT} and {skill_dir} with ${CLAUDE_SKILL_DIR}. Each worker writes findings_{NN}.json and fills review_{NN}.json, then returns one line. If a batch file is incomplete, re-run that worker. Never parse results from a worker's reply.Reviewing an element means four things:
references/review-lens.md;A finding cites both sides: the requirement (sheet, detail, schedule row, spec article, RFI or ASI) and the submittal (file, page, what it shows). Write findings as described in ${CLAUDE_SKILL_DIR}/references/review-writing.md.
Yourself, in the main context:
check_review.py --scaffold 90 --package writes the eight package questions from the lens. Answer each.prior.json as closed, open or partially closed, with evidence. An unaddressed prior comment is a finding of its own.Your own findings use batch 90: F-90-01, ...
Code and authority questions (compliance.json): gather the questions from every review record, add your own, and merge duplicates. Each row is a full question naming the authority and the elements it affects.
/construction:code-researcher on the open questions. A question is researched only when a code-researcher topic file answers it: cite that file as source, then mark the result consistent or finding. A finding cites the code, edition and section from that file.open, with the research command to run.Never state a code requirement you have not retrieved.
Routing (routing.json): one row per trade that must act. Each row says:
${CLAUDE_SKILL_DIR}/references/milestones.yaml by which it must be resolved;no schedule when the project has none.Every coordination finding belongs to a routing row.
"$PY" "${CLAUDE_SKILL_DIR}/scripts/check_review.py" --review-dir "{dir}"
It fails when any of these is true:
todo;Fix every gap and re-run until it passes. Do not report before it passes. If something truly cannot be verified, record it as unverifiable with what is missing; that is part of the review, and it goes in the report.
"$PY" "${CLAUDE_SKILL_DIR}/scripts/export_submittal_review.py" --review-dir "{dir}" \
--output "{submittals_folder}/{submittal_no} R{rev} - GC Review.xlsx" --annotations "{dir}/markup"
"$PY" "${CLAUDE_PLUGIN_ROOT}/scripts/pdf/annotate_pdf.py" --pdf "{submittal.pdf}" \
--items "{dir}/markup/{file_stem}.json" --output "{submittals_folder}/{submittal_no} R{rev} - GC Markup.pdf" --author "GC Review (draft)"
Deliverables go in the project's submittals folder (or the project root), never in .construction/. The export prints the suggested disposition; the rules are in review-writing.md.
Then:
issue_manager.py add --source-skill submittal-review, so rfi-drafter can turn it into an RFI. Never draft or send the RFI from here.write_finding.py --type submittal_review with counts and the output paths.review-writing.md describes. Never split a finding from its action.status: complete in state.yaml.When the PE overturns a finding, or a miss surfaces later, append it to .construction/skills/submittal-review/lessons.yaml with:
Step 1 reads this file on the next review in the project.
pe-review's references/pe_review_rules.md.code-researcher recorded.まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
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'.
日本語の概要は準備中です。原文の説明を表示しています。
Scope-specific code gap analysis — extracts referenced codes from project docs, researches what should apply, surfaces the delta. Triggers: 'code research', 'what codes apply', 'code check', 'ADA requirements', 'egress'.
日本語の概要は準備中です。原文の説明を表示しています。
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'.
日本語の概要は準備中です。原文の説明を表示しています。
Construction document review with PE judgment — RFI research, submittal analysis, coordination checking, scope gap detection. Use when reviewing drawings, specs, submittals, or RFIs. Triggers: 'review', 'coordination', 'what's missing'.
日本語の概要は準備中です。原文の説明を表示しています。
Set up a construction project — inventories files, classifies drawings/specs/schedules/registers, detects AgentCM mode, appends construction context to CLAUDE.md. Triggers: 'set up project', 'construction setup', 'classify documents'.
日本語の概要は準備中です。原文の説明を表示しています。