Token导航 LogoToken导航TokenDH.com
开发只读github未标认证来源可访问许可证需确认审计提醒

bid-leveling投标均衡

Agent Skill

bid-leveling 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要围绕仓库状态、代码变更或协作事项进行整理时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

1,680

周安装

70

GitHub Stars

2

下载量

560
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:bid-leveling(投标均衡)
来源仓库:https://github.com/build-plus/skills
仓库路径:skills/bid-leveling
安装命令:
npx skills add https://github.com/build-plus/skills --skill bid-leveling
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/build-plus/skills --skill bid-leveling

简介

对比建设工程投标方案,按 UniFormat II 分类生成均衡报表。

  • 适用于工程量清单报价分析和多方案比选场景。
  • 输出详细对比表格和 PDF 分析报告,支持单份或多份投标处理。
  • 需准备标准化的工程量清单文件作为输入基础。
  • bid-leveling 属于开发类 Skill,可作为该场景下的辅助能力补充。

SKILL.md

Bid Leveling

Compare construction bids by mapping line items to UniFormat II headings, producing a leveling spreadsheet and a concise analytical PDF report.

Single Document vs. Multiple Documents

This skill handles both single-bid analysis and multi-bid comparison. The workflow is the same either way, with these differences when only one document is provided:

  • Skip Step 3 (scope overlap assessment) — there is nothing to compare
  • No recommendation — omit recommendations and overlap_comparison from analysis.json entirely. The PDF will not render a Recommendation section.
  • No scope overlap matrix — omit scope_overlap from analysis.json. The PDF page 1 will show project info and the bid summary table only.
  • The spreadsheet and PDF are still produced — the spreadsheet shows the single bidder's costs broken down by UniFormat, and the PDF details the bid's contractual terms, scope, qualifications, and exclusions.

This is useful when the user wants to analyze a single proposal, extract its structure into UniFormat categories, and document its terms before additional bids come in.

Workflow

  1. Collect project info and output format preference
  2. Read and extract data from each bid document
  3. Assess scope overlap and comparability *(skip for single document)*
  4. Determine unit of comparison
  5. Assign line items to UniFormat codes; decide granularity
  6. Build structured JSON data
  7. Generate spreadsheet (run generate_csv.py)
  8. Generate PDF (run generate_pdf.py)

Step 1: Collect Project Info

Ask the user for:

  • Project name (e.g., "Smith Residence")
  • Brief description (e.g., "Custom home build", "Kitchen remodel", "Plumbing subcontract")
  • Output format: CSV or Excel?

If the user has already provided this information, skip the questions.

Excel Context

If the user is already working in an Excel document (they mention an .xlsx file, reference a spreadsheet, or are in a spreadsheet context), add the leveling data as a new sheet in their existing workbook instead of creating a new file. Pass the existing file as the third argument to generate_csv.py.

Step 2: Read Bid Documents

Read each provided bid document. For each document, extract:

  • Every identifiable cost line item (description + cost)
  • All contractual terms listed in references/bid-analysis-guide.md

Preserve exact wording from source documents when extracting terms.

Handling Different File Formats

PDF (.pdf) Read with the Read tool. For multi-page PDFs, read in page ranges (max 20 pages per request). Bids are often formatted as tables — pay close attention to column alignment when extracting line items. If the PDF contains scanned/image-based content rather than selectable text, treat it as an image (see below).

Image (.png, .jpg, .heic, etc.) Read with the Read tool (multimodal). Extract all visible text, tables, and line items from the image. Images are common for photos of handwritten bids, screenshots of emails, or scanned documents. Take extra care with:

  • Handwritten numbers — confirm ambiguous digits (e.g., 1 vs 7, 5 vs 6) by cross-referencing totals
  • Partial visibility — if parts of the document are cut off, ask the user for the missing portions
  • Low resolution — flag any values you cannot read confidently

