All playbooks

Review bid documents with your firm's rules in Copilot

An AI can read a spec and list the risks. Most tools stop there. What it can't know is how your firm handles each risk: whether you price it, exclude it, clarify it or send an RFI.

Tested against Microsoft 365 Copilot agent on a business account, September 29, 2026

This playbook shows how to build a Copilot agent that reviews bid documents against your firm's own rules. I ran the same agent on the same bid twice. In one run the rules file loaded and in the other it didn't. The recommendations changed.

Bid Risk Review answering without the rules file, marking every item No firm rule.
Without the rules
Bid Risk Review citing firm rule K-076 and pricing a public hard bid instead of qualifying it.
With the rules

Before you start

The agent recommends. The estimator decides. Bid Risk Review is meant to raise items early in the bid so the estimator has time to make a call and account for it. It doesn't approve a number, write a proposal or replace anyone's judgment. Every row is a starting point for the estimator to accept, change or throw out.

The rules in this playbook are fictional. They belong to Coast Power & Light, a made-up electrical contractor I use for testing. Your firm's rules will be different. One firm buries escalation on a public bid and another walks away from the bid. The point is that the agent follows whichever rules you give it.

Prerequisites

  1. 1. Create the agent

    Use Agent Builder inside Copilot. Copilot Studio also works, but when I tested it Studio ran an older model and rejected some of the formatting in my instructions.

    Name: Bid Risk Review

    Description: Reviews bid documents against the firm's estimating rules and flags items to price, exclude, clarify or send as an RFI.

  2. 2. Add the instructions

    Paste these instructions into the agent and replace with your firm's name and trade. They name the rules file and tell the agent what to do if the file doesn't load.

    ## Role
    You are an estimator at Coast Power & Light, an electrical contractor. Always search bid_estimation.md for the firm's own bid decisions before answering. If that file is not available, say so once at the top of your answer and use general industry practice.
    
    ## Task
    Review the bid documents in this order and flag every item that affects price, schedule or risk.
    
    ### 1. Procurement and contract
    - Public hard bid or negotiated/private work
    - Liquidated damages, milestones and completion dates
    - Quote validity needed through the award window
    
    ### 2. Division 01 and site conditions
    - Security, badging, background checks and escort requirements
    - Work hours restrictions, occupied building or off-hours work
    - Site access, laydown, hoisting and delivery restrictions
    - Temporary power responsibilities
    - Number of separate secured locations
    
    ### 3. Schedule
    - Whether the schedule can be built on a 40-hour week
    - Six-day weeks versus extended five-day weeks
    - Whether the schedule crosses an IBEW agreement renewal date
    - Utility service or energization dependencies
    - Scheduling, reporting and meeting requirements that apply to subcontractors, and any payment withheld for noncompliance
    
    ### 4. Division 26 requirements
    - Long-lead gear and whether it can arrive inside the schedule
    - Acceptance testing, studies (short circuit, coordination, arc flash) and commissioning
    - Warranty length, start date and response time
    - Substitution restrictions, spare parts and training
    - Wiring methods and materials that differ from standard practice, such as conduit type or conductor insulation
    - Conflicts between Division 26 sections
    
    ### 5. Drawings
    - Missing sheets or an incomplete set
    - Conflicts between single line, risers, panel schedules and plans
    - Mechanical equipment with no power shown
    - Scope boundaries with other trades that are not assigned
    
    For each flagged item, decide whether the firm would price it, exclude it, clarify it in the qualifications or send an RFI. Base every decision on bid_estimation.md when a rule covers it. Otherwise mark it "No firm rule" and use general industry practice.
    
    ## Output format
    A table with these columns:
    1. Item: what the documents say, with the section or sheet reference
    2. Decision: Price, Exclude, Clarify or RFI
    3. Firm rule: the K-label and the rule's specific numbers or conditions
    4. Why: one sentence from the rule's rationale
    
    After the table:
    - Items no firm rule covers
    - Facts the estimator must supply before the decision is final, such as the GC's history with Saturday work or whether a supplier will hold pricing
    
    ## Constraints
    - Only cite K-labels that appear in bid_estimation.md. Never invent a rule.
    - When a rule includes numbers, such as a percentage, hours or a dollar amount, include them.
    - When no rule covers an item, mark it "No firm rule" and give general industry practice, labeled as such.
    - Some decisions depend on facts not in the documents, such as GC history or procurement method. Say which fact decides it instead of guessing.
    - Apply only rules that fit this job. Leave out rules for conditions not present, such as core-and-shell tenant boundaries or buildings above ten stories.
    - Flag every item from the checklist and every conflict between sections, even when no firm rule covers it. Never leave out an item because it lacks a firm rule.

    Two parts of the instructions matter most:

    The checklist. The checklist tells the agent what to look for in an electrical bid. That part is general industry knowledge. Your rules tell it what to do about each item.

    The fallback. If the rules file isn't available, the agent says so once and marks every item "No firm rule." You want this. An agent that quietly answers without your rules looks the same as one that followed them.

  3. 3. Write your rules and add them as knowledge

    Here is one rule from the sample file:

    The bid_estimation.md file open in SharePoint on the rule Handle commodity material risk from expiring quotes, K-076.

    Every rule has three parts. The condition says when the rule applies. The action says what to do. The rationale says why the firm does it that way. To try the agent before capturing your firm's rules, write a few of your own in the same shape:

    ### Supplier quotes on public hard bids
    **Condition:** A public hard bid where supplier quotes expire before the expected award date.
    **Action:** Don't put an escalation qualification on the face of the bid. If the exposure is small, bury a cushion in the price. If it's large, get a written supplier hold through award. If the supplier won't hold, raise it as a bid/no-bid question.
    **Rationale:** A qualification on the face can make a public bid nonresponsive.

    Start with five to ten rules on the items your estimators argue about most. Quotes, overtime, badging, temporary power and labor escalation are good places to start.

    Make the condition specific. A loose condition is the main reason the agent applies a rule on one run and skips it on the next. The last section of this playbook shows an example.

    Save the rules as bid_estimation.md, upload the file to SharePoint (or attach it to the agent) and add it to the agent's knowledge. The instructions name the file, so if you rename it, update the instructions too.

    Turn off web search and other sources so the agent works only from your documents and your rules.

    If the agent can't find the file, start a fresh chat first. In my testing SharePoint missed the file on one run and found it on the next. If it keeps failing, upload the file straight into the agent instead of linking it. The catch is that you have to upload it again every time the rules change.

    Suggested prompts

    TitleMessage
    Review this bidReview the attached bid documents and tell me whether to price, exclude, clarify or RFI each risk item, using our rules.
    Review with job factsReview the attached bid documents using our rules. Job facts: [public hard bid or private], GC is [name, and whether we've worked with them], schedule runs [start] to [finish], site is [secured or not].
    Check one itemThe documents say [paste the requirement]. Should we price it, exclude it, clarify it or send an RFI? Cite the rule.
    Bid Risk Review agent in Agent Builder, with instructions written and the FirmKnowledge SharePoint library added as knowledge.
    Agent toggles for Outlook, Teams, Copilot connectors, and web search switched off, with three suggested prompts.
  4. 4. Prepare the spec

    A full spec book is too large to attach. Split out the sections that carry bid risk. Spec numbering varies by owner, so look for these topics rather than exact section numbers.

    From Division 01, look for:

    TopicWhy it matters
    Work restrictions and site accessWork hours, outages, occupied areas, core drilling limits
    Security and badgingBadge lead times, background checks, escorts, training
    Project scheduleScheduling software, reporting and schedule constraints
    Temporary utilitiesWho furnishes temporary power and who pays for it
    Access, staging and storageDeliveries, laydown, elevators and crane access
    Closeout and warrantyWarranty start, response times and spare parts
    CommissioningCommissioning agent, test days and staffing
    Supplementary requirementsLiquidated damages and work hours, if they live here

    From Division 26

    All of it, for your trade.

    From other divisions

    Any page that assigns work to Division 26. Mechanical and controls sections often push motors, starters and wiring onto the electrical contractor. Those are scope boundaries you want found before bid day.

    Bluebeam's split by bookmark handles the first two. For the third, I wrote a short script that finds every page in other trades' sections that references Division 26: extract_sections.py.

    pip install pypdf
    
    python extract_sections.py "A.02.11 Technical Specifications (26RA007).pdf" div01.pdf --sections "01 14 00.10 28" "01 14 00.90 28" "01 32 01.00 28" "01 51 00.00 28" "01 55 10.00 28" "01 91 00.00 28" "01 78 00.00 28"
    python extract_sections.py "A.02.11 Technical Specifications (26RA007).pdf" div26.pdf --sections 26 --refs --exclude 01
    python extract_sections.py "A.02.11 Technical Specifications (26RA007).pdf" div26_references.pdf --sections 26 --refs-only --exclude 01
  5. 5. Run it

    Start a fresh chat in that new Copilot agent, attach the three PDFs and give the agent the job facts it can't find in the documents. This is the prompt I used:

    Review the attached bid documents using our rules. Job facts: public hard bid for USACE. GC is Harbor Ridge Builders, and we have not worked with them before. Schedule runs March 1, 2027 to November 30, 2027. Our IBEW agreement renews June 1, 2027. Site is a secured federal facility requiring badging. Award is expected about 60 days after bid, and our wire and conduit quotes are good for 30 days.

    The job facts matter. The rules often depend on them. The overtime rule, for example, changes with whether you have worked with the GC before.

Results

Both runs used the same agent, instructions, prompt and files. The only difference was whether the rules file loaded.

Without the rulesWith the rules
Rows4943
Price / Clarify / RFI32 / 17 / 021 / 18 / 4
Rows citing a firm rule024

Fifteen items appeared in both runs and had a firm rule that applied:

5 changed recommendations. Public hard bid, quote validity, IBEW renewal, badge lead time and storage.

4 kept the recommendation but changed the action. The new GC, site security, off-hours core drilling and temporary power.

6 stayed the same. Here the firm's rule matched general practice.

ItemWithout the rulesWith the rules
Public hard bidClarifyPrice. Keep escalation qualifications off the face.
30-day quotes vs 60-day awardClarify. Qualify or refresh the quotes.Price. Bury a small cushion or get a supplier hold. A large exposure that can't be held is a bid/no-bid input.
IBEW renewalClarify. Qualify escalation.Price. Carry an escalation contingency on post-renewal work.
Badge lead timePrice the admin time.Clarify. Mobilization depends on badge issuance, with day-for-day relief.
Storage and laydownPriceClarify. Confirm actual conditions before pricing handling.
New GCClarify their history.Clarify. Assume a 40-hour week. Premium time is a change.
Site securityPrice lost productivity.Price. Size the crew to how fast badges are issued.
Off-hours core drillingPrice. Premium time may be required.Price. Time-and-a-half plus about 15% for productivity.
Temporary powerClarify the free power and price the wiring.Price as its own line.
Escorts and screeningClarifyClarify
Control room accessClarifyClarify
Deliveries across the damPricePrice
Elevator and escorted routesPricePrice
Long-lead gearClarifyClarify
Controls wiring boundaryClarifyClarify

Overtime is the clearest case. I ran the agent three times without the rules and got three different answers. Every run with the rules made the same recommendation. Consistency is what a firm gets from writing its rules down.

RunWithout the rulesWith the rules
1Carry overtime in the bid40-hour week, premium time as a change
2Qualify overtime40-hour week, premium time as a change
3No recommendation40-hour week, premium time as a change

What the rules don't fix

The rules change recommendations. They don't decide what gets found. Finding items depends on the checklist and the model. Each run found things the other missed. The run without the rules caught scheduling software costs and submittal admin. The run with the rules caught foreign national access and crane limits. Both missed the 10% payment withholding tied to the project schedule, the specified wiring methods and a breaker conflict between two Division 26 sections. Treat the agent as a first pass and not a complete review.

You can't pick the model. Copilot chooses the model for an agent. One of my runs came back thin, likely from a smaller model. It found fewer items, but the recommendations it made still followed the rules.

Judge the rule and the action, not the label. Sometimes the agent stretched a rule to fit a nearby situation. Read the Why column. If the rule doesn't fit the item, the estimator overrides it.

Some rows come from what you didn't attach. I didn't attach drawings or Section 00. The agent correctly flagged the missing drawings as a hard stop and asked for the liquidated damages terms. With a complete set those rows go away.

When a rule gets applied inconsistently

One rule covers off-hours work: time-and-a-half plus a productivity adder of about 15%. The agent applied it to off-hours core drilling in most runs with the rules and skipped it in the first. The rule's condition was loosely worded, so the agent couldn't tell whether core drilling qualified.

That isn't an AI problem. It's a gap in the rule. When the agent applies a rule inconsistently, the fix is to ask the estimator who owns the rule a sharper question and write down the answer.

Your rules are different

Your estimators already carry rules like these.

They probably haven't written them down in a format AI can use.

B2B Architect makes that easy by interviewing your estimators about real jobs and capturing their thinking to rules your AI can use.

Get a free capture

All playbooks