bid-summary

star 0

Summarize construction bid details with historical win/loss comparison and risk analysis

holden-bryce By holden-bryce schedule Updated 2/9/2026

name: bid-summary description: Summarize construction bid details with historical win/loss comparison and risk analysis user-invocable: true metadata: { "openclaw": { "emoji": "📑", "category": "construction", "requires": { "bins": ["python3"], "pip": [] } } }

When to use

Use this skill when the user needs to analyze or summarize a construction bid. Common scenarios:

  • Bid/no-bid decisions: evaluate whether to pursue an opportunity based on fit, capacity, and win probability
  • Pre-submission review: summarize the bid package before sending to verify completeness and competitiveness
  • Historical comparison: compare a new bid against past wins and losses to calibrate pricing
  • Competitive analysis: assess positioning against known competitors
  • Post-award analysis: review won or lost bids to refine future estimating

Steps

  1. Gather bid details from the user: project info, estimate breakdown, deadline, known competitors, and any historical bid data.

  2. Build a JSON config object with this structure:

{
  "output_path": "/absolute/path/to/bid_summary.md",
  "bid": {
    "project_name": "Municipal Water Treatment Plant Expansion",
    "bid_number": "BID-2026-0089",
    "owner": "City of Dearborn",
    "architect_engineer": "Smith & Associates",
    "bid_date": "2026-03-15",
    "project_type": "municipal",
    "delivery_method": "design-bid-build",
    "estimated_duration_months": 18,
    "location": "Dearborn, MI",
    "description": "Expansion of existing water treatment facility from 10MGD to 15MGD capacity"
  },
  "estimate": {
    "total_bid": 4250000.00,
    "categories": [
      { "name": "General Conditions", "amount": 340000.00, "percent": 8.0 },
      { "name": "Sitework", "amount": 425000.00, "percent": 10.0 },
      { "name": "Concrete", "amount": 680000.00, "percent": 16.0 },
      { "name": "Structural Steel", "amount": 510000.00, "percent": 12.0 },
      { "name": "Mechanical/Plumbing", "amount": 935000.00, "percent": 22.0 },
      { "name": "Electrical", "amount": 595000.00, "percent": 14.0 },
      { "name": "Finishes", "amount": 340000.00, "percent": 8.0 },
      { "name": "Contingency", "amount": 212500.00, "percent": 5.0 },
      { "name": "Profit/Overhead", "amount": 212500.00, "percent": 5.0 }
    ],
    "unit_cost_sqft": 125.00,
    "bond_required": true,
    "bond_cost": 42500.00,
    "insurance_requirements": "2M general liability, 1M per occurrence"
  },
  "competitors": [
    { "name": "Barton Malow", "estimated_bid": 4100000.00, "notes": "Strong municipal track record" },
    { "name": "Walbridge", "estimated_bid": 4400000.00, "notes": "Less water/wastewater experience" }
  ],
  "historical": [
    { "project_type": "municipal", "bid_amount": 3200000.00, "result": "won", "margin": 0.08, "year": 2025 },
    { "project_type": "municipal", "bid_amount": 5100000.00, "result": "lost", "margin": 0.12, "year": 2025 },
    { "project_type": "municipal", "bid_amount": 2800000.00, "result": "won", "margin": 0.06, "year": 2024 },
    { "project_type": "commercial", "bid_amount": 1500000.00, "result": "won", "margin": 0.10, "year": 2025 },
    { "project_type": "industrial", "bid_amount": 6000000.00, "result": "lost", "margin": 0.15, "year": 2024 }
  ],
  "risk_factors": [
    { "factor": "Unfamiliar owner — no prior relationship", "severity": "medium" },
    { "factor": "Hazardous materials abatement scope unclear", "severity": "high" },
    { "factor": "Tight schedule with liquidated damages clause", "severity": "high" }
  ]
}
  1. Write the JSON config to a temporary file:
cat > /tmp/bid_summary_config.json << 'JSONEOF'
{ ... your config ... }
JSONEOF
  1. Run the generator script:
python3 {baseDir}/bid_summary.py /tmp/bid_summary_config.json
  1. Report the output path printed by the script to the user.

  2. Clean up the temporary JSON file.

