bid-evaluator
Evaluate tabulated subcontractor bids against specs and drawings — scope gap analysis, exclusion risk scoring, award recommendation. Triggers: 'evaluate bids',…
Generate a complete subcontract from a firm's template, awarded bid, and project specs. Outputs a Word document. Triggers: 'subcontract', 'sub agreement', 'write contract', 'draft subcontract'. Requires awarded bid.
$ npx -y skills add dleerdefi/claude-code-construction --skill subcontract-writer --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/subcontract-writerContext preview
The summary Claude sees to decide when to auto-load this skill.
Generate a complete subcontract from a firm's template, awarded bid, and project specs. Outputs a Word document. Triggers: 'subcontract', 'sub agreement', 'write contract', 'draft subcontract'. Requires awarded bid.
name: subcontract-writer description: > Generate a complete subcontract from a firm's template, awarded bid, and project specs. Outputs a Word document. Triggers: 'subcontract', 'sub agreement', 'write contract', 'draft subcontract'. Requires awarded bid. argument-hint: "<scope_of_work>" disable-model-invocation: true
Generates a complete, execution-ready subcontract agreement from a firm's template, the awarded bid, and project specifications. **You are the intelligence layer** — you read every document, extract all data, generate every article's text, make legal/commercial judgments, and write fully-populated JSON files. The Python formatter is a thin rendering utility that makes no content decisions.
**Output:** Word document (.docx) matching the firm's template structure.
**Dependency:** Requires `python-docx` in the construction Python environment.
**Key principle:** The bid document is the PRIMARY input. It establishes what was priced, at what rates, with what inclusions and exclusions. Specifications inform scope descriptions and technical requirements. The template provides article structure and standard boilerplate.
---
This skill can be invoked directly when the user has an awarded bid and wants to generate a subcontract, or as the final step of the bid pipeline:
/bid-tabulator → /bid-evaluator → user confirms → THIS SKILL
Either way, the awarded bid document (Slot B) is the mandatory input.
Check for `.construction/` directory at the project root.
---
Execute in five sequential phases. Each phase has a defined output that must be completed before the next begins. **Do not skip phases or combine them.** The most common failure mode is attempting Phase 4 (writing) before Phase 3 (validation) is complete.
Subcontract Writer Progress: Phase 1 → Phase 2 → Phase 3 → USER CHECKPOINT → Phase 4 → Phase 5 Triage Extract Validate Confirm data Write Verify
---
Before reading any document substantively, assign each uploaded file to its slot. State the assignments to the user before proceeding.
| Slot | Role | Source | What It Provides | |------|------|--------|-----------------| | A | Template | Subcontract PDF/DOCX | Article structure, boilerplate language, required sections | | B | Awarded bid | Subcontractor bid PDF | **Contract sum, quantities, unit rates, inclusions, exclusions, VE alternates** | | C | Specifications | Spec section PDFs | Scope descriptions, submittal requirements, warranty clauses, installer qualifications | | D | Drawings | Finish schedule, floor plans | Room codes, area takeoffs, scope boundaries |
**Slot B is mandatory.** If missing, stop and output:
I need the awarded subcontractor's bid document before I can generate this subcontract. The bid is the source of truth for the contract sum, quantities, and unit rates. Which file is the awarded bid?
Read Slot A first to understand the required article structure. Note every article heading. Flag any article that requires project-specific content (not just boilerplate) — these become required extraction targets in Phase 2.
If no template is provided, ask: "Do you have a standard subcontract template?" If none available, use AIA A401-style structure as fallback.
---
Run a separate extraction pass for each slot. Write extracted data to `scope_data.json` incrementally. Do not combine slots in a single read.
Read the bid PDF using vision. Extract every field below. Mark any field not found as `MISSING` — do not infer or estimate.
**Commercial data:**
**Scope data:**
**Verify:** Line item amounts must sum to the total contract sum. If they don't, flag the discrepancy.
**If .docx template:** Use python-docx to read headings, paragraphs, and identify article structure.
**If PDF template:** Use vision to read the template. Rasterize pages if needed:
${CLAUDE_SKILL_DIR}/../../bin/construction-python ${CLAUDE_SKILL_DIR}/../../scripts/pdf/rasterize_page.py template.pdf {page} --dpi 200 --output template_page_{page}.pngExtract the list of required articles and any fill-field placeholders (`[DATE]`, `[CONTRACT SUM]`, `[SUBCONTRACTOR]`).
For each article, determine:
**Critical:** Transcribe ALL preserved article text verbatim. Do not summar
Open-source skills that give Claude Code the working knowledge of a Project Engineer. Split drawings, parse specs, tabulate bids, generate subcontracts, and more — directly from your terminal or IDE.
Evaluate tabulated subcontractor bids against specs and drawings — scope gap analysis, exclusion risk scoring, award recommendation. Triggers: 'evaluate bids',…
Extract data from subcontractor bid PDFs and produce a comparison spreadsheet. Feeds into /bid-evaluator. Triggers: 'tabulate bids', 'bid comparison', 'compare…
Scope-specific code gap analysis — extracts referenced codes from project docs, researches what should apply, surfaces the delta. Triggers: 'code research',…
Construction document review with PE judgment — RFI research, submittal analysis, coordination checking, scope gap detection. Use when reviewing drawings,…
Set up a construction project — inventories files, classifies drawings/specs/schedules/registers, detects AgentCM mode, appends construction context to…
Draft RFIs and manage the ambient issue registry. Reviews issues surfaced by other skills, escalates to formal RFIs. Triggers: 'draft RFI', 'write RFI',…