Skip to content
Automation
Skill

/tag-audit-and-takeoff

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'.

From plugin
construction
5514 skills

Claude Code

$ npx -y skills add dleerdefi/claude-code-construction --skill tag-audit-and-takeoff --agent claude-code

SKILL.md

tag-audit-and-takeoff.SKILL.md
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

Tag Audit & Quantity Takeoff

Purpose

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.

---

Step 0: Detect Operating Mode

Read `.construction/project.yaml` at the project root: present and readable means AgentCM mode (note its `contract_version`), absent means flat-file mode. A listing that shows the file does not decide it: read it.

**AgentCM mode** (`.construction/project.yaml` exists):

  • Follow `${CLAUDE_PLUGIN_ROOT}/reference/agentcm-mode.md`: which source wins, what a missing file or an empty search means, sheet ids, and how to record a correction of AgentCM's data (a missed tag goes through the ingest in Step 8)
  • Read `.construction/CLAUDE.md` for project context and where things are,

except its database section: never run `query.sh` or `query.ps1`, whatever the guide offers

  • Read `.construction/database.yaml` for `project_id` and `api_url`, nothing else in it
  • Everything this skill reads comes from AgentCM's files, never its API, so it

runs the same with AgentCM closed; only the ingest (Step 8) needs AgentCM

  • The `{sheet_id}` in Step 8's payload is

the `id` of the entry in `.construction/index/sheet_index.yaml` whose `sheet_number` is that sheet. Never guess it from the number. If that file is missing, or its entries have no `id` (an older sheet-splitter wrote a `pages:` list with `filename` and `page_index`), say so and stop.

  • Look at a sheet through AgentCM's crop script, a box at a time:

`sh .construction/crop.sh <sheet> <x> <y> <w> <h>` (or `powershell -File .construction/crop.ps1 <sheet> <x> <y> <w> <h>`) renders that box of the sheet's PDF page as a PNG and prints its path. `<sheet>` is the sheet's number as `.construction/INDEX.md` names it; the box is 0 to 1 from the top left of the sheet. Never rasterize whole sheets, and never ask for `rasters/` or `graph/export`: they are not part of AgentCM's contract.

  • A sheet's text, each line with its box: `.construction/sheets/<sheet>.tsv` (Steps 3-4)
  • Write results back via API: `POST {api_url}/projects/{project_id}/tag-detections/ingest`, sent from the outbox (Step 8)

**Flat File mode** (no `.construction/project.yaml`):

  • Discover sheet images from CLAUDE.md or user-provided paths; rasterize sheet

PDFs with `"${CLAUDE_PLUGIN_ROOT}/bin/construction-python" "${CLAUDE_PLUGIN_ROOT}/scripts/pdf/rasterize_page.py" "<pdf>" <page> --dpi 200 --output ".construction/skills/tag-audit-and-takeoff/pages/<sheet>.png"` (working data: never `/tmp` or any other folder outside the project)

  • Vision-only pipeline (Steps 2-3 skipped)
  • Write marked-up PNGs and the Excel workbook to the project directory; the QTO

JSON goes to `.construction/skills/tag-audit-and-takeoff/qto/` (Step 8)

Step 1: User Scopes the Task

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.

**REQUIRED: Tag type resolution (AgentCM mode).** The `tag_type` sent to AgentCM is one of contract 1's canonical names, listed in `${CLAUDE_PLUGIN_ROOT}/reference/agentcm-mode.md` (Tag types), and nothing else. Never invent one, and never send the takeoff's grouping as a type:

  • room tags → `room_tag`; door tags → `door_tag`
  • single-reference callouts (detail bubbles, section marks, interior

elevations; `detail_callout`, `section_callout`, `callout_single_ref`) → `simple_callout`; multi-reference callouts (elevation markers with N/E/S/W spokes; `multi_callout`, `callout_multi_ref`) → `multi_detail_callout`

  • fixtures, devices and equipment (plumbing fixtures, light fixtures,

diffusers, any other element tag) → `element_tag`

Report to the user: "Resolved type: '{name}' (from '{user_input}')" and get confirmation. If the request fits none of these, or two, ask the user.

**The takeoff's grouping comes from the files (AgentCM mode).** Plumbing fixtures, light fixtures and equipment are groups of the report, never types: a tag's code (`WC-1`, `L2`) belongs to the schedule whose key column holds it, `.construction/schedules/<sheet>-<n>.tsv` (INDEX.md's Schedules and legends table names each), and `.construction/tags.tsv` gives its `kind` (the lines starting with the code and a tab). Each line item's `group` is that schedule, named as INDEX.md names it, with its sheet; a code found in no schedule is grouped as `not in any schedule` and listed (`references/qto-output-format.md`). A takeoff of an `element_tag` group counts the codes of its schedule.

Step 1.5: Check Existing Coverage [REQUIRED GATE] (AgentCM mode only)

**HARD GATE — you MUST complete this step before proceeding to Step 2.** Do not skip this step.

Before scanning sheets, read what's already tagged per sheet, from AgentCM's files (never its API; the same whether AgentCM is open or closed):

  • **accepted:** the lines of `.construction/sheets/<sheet>.groups.tsv` whose

`type` is the resolved type (box `x y w h`, `text`), and the lines of `.construction/tags.tsv` for that sheet with `accepted` in `how` and the kind of that tag (`room` for room_tag, `door` for door_tag; for element_tag,

Read more
@dleerdefi
Ships withconstruction

Open-source skills that give Claude Code the working knowledge of a Project Engineer.

Stars on GitHub

Momentum

stars in total
55
Star history of dleerdefi/claude-code-construction on GitHub, a chart by star-history.com

Other skills on construction.

bid-evaluator

bid-evaluator

Evaluate tabulated subcontractor bids against specs and drawings — scope gap analysis, exclusion risk scoring, award…

bid-tabulator

bid-tabulator

Extract data from subcontractor bid PDFs and produce a comparison spreadsheet. Feeds into /bid-evaluator. Triggers: 'tabulate…

code-researcher

code-researcher

Researches which building codes, accessibility standards and authority requirements (health department, fire marshal, state…

construction-guide

construction-guide

Operating guide for construction project documents — load before reading drawings, specs, schedules, RFIs, submittals or bids.…

pe-review

pe-review

Checks construction drawings and specs for what's missing, cross-trade coordination conflicts and scope gaps, with PE judgment.…

project-setup

project-setup

Set up a construction project — inventories files, classifies drawings/specs/schedules/registers and appends construction context…

More skills from other plugins.

agent-builder

agent-builder

Load immediately after an Agent intent, before the first agent_builder_* call. Governs how you create, configure, test, and…

n8n2w209k
@n8n-io@n8n-ioInstall Skill
browser-use

browser-use

Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work. Also covers…

@browser-use@browser-useInstall Skill
agent-browser

agent-browser

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling…

@vercel-labs-2@vercel-labs-2Install Skill
add-anydoc

add-anydoc

Add local office-document-to-Markdown conversion to NanoClaw agent containers with the pinned Firecrawl AnyDoc CLI. Use when…

@nanocoai@nanocoaiInstall Skill

Questions about tag-audit-and-takeoff.

Which coding agents can use tag-audit-and-takeoff?
tag-audit-and-takeoff installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.