JSON Config Reference

Field Type Required Description
output_path string no Absolute path for output markdown (defaults to /tmp/)
bid object yes Bid and project identification
estimate object yes Cost estimate breakdown
competitors array no Known competitor information
historical array no Historical bid results for comparison
risk_factors array no Identified risk factors

Bid Object

Field Type Required Description
project_name string yes Project name
bid_number string no Internal bid tracking number
owner string yes Project owner
architect_engineer string no A/E firm
bid_date string yes Bid due date (YYYY-MM-DD)
project_type string yes One of: residential, commercial, industrial, municipal, infrastructure, renovation
delivery_method string no One of: design-bid-build, design-build, cm-at-risk, cm-agency
estimated_duration_months number no Expected project duration
location string no Project location
description string no Brief project description

Estimate Object

Field Type Required Description
total_bid number yes Total bid amount
categories array yes Cost breakdown by category
unit_cost_sqft number no Cost per square foot
bond_required boolean no Whether a bid bond is required
bond_cost number no Bond premium cost
insurance_requirements string no Insurance requirements

Estimate Category Object

Field Type Required Description
name string yes Category name
amount number yes Category amount
percent number no Percentage of total bid

Competitor Object

Field Type Required Description
name string yes Competitor name
estimated_bid number no Estimated competitor bid amount
notes string no Intel notes

Historical Bid Object

Field Type Required Description
project_type string yes Project type category
bid_amount number yes Bid amount
result string yes One of: won, lost, pending, no-bid
margin number no Profit margin as decimal
year number no Year of bid

Risk Factor Object

Field Type Required Description
factor string yes Risk description
severity string yes One of: low, medium, high, critical

Examples

Simple Bid Summary

{
  "bid": {
    "project_name": "TCG Warehouse Addition",
    "owner": "TCG",
    "bid_date": "2026-02-28",
    "project_type": "commercial"
  },
  "estimate": {
    "total_bid": 850000.00,
    "categories": [
      { "name": "General Conditions", "amount": 85000.00 },
      { "name": "Concrete/Foundation", "amount": 170000.00 },
      { "name": "Structural Steel", "amount": 255000.00 },
      { "name": "Mechanical/Electrical", "amount": 212500.00 },
      { "name": "Profit/OH", "amount": 127500.00 }
    ]
  }
}

Bid with Full Historical Comparison

{
  "output_path": "/home/holden/outputs/bid_water_plant.md",
  "bid": {
    "project_name": "Water Treatment Expansion",
    "owner": "City of Dearborn",
    "bid_date": "2026-03-15",
    "project_type": "municipal",
    "delivery_method": "design-bid-build"
  },
  "estimate": {
    "total_bid": 4250000.00,
    "categories": [
      { "name": "General Conditions", "amount": 340000.00, "percent": 8.0 },
      { "name": "Concrete", "amount": 680000.00, "percent": 16.0 },
      { "name": "Mechanical", "amount": 935000.00, "percent": 22.0 }
    ]
  },
  "historical": [
    { "project_type": "municipal", "bid_amount": 3200000.00, "result": "won", "margin": 0.08 },
    { "project_type": "municipal", "bid_amount": 5100000.00, "result": "lost", "margin": 0.12 }
  ],
  "competitors": [
    { "name": "Barton Malow", "estimated_bid": 4100000.00 }
  ],
  "risk_factors": [
    { "factor": "Hazmat scope unclear", "severity": "high" }
  ]
}

Constraints

  • Output format is markdown only
  • Dates must be in YYYY-MM-DD format
  • Historical data is optional but strongly recommended for meaningful analysis
  • Competitor bid estimates are inherently speculative — the report labels them as estimates
  • The script requires only Python 3 standard library (no additional pip packages)
  • Currency is formatted as USD ($); no multi-currency support
  • The output directory must already exist if specifying an output_path
  • Percentage breakdowns should be pre-calculated and consistent with total
Install via CLI
npx skills add https://github.com/holden-bryce/agents --skill bid-summary
Repository Details
star Stars 0
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator
holden-bryce
holden-bryce Explore all skills →