In production

Award to project setup, unattended

Critical power and telecom infrastructure contractor. Box, Smartsheet, quote log, accounting intake.

Situation

When a customer awards a job, someone has to turn that award into a live project: assign the next project number in that region's sequence, build the folder structure, turn the estimate into a scope-of-work document, fill the accounting intake form, submit the install manager's row and email the project managers. It is an hour of clerical work per award, it lands in batches, and every step is a place to make a quiet error that surfaces weeks later in billing.

What we built

A scheduled agent runs every night. It finds newly awarded jobs in the quote log, matches each to its purchase order, and does the entire setup with nobody watching. Folders, documents, forms, submissions and the notification emails. A run-summary email is the audit trail the next morning. Anything ambiguous escalates and waits rather than proceeding on a guess.

How it works

  • Project numbering is deterministic code, not model arithmetic. Each region has its own sequence and range, and a number outside that range is treated as a change to the convention, escalated rather than overridden.

  • Generated documents are validated after they are built, not before. Each one is re-opened and checked for the content that must be there and the pricing that must not, and nothing uploads on a failed check.

  • A mistaken award can be taken back. State is append-only, with one guarded path to un-suppress a job the customer marked awarded by accident.

Impact

$263,682

the larger of two awards taken end to end overnight on the first fully unattended cycle, with no human in the loop.

8 of 8

nightly runs on time with zero errors in the first full week after going live.

4

awards set up in a single night, every side effect verified from tool output rather than the agent's own summary.

Every guard above came from a live run that exposed the failure, and was closed with a rule rather than a retry.

Have a function like this one?

Tell us where you would start and we will tell you what it would take.

patrick@boguelabs.ai