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'.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Processes multiple subcontractor bid PDFs for a scope of work and produces an Excel comparison workbook. Extracts each bid's data as-submitted — the engineer handles normalization and alignment after reviewing discrepancies and contacting subcontractors as needed.
[MATH ERROR: line items sum to $X, bid states $Y].Ask the user for:
If .construction/project.yaml exists (AgentCM writes it; a .construction/ folder alone only holds this plugin's own working data), read it for the project name/number to include in the workbook header. Otherwise take them from the bid documents or ask.
THIS SKILL → /bid-evaluator → user confirms → /subcontract-writer
This skill is the entry point of the bid pipeline. It produces the tabulated data that /bid-evaluator consumes for analysis.
Bid Tabulation Progress:
- [ ] Step 1: Gather inputs (bid PDFs, scope)
- [ ] Step 2: Read first bid to discover structure
- [ ] Step 3: Process all bids
- [ ] Step 4: Generate comparison Excel
- [ ] Step 5: Present summary to engineer
- [ ] Step 6: Write graph entry
Open the first bid PDF to understand what data is available:
Try pdfplumber first. If text extraction returns meaningful content (>50 chars per page), use text mode. Otherwise fall back to vision.
Vision fallback for scanned bids:
"${CLAUDE_PLUGIN_ROOT}/bin/construction-python" "${CLAUDE_PLUGIN_ROOT}/scripts/pdf/rasterize_page.py" "BID.pdf" 1 --dpi 200 --output bid_page.png
From the first bid, identify what data fields are present. Common bid data:
# Bidder info
company_name: ""
contact_name: ""
contact_phone: ""
contact_email: ""
bid_date: ""
bid_validity_period: ""
# Financial
base_bid_amount: ""
line_items: # Every line item as an object:
- spec_section: "" # CSI section if shown (e.g., "09 65 19")
description: "" # Original description verbatim
qty: null # Quantity (numeric or null if lump sum)
unit: "" # Unit as written (SF, LF, EA, LS, etc.)
unit_price: null # Per-unit cost (numeric — extract or calculate)
extended_price: null # Line total (qty × unit_price, or lump sum amount)
notes: "" # Flags, clarifications
alternates: [] # Alternate pricing: [{name, description, amount}]
allowances: [] # Allowances included
# Terms
scope_inclusions: [] # What the bid explicitly includes
scope_exclusions: [] # What the bid explicitly excludes
qualifications: [] # Conditions, assumptions, caveats
schedule_duration: "" # Proposed duration if stated
payment_terms: "" # Net 30, etc.
bond_included: false # Whether bid/performance bond is included
insurance_confirmed: false
Line item extraction rules:
unit_price = extended_price / qty.qty: null, unit: "LS", unit_price: null, extended_price: <amount>.spec_section may not always be present — extract it if the bid references CSI section numbers.Present the discovered structure to the user before processing remaining bids: "I found these data fields in the first bid: [list]. Should I extract all of these, or add/remove any?"
Process each bid PDF individually. For each bid:
[unclear: possibly $45,000 or $45/SF].construction/skills/bid-tabulator/bids/{company_name_slug}.jsonState persistence — write progress after each bid:
# .construction/skills/bid-tabulator/extraction_state.yaml
scope: "Division 09 - Finishes"
total_bids: 12
processed: 5
current_bid: "Smith_Drywall.pdf"
errors: []
Important: Each bid's line items, descriptions, and amounts must be recorded exactly as submitted. Different bidders may describe the same work differently, use different units, or break out scope differently. This is expected and intentional — the engineer will reconcile after review.
"${CLAUDE_PLUGIN_ROOT}/bin/construction-python" "${CLAUDE_SKILL_DIR}/scripts/bid_comparison_to_xlsx.py" \
--data .construction/skills/bid-tabulator/bids/ \
--scope "Division 09 - Finishes" \
--project "Project Name" \
--output "Bid_Comparison_Div09.xlsx"
Excel workbook structure:
Tab 1 — Comparison Summary:
Tab 2 — Per-Bidder Detail Tabs (one tab per bidder):
Tab 3 — Exclusions & Qualifications:
Tab 4 — Scope Gaps (flagged):
After generating the Excel:
"I extracted data from [N] bids for [scope]. Here's the summary:
The Excel file is at [path]. All line items are extracted as-submitted — you'll want to review the Scope Gaps tab and contact subs to clarify any discrepancies before finalizing your comparison."
"${CLAUDE_PLUGIN_ROOT}/bin/construction-python" "${CLAUDE_PLUGIN_ROOT}/scripts/graph/write_finding.py" \
--type "bid_tabulation_complete" \
--title "Bid comparison: {scope} — {N} bidders" \
--output-file "Bid_Comparison_{scope_slug}.xlsx" \
--data '{"scope": "Division 09", "bidder_count": 12, "low_bid": 450000, "high_bid": 680000}'
Check for .construction/skills/bid-tabulator/extraction_state.yaml. If status: in_progress, resume from the next unprocessed bid.
Never overwrite an existing bid comparison. If a file exists at the target location, save with a versioned name (e.g., Bid_Comparison_Div09_v2.xlsx).
${CLAUDE_PLUGIN_ROOT}/bin/construction-python${CLAUDE_PLUGIN_ROOT}/scripts/pdf/rasterize_page.py${CLAUDE_SKILL_DIR}/scripts/bid_comparison_to_xlsx.py${CLAUDE_PLUGIN_ROOT}/scripts/graph/write_finding.pyまだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Evaluate tabulated subcontractor bids against specs and drawings — scope gap analysis, exclusion risk scoring, award recommendation. Triggers: 'evaluate bids', 'bid evaluation', 'lowest responsible bidder'.
日本語の概要は準備中です。原文の説明を表示しています。
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'.
日本語の概要は準備中です。原文の説明を表示しています。
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'.
日本語の概要は準備中です。原文の説明を表示しています。