bid-evaluator
Evaluate tabulated subcontractor bids against specs and drawings — scope gap analysis, exclusion risk scoring, award recommendation. Triggers: 'evaluate bids',…
Count-based quantity takeoff and tag completeness auditing for construction drawings. Vision + OCR reconciliation, sheet markup, Excel QTO output. Triggers: 'tag audit', 'quantity takeoff', 'QTO', 'count fixtures'.
$ npx -y skills add dleerdefi/claude-code-construction --skill tag-audit-and-takeoff --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/tag-audit-and-takeoffContext preview
The summary Claude sees to decide when to auto-load this skill.
Count-based quantity takeoff and tag completeness auditing for construction drawings. Vision + OCR reconciliation, sheet markup, Excel QTO output. Triggers: 'tag audit', 'quantity takeoff', 'QTO', 'count fixtures'.
name: tag-audit-and-takeoff description: > Count-based quantity takeoff and tag completeness auditing for construction drawings. Vision + OCR reconciliation, sheet markup, Excel QTO output. Triggers: 'tag audit', 'quantity takeoff', 'QTO', 'count fixtures'. disable-model-invocation: true
Count-based QTO for tagged construction elements — fixtures, devices, doors, equipment, and any element identified by a tag/symbol on drawings. Does NOT do area (sqft) or linear (lf) takeoffs — only discrete counts.
The QTO is a byproduct of the audit. The real value: the completeness engine that finds what's tagged, what's missing, and produces a defensible count with full provenance for every number.
Does NOT: do area/linear takeoffs, create outbound documents autonomously, override user-approved groupings, or assume quantities without provenance.
---
Check for `.construction/` directory at the project root.
**AgentCM mode** (`.construction/` exists):
**Verify raster images exist:** Check `.construction/rasters/` for PNG files. If empty, tell the user: "Raster images not found. Open this project in AgentCM to trigger the export, or run: `curl -s -X POST '{api_url}/projects/{project_id}/graph/export' -H 'Content-Type: application/json' -d '{\"rootPath\": \"'$(pwd)'\"}'`" You can also rasterize individual sheets on demand using the rasterize_page.py script.
**Flat File mode** (no `.construction/`):
User provides: (1) tag type — e.g., "plumbing fixtures", "doors", "light fixtures" (see `references/tag-types.md` for full list), and (2) sheet scope — specific sheets, a discipline, or "all sheets". Confirm scope before proceeding.
**Custom tag types:** If the user requests a tag type not in `references/tag-types.md` (e.g., "keynote legends", "fire dampers", "seismic bracing"), treat it as a custom type. Use it in the `tag_type` field at ingest — the server auto-registers unknown types in the `tag_types` table with default styling. The normalized name will be `qto_{type}` (e.g., `qto_keynote_legend`). Custom types appear in the Group Review gallery and support the full accept/reject/promote workflow.
**REQUIRED: Tag type resolution.** Before using any `tag_type` value, you MUST resolve it against existing types:
1. Query `GET /api/projects/{id}/group-review/available-types` to see all active tag types for this project 2. Check if the user's requested type matches ANY existing type name 3. Apply alias resolution — these names are synonyms of existing types:
`callout_single_ref`, `single_ref_callout` → `simple_callout`
→ `multi_detail_callout` 4. If the resolved type exists in available-types, USE THAT NAME 5. Report to user: "Resolved type: '{resolved_name}' (matched from '{user_input}')" — get confirmation before proceeding 6. **If there is ANY ambiguity** about whether a requested tag type maps to an existing type, **ASK THE USER** before proceeding. Do not guess or invent a new type name. 7. Only auto-register a truly new type if no existing type or alias matches after checking both the available-types list and the alias map above
NEVER invent a new type name for concepts that already have canonical types. When in doubt, ask.
**HARD GATE — you MUST complete this step before proceeding to Step 2.** Do not skip this step. If the API is unreachable, stop and tell the user.
Before scanning sheets, query what's already tagged per sheet:
curl -s "http://localhost:3001/api/projects/{project_id}/sheets/{sheet_id}/claimed-elements"Response:
{
"claimed_element_ids": ["el_001", "el_002", ...],
"suggestion_count": 12,
"by_type": { "qto_room_tag": 8, "room_tag": 4 },
"existing_tags": [
{ "id": "...", "proposedType": "qto_room_tag", "proposedText": "KITCHEN",
"status": "accepted", "constituentIds": [...], "combinedBbox": {...}, "confidence": 0.92 }
]
}Report to user: "Sheet A-1.4: 12 tags already detected (8 accepted, 4 pending)."
**Reconciliation rules:**
add `AND id NOT IN ('{id1}', '{id2}', ...)` to SQL WHERE clauses
ALL items (existing + newly detected), not just new ones
values — these are "confirmed" not "new"
overlapping existing suggestions are skipped (safety net)
newly detected (from ingest response)
**The QTO is always a complete count.** Reconciliation avoids redundant detection *work*, not redundant *output*.
**Before proceeding to Step 2, report coverage and get confirmation:** "Existing coverage: {N} sheets have {M} accepted, {P} pending detections for this tag type. {Q} sheets have zero coverage. Proceed with vision scan on {Q} uncovered sheets?" Wait for explicit user confirmation before continuing.
**CRITICAL — Vision is MANDATORY for this step.**
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',…