The problem
In February, the owner’s rep on a $14 million medical office building in San Antonio opened the weekly OAC call with a question. Where was the revised curtain wall submittal?
On a call two weeks earlier, the project manager had promised it by the 10th. He remembered the call. He didn’t remember the promise, and it was in nobody’s notes, nobody’s task list, and nobody’s calendar.
The submittal went in nine days late. The glazing subcontractor lost its fabrication slot, the envelope slipped three weeks, and the contractor gave the owner a $68,000 credit on general conditions to keep the relationship.
The Director of Operations heard about it from the company president, who heard about it from the owner. Fourteen project managers were running 31 active jobs on Zoom calls, Slack channels, and memory. Nobody could prove what had been promised, so nobody could keep it.
Where Phos AI Labs came in
Phos AI Labs started with a three-week AI Readiness Audit. We interviewed the Director of Operations, the operations coordinator, nine of the 14 project managers, and six superintendents.
With the client’s permission, we also spoke with two owner’s reps. Both said the same thing: the work was good, and the follow-through on small promises was not.
Then we read the data. We sampled 120 recorded Zoom calls, six months of shared Slack channels on eight active projects, the Procore submittal and RFI logs, and the last access review from IT.
Three findings shaped everything after. Project managers made about 140 promises a week on calls, and 38 of them never got an owner or a due date. Client messages in shared Slack channels waited 3.2 days for an answer. And 11 former employees still had access to company tools.

The baseline
Step one was a baseline. The table below became the scoreboard for the whole engagement.
| KPI | Baseline |
|---|---|
| Client commitments missed or late | 31% |
| Commitments per week with no owner or due date | 38 |
| Average wait on an unanswered client message | 3.2 days |
| Recorded calls reviewed after the call | 0% |
| PM hours per week searching Slack and notes | 6 |
| Former-employee accounts with access | 11 |
| Credits conceded on disputed promises, per quarter | $142,000 |
The credits stood out. Most of the $142,000 came from arguments where the client remembered a promise and the contractor had no record either way. The cheapest fix was a record.
Setting the foundation
The AI Foundation phase took two weeks. We sat with the Director of Operations and the operations coordinator and wrote down what counts as a commitment, because the company had never defined one.
A commitment is a specific deliverable, an owner on the contractor’s side, and a date. “We’ll look into it” counts too: it gets logged with a three-business-day default and flagged as “no date given,” so the project manager can fix it.
We also defined what “moved” means. A commitment moves when there is evidence: a Procore submittal, an RFI response, a sent email, or a Slack message to the client. A project manager saying it’s done also counts, and gets logged.
The approval rules went into the same document. The system never messages a client. It reports to project managers and leadership only. Access removals are made by a person in IT, and crew time data is never used for discipline without a superintendent’s review.
Deciding what to build
With the baseline and the rules in hand, the Phos AI Labs engineering team joined the account. Their job was to decide what kind of system each problem needed.
We looked at three common options first. The company had tried asking project managers to log promises in Procore after each call; it lasted three weeks. A meeting-notes app would summarize calls, but a summary nobody tracks is the same as no summary.
The third option was an assistant that replied to clients on the project manager’s behalf. The owner’s reps had been clear that they wanted their project manager, so we ruled it out early.
So we matched the tool to the job. Repeatable steps with no judgment became automations: the 7:00 morning report, the 5:00 evening report, and the monthly access audit.
One decision point inside an existing process became an AI-enhanced workflow. The PM briefing classifies client messages before pushing them, and the crew time clock reads messy WhatsApp messages before logging hours.
Reading a call, deciding what was promised, and later judging whether the work moved needed an AI agent. The commitment agent reasons over transcripts and project data, and its only action is writing to the commitment record.
No job here needed an AI employee. Every system reports to a project manager who decides, and the company wanted it that way.
The build
The build ran six weeks. The commitment agent came first, because the reports and briefings all read from its record.

Every night at 1:00 am, new Zoom cloud recordings are pulled and transcribed. Each call is matched to its Procore project using the meeting title and the attendee list from the calendar invite.
A small, fast model reads each transcript and marks every sentence that sounds like a promise. A stronger reasoning model then reviews each candidate and returns a structured result: deliverable, owner, due date, project, and a confidence score.
Anything above 0.8 confidence goes straight into the commitment record, a Postgres database. Between 0.5 and 0.8, it lands in a short “please confirm” section of the project manager’s morning report. Below 0.5, it’s dropped.
At 6:30 am, the agent runs a status pass. For every commitment due in the next three days or already overdue, it checks Procore, the project’s Slack channel, and the project manager’s sent Gmail, then marks each one moved, not moved, or unclear.
The 7:00 am report is an automation. Each project manager gets a Slack message with what’s due, what’s overdue, and what moved yesterday. The Director of Operations gets one roll-up across all 31 jobs.