Excel (.xlsx, .xls, .csv) Read with the Read tool. Spreadsheet bids often have the clearest structure — look for:

  • A schedule of values or line-item tab with description + cost columns
  • Summary/totals tabs or rows
  • Hidden sheets or columns that may contain additional detail
  • Named ranges or formulas that compute subtotals

If the bid is in an Excel file the user is actively working in, this is also an Excel context — see Step 1 for output handling.

Word (.docx, .doc) Read with the Read tool. Word documents are common for formal proposals and contracts. Cost information may appear as:

  • Inline tables (schedule of values, cost breakdowns)
  • Paragraph text with embedded dollar amounts ("...for a total of $45,000...")
  • Appendices or exhibits attached at the end

For Word docs, also extract contractual language carefully — terms like exclusions, retainage, payment schedules, and insurance requirements are often embedded in the body text rather than in a structured table.

Step 3: Assess Scope Overlap

Before leveling, determine if the bids are comparable:

  • Do they cover the same trade or scope of work?
  • Do they share UniFormat Level 2 categories?
  • Are totals in a reasonable range relative to each other?

If bids have minimal overlap, report this prominently and explain why a direct comparison may be misleading. Still produce outputs with a clear caveat.

Line-Item Detail Mode

When comparing bids with highly similar, itemized scopes (e.g., window schedules, appliance packages, panelized systems, fixture lists), check:

  • Do >60% of line items have per-unit pricing that can be compared directly?
  • Can equivalent items be matched across bids?

If yes, use granularity: "line_items" to break down to actual summarized line item descriptions for an apples-to-apples comparison. Build the detail_rows array (see Step 6) with best-effort matching of equivalent line items across bids. Only use this mode when items are truly comparable at the unit level.

Step 4: Determine Unit of Comparison

Choose the most meaningful unit for per-unit cost comparison. Use the same unit across all line items in the output.

Scope typeUnitRationale
Plumbing, electrical, appliance quotes$/fixtureCount of fixtures is the natural quantity
HVAC quotes$/zoneZones are the natural unit
Insulation, drywall, painting, flooring$/SF (scope area)Area of the specific scope being quoted
Framing material purchases, mixed-unit material quotes$/SF (whole house)No single unit; whole-house SF is the fallback
Whole-building / GC bids spanning many UniFormat categories$/SF (whole house)Broad scope; house SF is appropriate
Window or door schedules$/unitPer-window or per-door
Roofing$/square (100 SF) or $/SFRoofing-specific unit

Rules:

  • Never use $/lump or $/lumpsum — this is not a meaningful comparison unit. There is always a better option.
  • Derive the unit and quantity from the bids themselves when possible
  • Default fallback is always $/SF (total construction square footage) — use this when no scope-specific unit can be determined
  • If the bids quote a specific scope area (e.g., "1,200 SF of tile"), use that area, not whole-house SF
  • The unit must be consistent across all rows in the output

Set unit_of_comparison in bid_data.json:

"unit_of_comparison": {"label": "$/fixture", "quantity": 14}

Step 5: Assign UniFormat Codes and Choose Granularity

Map each line item to a UniFormat Level 3 code using references/uniformat_headings.csv.

Rules:

  • Always assign the most specific Level 3 code (e.g., D2010 not D20) — the script handles roll-up
  • If a line item spans categories, assign to the dominant one or split if amounts are clear
  • General conditions, overhead, profit, bonds, permits = UNCLASSIFIED (do not map)

Choosing Output Granularity

Scope typeGranularityWhen
Single-trade subcontract"level3"Plumbing, electrical, HVAC — fine-grained comparison is valuable
Multi-trade or partial scope"level2"Kitchen remodel, TI — roll up to sub-group level
Whole-building / GC bids"level2"Ground-up build — L2 categories give a clear picture
Highly similar itemized quotes (>60% overlap)"line_items"Window schedules, appliance packages, fixture lists

