Job cost is where field-service margin dies quietly.

Not in the sales deck. Not on the dispatch board when everyone is watching. In the gap between the hours the crew worked, the materials that left the truck, the vendor ticket that never matched a PO, and the invoice the customer eventually paid. By the time the controller sees contribution margin by job, the month is closed and the argument is already about next month.

Most AI pitches start at dispatch. That is the wrong first door. Dispatch is political. Job cost is arithmetic — and arithmetic is where a skill earns trust.

What job cost leakage actually looks like

A facilities contract that bills by site still loses money on the sites that look fine on the board. Labor hits the wrong job code. Overtime posts after the supervisor already left. Card spend for materials never reaches the work order. A subcontractor invoice sits in email while the PM closes the job complete.

In PE-backed platforms the problem compounds. Two brands. Two FSMs. Two ways to code a job. One board pack that pretends utilization is comparable. The CIM assumed a margin. The floor runs three different definitions of done.

None of that is fixed by a chatbot that summarizes last week's tickets. It is fixed by a written skill that reads the sources that already exist, drafts a packet a named person can reject in thirty seconds, and never posts without that person.

Why the model must not fix job cost alone

Job cost sits next to payroll, AP, and inventory. A wrong write is not an awkward email. It is a P&L lie. So the rule is the same as every other system of record: the model reads and drafts; a named person releases the write. See Do not let the model write to the system of record.

A job-cost skill does not invent codes. It matches. Invoice line to PO. Receipt to job. Hours to the open work order. When the match fails, it escalates — it does not guess.

A practical first skill

Start where the paper already piles up. Not the full general ledger. One packet:

  • Sources: time exceptions, material receipts, open work orders, vendor invoices for a single division
  • Draft: job-level cost rollup with mismatches flagged
  • Approver: named controller or job-cost owner — not finance
  • Never: auto-post, payroll touch, invent a job code, close a job

Run it in parallel for thirty days. Compare to the manual packet. Fix the skill file when it is wrong. Retire the parallel only when the error rate is boring.

What changes by month four

You stop arguing about whether margin feels off. You have a list of jobs where labor, materials, and vendor spend disagree with the close. The PE operating partner gets a board view that matches the floor. The fractional COO seat has something to hold the room to.

That is load-bearing AI. Not a seat in chat. If you want the operating path, start with assessment when you cannot see the leak, or AI and automation when the packet owner is ready to be the gate.