The 5:00 pm report runs Monday to Thursday on the same logic. It closes the day: what got done, what’s due tomorrow, and anything promised on today’s calls that already has a date this week.
The PM briefing runs every 30 minutes from 7:00 am to 6:00 pm. It scans the shared client channels in Slack, and a small model sorts each client message into “needs an answer” or “for your information.” Unanswered questions older than an hour get pushed to the project manager directly.
Each task gets the model that fits it. The small model handles screening and classification at a fraction of a cent per call. The reasoning model handles extraction and status checks. A drafting model writes the reports in plain language.
Running costs stay under $450 a month. Any single model can be swapped when a better one ships, without rebuilding the rest.
On the first of each month, the access audit compares Google Workspace, Slack, and the Procore directory against the HR roster. Mismatches go to the IT administrator, who removes them by hand.
The crew time clock came last. Crews post “in” and “out” in their WhatsApp group, the small model reads entries like “in 6:40 w 3 guys,” and hours land in the database. Superintendents ask for a crew’s weekly tally and get it back in the same chat.

A weekly maintenance job runs Sunday night and keeps the database fast, so the 7:00 report always finishes on time.

Rollout and training
Nothing went live on day one. For the last two weeks of the build, the agent ran in shadow mode. It read every call, but the reports went only to the Director of Operations and Phos AI Labs.
We compared its list against what project managers had written down from the same calls. The agent found more than twice as many promises, and the Director of Operations used those side-by-sides in the first training session.
Go-live started with four volunteer project managers on six jobs in week seven. The other ten joined in week ten, after a two-hour hands-on session where everyone confirmed, corrected, and closed commitments from their own calls.
The operations coordinator got a separate session on changing commitment rules, confidence thresholds, and report timing. She now owns the rules document, so changes no longer wait on Phos AI Labs.
Superintendents got a one-page guide and a 20-minute walk-through on site for the WhatsApp time clock.
Making it better
Week one exposed the hard cases. Project managers marked 27% of extracted commitments as wrong. Most were conditional (“if steel shows Tuesday, we set Wednesday”) or promises the client had made, logged against the contractor.
We fixed both at the source. Conditional promises now get tagged and only become commitments when the condition is met. Client-side promises moved to a separate “waiting on client” list, which project managers quickly started bringing to OAC calls.
The morning report had the opposite problem. It averaged 31 items per project manager, and people stopped reading at item ten. We cut it to commitments due within three days or overdue, and moved everything else to a Monday summary.
The PM briefing pushed too many “thanks, got it” messages at first. We raised the classifier’s threshold, and pushes fell from about 22 a day per project manager to six.
In month three, a newer reasoning model came out. We tested it against 400 hand-labeled commitments from the shadow period before switching. Correct extractions rose from 81% to 92%, so we swapped it in.
Every month, the operations team and Phos AI Labs meet for 45 minutes. We review the corrections, update the rules, and decide what to tune next. By week twelve, wrong extractions were down to 7%.
The outcome
In September, the same developer awarded the contractor phase two of the medical campus. On a Thursday call, the project manager promised the owner’s rep a revised door hardware schedule by the 12th.
On the 11th at 7:00 am, his Slack report flagged it: due tomorrow, no submittal in Procore, nothing sent. He called the hardware supplier before the site meeting and submitted that afternoon. At the next OAC call, the owner’s rep had nothing to ask.
Most days look like that now. Fourteen project managers start the day with their own list, and the Director of Operations sees a slipping promise before the client does.
| KPI | Baseline | After 90 days |
|---|---|---|
| Client commitments missed or late | 31% | 11% |
| Commitments per week with no owner or due date | 38 | 2 |
| Average wait on an unanswered client message | 3.2 days | 4 hrs |
| Recorded calls reviewed after the call | 0% | 100% |
| PM hours per week searching Slack and notes | 6 | 1.5 |
| Former-employee accounts with access | 11 | 0 |
| Credits conceded on disputed promises, per quarter | $142,000 | $18,000 |
| Extracted commitments marked wrong | n/a | 7% |

The time clock paid off too. Superintendents used to spend about four hours every Friday rebuilding crew timesheets from texts and memory. Now the tally takes 40 minutes to check, and payroll questions get answered from the record.
Before, a client would say we told them Friday and nobody could prove it. Now I can see who promised what, and I see it before the client calls.
What’s next
The engagement has no end date. Each correction sharpens the rules, and each new model generation reads calls more accurately. We retest every release against the same 400 labeled commitments before switching.
Next, commitments will link to the project schedule in Procore, so a missed promise shows up as a schedule risk on the activity it affects. The target is missed commitments under 5% by the end of next quarter.
If promises made on your calls disappear by Friday, Phos AI Labs can show you how many in about three weeks.
Client details changed under NDA.