Step 6: Build Structured JSON

Create two JSON files in the working directory.

bid_data.json (for spreadsheet generation)

{
  "project_name": "Smith Residence",
  "granularity": "level3",
  "unit_of_comparison": {"label": "$/fixture", "quantity": 14},
  "bidders": [
    {
      "name": "ABC Plumbing",
      "line_items": [
        {"description": "Rough-in plumbing fixtures", "uniformat_code": "D2010", "cost": 18500.00}
      ]
    }
  ],
  "detail_rows": []
}
  • granularity: "level1", "level2", "level3", or "line_items"
  • unit_of_comparison: {"label": "$/fixture", "quantity": 14} — the label and divisor for per-unit cost
  • detail_rows: required only when granularity = "line_items":
"detail_rows": [
  {
    "description": "36-inch farmhouse sink",
    "uniformat_code": "D2010",
    "costs": {"ABC Plumbing": 1200.00, "XYZ Plumbing": 1350.00}
  }
]

analysis.json (for PDF generation)

All detail fields are arrays of concise bullet strings, not paragraphs.

{
  "project_name": "Smith Residence",
  "project_description": "Custom home build",
  "scope_description": "Roofing and exterior scope: roof coverings, exterior walls, drainage",
  "unit_of_comparison": {"label": "$/SF", "quantity": 3200},
  "recommendations": [
    {
      "scope": "Roofing (B3010)",
      "recommended_bidder": "Rolvin Carpentry",
      "rationale": "On overlapping scope (roofing only), Rolvin is $35,000 vs Perry $110,250 — 68% less"
    },
    {
      "scope": "Exterior Walls (B2010), Drainage (D2040)",
      "recommended_bidder": "Rolvin Carpentry",
      "rationale": "Only Rolvin covers these scopes; Perry does not quote exterior walls or drainage"
    }
  ],
  "overlap_comparison": {
    "shared_categories": ["B3010 ROOF COVERINGS"],
    "overlap_totals": {"Perry Verrone LLC": 110250.00, "Rolvin Carpentry Inc": 35000.00},
    "notes": "Perry's total ($110,250) appears lower than Rolvin's ($140,000) but Perry only covers roofing. On the shared scope, Rolvin is 68% cheaper."
  },
  "scope_overlap": [
    {"description": "Roof coverings", "uniformat_code": "B3010", "bidders": {"Perry Verrone LLC": true, "Rolvin Carpentry Inc": true}},
    {"description": "Exterior walls", "uniformat_code": "B2010", "bidders": {"Perry Verrone LLC": false, "Rolvin Carpentry Inc": true}},
    {"description": "Rain water drainage", "uniformat_code": "D2040", "bidders": {"Perry Verrone LLC": false, "Rolvin Carpentry Inc": true}}
  ],
  "bidders": [
    {
      "name": "ABC Plumbing",
      "brief_summary": "Comprehensive bid at $34,300 — fixtures, heater, waste, drainage",
      "total_cost": 34300.00,
      "unit_cost": 2450.00,
      "scope_differences": [
        "Includes rain water drainage (D2040) — XYZ excludes",
        "Water heater $4,500 vs XYZ $5,200 for domestic water"
      ],
      "duration_and_schedule": ["6-8 weeks", "Monthly progress billing, Net 30"],
      "preconditions": ["Framing + rough electrical complete", "Slab on grade poured"],
      "substantial_completion": ["All fixtures operational", "Pressure test passed"],
      "lien_waiver_requirements": ["Conditional with each progress payment", "Unconditional at final"],
      "qualifications": ["CA License #987654 (C-36)", "$2M GL, $1M auto"],
      "exclusions_and_terms": ["Excludes permits/inspections", "10% retainage, released at final"]
    }
  ]
}

The schema supports two recommendation styles:

  • Single recommendation: When overlap is high, use a single entry in recommendations
  • Per-scope recommendations: When scopes diverge, make separate recommendations per UniFormat area

