The harness reads your books and your job data, drafts the work no one wants to do, and parks each draft in your approval queue. The contract is simple — agents propose, you dispose, the audit log keeps the receipt.
Postgres + n8n + FastAPI on a single back-office box (or a VPC you own). At 04:00 it pulls overnight bank activity, fresh QuickBooks state, the job time tracker, the GC's portal status, and any inbound supplier ACKs.
2026-05-11 04:00:12 sync.qbo vendor_bills=12 customers=146 jobs=14 2026-05-11 04:00:47 sync.bank acct=op last_balance=$1,247,418.04 2026-05-11 04:01:02 sync.gc portal=lakeside rfis=2 cos=1 2026-05-11 04:01:08 scan.coi subs=12 expired=1 (Bay Plumbing 05/18)
Each agent reads the slice of state it owns and drafts. agent.ap matches vendor bills 3-way. agent.cfo runs the 13-week cash forecast against your minimum-cash threshold. agent.aia checks whether a draw is due this month. Nothing posts. Everything gets queued with a tier.
You open the briefing on your phone with coffee. Cash position. WIP. AR aging. The 13-week forecast with weeks below threshold flagged. Project alerts. A count of things awaiting your stamp — usually under 10.
subj: Weekly cash position — wk03 + wk04 below $80K min target · 3 actions inside ──────────────────────────────────────────── Tom — cash position is $1.24M as of 06:00 Monday. Two upcoming weeks are below your $80K floor. → wk03 (05-26) proj $72K driven by Lakeside CO-014 not yet billed → wk04 (06-02) proj $64K payroll $58K + AP $42K stack 3 drafted actions in your queue. Open queue →
Tier 1 rows (a routine AP match, a 30-day AR reminder) you batch-approve. Tier 2 you skim. Tier 3 is where you actually engage — a variance, a CO over $10K, a lien waiver. Tier 4 is owner-only and rare. Anything you reject takes a one-line reason; the agent learns from it.
An approved row triggers the QuickBooks write with an idempotency key. If QB rejects (duplicate doc number, closed period, validation error), the row flips to conflict and a retry schedule starts. Nothing silently fails. Nothing double-posts. The audit log gets every attempt.
2026-05-11 06:30:14 approve.user #1042 by tom@aire-tech.com 2026-05-11 06:30:14 qbo.write vendor_bill INV-88412 · idem=ap-1042-20260511 · ok
Most "AI for the trades" products want to act for you. We don't. The architecture forbids it — and the audit log proves it.
Every external mutation requires approval_queue.status='approved' — enforced at the DB layer. No agent can bypass it; no admin can disable it. If the harness wrote it, you signed it.
Every approve, reject, edit, expire, and QB sync writes one append-only row. UPDATE and DELETE on the audit table are blocked at the DB. Bonded contractors get a clean audit out of the box.
Every queue row carries a unique idempotency key. Retry the write — same key — get the same result. The harness can crash, resume, and never bill the same vendor twice.