agentsclimarketplace

Bidflow electrical estimator

Skill riteshkew/yc-skills/skills/bidflow-electrical-estimator

From a plain-English project scope and a price list CSV, produce a structured line-item electrical estimate with material costs, labor hours, markup, and a grand total in valid JSON.From its SKILL.md

Install
npx -y skills add riteshkew/yc-skills --skill bidflow-electrical-estimator

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

4.4 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it

Workflow

When this skill triggers, follow these steps in order.

Step 1 — Parse the scope into quantities

Read the project description carefully and extract a quantity takeoff table:

ItemQuantityUnit
ReceptaclesNeach
SwitchesNeach
FixturesNeach
ConduitNlinear ft
Panel(s)Neach
BreakersNeach
BoxesNeach
Cable / wireNft or rolls
ConsumablesNpacks

Rules for this step:

  • Convert linear footage to conduit sticks (divide by 10 for 10ft sticks, round up).
  • Derive outlet box count from device + fixture count (one box per device/fixture).
  • Note the stated labor rate and markup percentage from the scope; use defaults ($85/hr, 15% markup) if not provided.
  • Flag any scope items that have no matching SKU in the price list — list them as "sku": "UNLISTED" with unit_cost: 0 and a note.

Step 2 — Match each quantity to a SKU in the price list

Load resources/prices.csv. For each takeoff item:

  1. Search for the best-matching row by description keywords (wire gauge, device type, conduit size, amperage).
  2. Record the matched sku, unit, unit_cost, and labor_hours (per-unit labor from the price list).
  3. If multiple SKUs could match, prefer the one whose unit matches the takeoff unit exactly.
  4. If no SKU matches, record sku: UNLISTED and set both unit_cost and labor_hours to 0 so arithmetic is not corrupted.

Step 3 — Compute material, labor, and line totals

For each line item, compute:

material_total  = qty * unit_cost                        (round to 2 decimal places)
labor_hours     = qty * labor_hours_per_unit_from_csv    (round to 2 decimal places)
labor_total     = labor_hours * labor_rate_per_hour      (round to 2 decimal places)
line_total      = material_total + labor_total           (round to 2 decimal places)

Then roll up totals:

totals.material  = sum of all material_total values
totals.labor     = sum of all labor_total values
totals.subtotal  = totals.material + totals.labor
totals.markup    = totals.subtotal * (markup_pct / 100)
totals.grand_total = totals.subtotal + totals.markup

Round every totals field to 2 decimal places. Double-check: sum the line_total column independently and confirm it equals subtotal before emitting output.

Step 4 — Emit the JSON estimate

Output a single valid JSON document with this schema:

{
  "project": "<short project description>",
  "assumptions": {
    "labor_rate_per_hour": <number>,
    "markup_pct": <number>,
    "notes": ["<any scope flags or UNLISTED items>"]
  },
  "line_items": [
    {
      "sku": "<sku>",
      "description": "<description>",
      "qty": <number>,
      "unit": "<unit>",
      "unit_cost": <number>,
      "material_total": <number>,
      "labor_hours": <number>,
      "labor_total": <number>,
      "line_total": <number>
    }
  ],
  "totals": {
    "material": <number>,
    "labor": <number>,
    "subtotal": <number>,
    "markup": <number>,
    "grand_total": <number>
  }
}

The output must be pure JSON — no markdown fences, no commentary outside the JSON object. Every number must be a JSON number (not a quoted string). The document must pass JSON.parse without error.

Productionization gap

This skill uses the sample price list in resources/prices.csv. Real production use requires:

  • Live supplier pricing: integration with distributor APIs (e.g., Graybar, Anixter, Rexel) or a regularly refreshed price feed.
  • True takeoff from plans: PDF/DXF plan parsing to auto-extract quantities instead of relying on a plain-English scope description.
  • Regional labor rates: NECA or Davis-Bacon wage tables by zip code rather than a single flat rate.
  • Tax and fee tables: jurisdiction-specific sales tax on materials and permit fee schedules.

Example

Input: examples/input.md — 1,200 sq ft office TI scope with 18 receptacles, 12 LED troffers, 1 new 100A subpanel, ~400 ft of 1/2 in EMT, 6 switches.

Output: examples/output.md — valid JSON estimate with 18 line items, internally consistent arithmetic, $85/hr labor rate, 15% markup, grand total $7,895.10.

What ships with it: 5 files

12.6 KB alongside SKILL.md

.claude-plugin/

examples/

resources/

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.