The overlap_comparison object shows the apples-to-apples subtotals for shared categories and a note explaining why total comparison is misleading. Use this when grand totals would give a false impression.

Scope Overlap Matrix

The scope_overlap array drives the PDF's page-1 comparison table. Enumerate scopes more granularly than the CSV to show exactly what each bidder includes/excludes. Tag each with a UniFormat code. Make a best effort to interpret which line items across bids are equivalent.

Recommendation Logic

Never compare totals across bids with different scopes. A lower total does not mean a better price if the bidder covers less work.

Step 1: Identify overlapping vs. non-overlapping scope

Using the scope overlap matrix, separate line items into:

  • Overlapping: Both bidders include this scope (apples-to-apples)
  • Unique to Bidder A: Only one bidder covers this
  • Unique to Bidder B: Only the other bidder covers this

Step 2: Compare on overlapping scope only

Compute an overlap-only subtotal for each bidder — the sum of costs for only the UniFormat categories both bidders cover. Compare bidders on this number, not on their grand totals.

Example: If Bidder A quotes roofing at $110,250 and Bidder B quotes roofing at $35,000 + exterior walls at $93,333 + drainage at $11,667, the apples-to-apples comparison for roofing is $110,250 vs. $35,000 — Bidder B is dramatically cheaper on the shared scope, even though their total is higher.

Step 3: Make scope-aware recommendations

  • High overlap (>70% of line items shared): Make a single recommendation based on overlapping cost comparison, thoroughness, and contractual terms
  • Partial overlap: Make separate recommendations per scope area when appropriate (e.g., "For roofing, Bidder B is significantly cheaper; Bidder A does not cover exterior walls or drainage")
  • Minimal overlap (<30% shared): Do not recommend one bidder over the other — state that the scopes are too different to compare directly and describe what each covers

Step 4: Factor in unique scope

When one bidder includes scope the other doesn't, call this out explicitly:

  • What would the owner need to procure separately?
  • Does the additional scope justify a higher total?

Weights (for overlapping scope)

  1. Apples-to-apples price — cost for overlapping categories only
  2. Scope completeness — additional coverage reduces separate procurement
  3. Contractual clarity — clear terms, reasonable conditions, adequate insurance

Step 7: Generate Spreadsheet

CSV:

uv run scripts/generate_csv.py bid_data.json bid_level.csv

New Excel file:

uv run scripts/generate_csv.py bid_data.json bid_level.xlsx

Add sheet to existing Excel file:

uv run scripts/generate_csv.py bid_data.json bid_level.xlsx existing_workbook.xlsx

Output format is detected from file extension. The script reads references/uniformat_headings.csv automatically.

Step 8: Generate PDF

uv run scripts/generate_pdf.py analysis.json bid_level.pdf

The PDF is structured as:

  • Page 1: Project info, recommendation, bid summary table, scope overlap matrix with checkmarks
  • Page 2+: Per-bidder details as concise bulleted lists (scope diffs, schedule, preconditions, completion, lien waivers, qualifications, exclusions)

Resources

  • references/uniformat_headings.csv — Full UniFormat II Level 1/2/3 heading hierarchy
  • references/bid-analysis-guide.md — Extraction guide for bid documents and contractual terms
  • scripts/generate_csv.py — Spreadsheet generation (CSV or Excel) from bid data JSON
  • scripts/generate_pdf.py — PDF report generation from analysis JSON

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

35.62%
按下载量换算199

Claude

29.11%
按下载量换算163

Cursor

19.69%
按下载量换算110

Gemini CLI

10.42%
按下载量换算58

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

可疑

权限和风险

只读

该 Skill 主要提供规则、说明或参考内容,本身偏只读;真正读写文件、联网或执行命令仍取决于宿主 Agent 的任务。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在 warning/failed 结果,不能写成本站确认安全。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills