Not a chatbot. Not a macro. A fully autonomous agent that owns the purchase-order lifecycle end to end — drafting POs, booking freight, filing documents, chasing ETAs — across Zoho, CH Robinson, and a stack of live business systems, on a schedule, from anywhere, while healing and improving itself.
Everything a human in this seat does daily — creating POs, booking freight, filing docs, reconciling systems — turned into deterministic, auditable, around-the-clock automation.
The human stays in the loop where it matters. The agent drafts, never sends blind. POs are created as DRAFT, freight is never booked, and emails are never sent without explicit approval. It does 95% of the work and asks for a signature on the 5% that carries money or risk.
Every autonomous agent I ship is the same four-part stack. The harness gives it a body and a clock; tools give it hands; skills give it know-how; the database gives it memory — and a permanent record of every action, error, and run.
The procurement signature: dual-write. Baserow is the source of truth, but every status change fans out to Google Sheets — and where relevant Zoho, Drive, and Gmail — in one atomic pass, then verifies it landed. No system is ever left half-updated, so the three records can't silently drift apart.
The agent shepherds a PO through a strict, verifiable status flow. Status only advances on high-confidence signals — a tracking number is verified on the carrier's own site, never inferred from an email subject line.
Status never advances on a guess. DELIVERED requires verification on the carrier's tracking site — a "carrier arrived" email may mean pickup, not delivery.
Line-item and PO-header status stay in lock-step. Change a line, the header recomputes. No half-updated POs.
An open PO can never have an arrival date in the past — the agent pushes it forward until the order actually lands.
CH Robinson has no usable API for what we need — so the agent drives the real Navisphere web portal through a browser. chr-cli is a first-class command-line tool (Python + Playwright) that logs in once through Okta, quotes every carrier, books the load, and pulls the paperwork.
chr orders | dashboard of every open / in-transit load |
chr quote | live multi-carrier quote + recommendation |
chr create-order | book a load — gated behind explicit approval |
chr track | quick PRO# / tracking lookup |
chr sync | refresh in-transit ETAs into Baserow + Sheets |
chr order-docs | download BOL + pallet labels |
chr health-check | validates portal selectors before they break |
Most "integrations" need a clean API. This one doesn't have one. The agent operates the same web UI a human uses — surviving Okta SSO, session expiry, and silent portal redesigns.
A dedicated health-check probes the portal's form selectors on a schedule, so when CHR ships a UI change, the agent reports the breakage before a booking ever fails — not after.
PlaywrightOkta SSOsession cacheEach skill is a self-contained, tested SKILL.md the agent invokes by intent. They auto-load from the repo, so the same skills run identically whether a human asks in chat or a cron job fires at 7 a.m.
Creates a regular PO across Sheets, Baserow & Zoho. Add → draft → issue on approval → status → Drive folder.
PO creationStands up a volume-commitment blanket PO with a locally-generated PDF, tracked in Baserow + Sheets + Drive.
commitmentsDraws down quantity against an existing blanket commitment as a release order.
commitmentsSafely revises an open Zoho PO: edit → re-issue → archive the prior version.
PO editsAuto-converts Container & Packaging Sales Orders and Yason Pack Proformas into full draft POs.
intakeEnd-to-end LTL freight: parse pickup email → quote carriers → recommend → book → file BOL/labels → notify.
freightPre-PO briefing: full PO history, sample-tracker status, every quote on file, and a recommended action.
researchLLM-extracts raw-material quotes from any email format and logs them to SA Material Quotes (745).
quotingSame for packaging — pouches, scoops, containers, poly bags — into SA Packaging Quotes (746).
quotingDrafts on-brand HTML replies to live supplier threads and logs every interaction.
commsThe scheduled 2×/day sweep — files docs, extracts ETAs, drafts follow-ups, runs COA checks, auto-processes supplier orders.
cronWatches the sourcing inbox for inbound supplier inquiries and routes them to the right skill.
monitoringTwice a day, a single scheduled run executes five independent tasks under a strict time budget. Each task is isolated — if one fails, the others still finish — and each checkpoints its progress so an interrupted run resumes exactly where it left off.
Baserow is the system of record. Every PO, line item, quote, and autonomous run lands in a table — and every failure lands in a structured error log. That's what makes the agent auditable, debuggable, and trustworthy enough to run unattended.
Baserow holds POs, line items, vendors, items & quotes behind one REST API — with field and option IDs loaded from a versioned schema-snapshot.json, never hardcoded.
Each multi-system write appends its outcome per (po, system) to write-outcomes.jsonl, so the nightly audit can spot any write that failed to land in one system.
Failures don't vanish into stdout — they're fingerprinted into error-registry.json with volatile IDs stripped, then matched and escalated on a strike count.
This is the design principle I build into every agent I ship. A one-time failure is never just retried into the void — it is trapped, escalated to a human at the right moment, and converted into a durable fix the agent applies forever after. The system compounds.
Failures are fingerprinted with volatile bits stripped out, so the same bug across different rows counts as one. Alerts a human at 3 strikes; auto-disables the failing write at 5 — no infinite silent retries.
DER-575A shared retry layer wraps every API client. Transient 5xx / 429 / connection drops back off exponentially with jitter and honor Retry-After. Real 4xx bugs fail fast so they surface immediately.
DER-577LLM extractions carry a confidence score. Below threshold, the agent writes nothing and flags the email for a human. "When in doubt, don't change state" is enforced in code.
update-etaA read-only audit compares Baserow ↔ Sheets ↔ Zoho every morning and reports seven classes of drift — missing rows, status mismatches, past-due ETAs — straight to the operator.
po_audit · DER-576Long tasks persist a checkpoint after each item. A timeout or crash mid-run loses nothing — the next run picks up from the last processed message, not the start.
DER-580Hard-won gotchas live in a single source-of-truth doc, a versioned schema snapshot, and a searchable brain vault. The agent reads them on every run — institutional memory that never leaves.
AGENTS.md · brainSelf-defending against the outside world, too. When CH Robinson silently redesigns its portal, a scheduled health-check catches the broken form selectors and reports it — before a real booking fails. The agent notices the ground shifting under it and raises its hand.
The entire agent is portable. A single bootstrap script provisions a fresh machine and self-diagnoses every connection; OS-native schedulers keep it running unattended. No servers to babysit, no dashboard to watch.
It owns a real operational seat — a harness that runs anywhere, tools that drive Zoho, CH Robinson and the inbox, twelve skills, and a database that logs every PO, run, and error — with a human only signing off where it commits money or risk. It catches its own mistakes, escalates at the right moment, and gets permanently better every time something breaks.
I build agents this way on purpose: harness, tools, skills, and a logged database — resilient by design, self-healing by default, and compounding over time. Point me at any repetitive, multi-system role and I'll give you one that runs from anywhere.