PlatformAI agents

AI dispatch for drayage, with a person on the trigger

Nine capabilities, six of them agents, and not one of them shipped. What DrayBase is being built to put in front of a dispatcher is a proposal with the record it came from, ordered by the money at stake, waiting for a yes. Not a chat tab bolted onto a board.

Read this before the listNothing described on this page is running. There is no model call anywhere in DrayBase today, and the dispatcher board these agents would work on is read-only: the API answers two queries and exposes no operational mutations, so there is currently nothing for an agent to change even if one existed. What is built is the ground underneath them — the record they will have to cite, the clocks they will read and the tenant boundary they will run inside. That part is further down, and the two lines of it that are schema without a writer are labelled as such.

01The rule

Every suggestion carries its evidence, and none of them arrives already done

This is the decision the rest of the design hangs from. A dispatcher at 5am does not need a system that is confidently wrong about which box is on its last free day. They need a short list they can check in ten seconds and act on — which means the proposal has to show its working, and the commit has to stay with the person.

Approval by default

An agent will propose, a person will commit. Autonomy will be raised per account and per lane once you have watched one work for a while — never as a default we picked for you, and never on the day you sign.

Evidence attached

Every proposal will name which container, which field, where that field came from and when it was last refreshed. If the evidence is thin the agent has to say so out loud instead of rounding it up into confidence.

Reversible

Anything an agent does will be undoable, and the trail will land on the audit record — which is the order this gets built in: the audit table has no writer today, so no agent gets a write path either. An action you cannot walk back is not one we will hand to a model, at any autonomy level.

What no agent will do on its own

Dispatch
Assigning or reassigning a driver is a promise made to a person with hours of service and a dinner to get home for. An agent ranks the options; a dispatcher gives the move away.
Appointments
Booking, moving or cancelling a terminal slot spends something that may not come back this week. It gets proposed with the window and the driver attached, and a person takes it.
Customer contact
Nothing an agent drafts reaches a customer, a warehouse or a steamship line without a person putting their name on it first.
Money
Approving a charge, an invoice or a settlement stays with the roles that already carry those permissions today. An agent will act as an actor with permissions — never above them.
Container status
Marking a box gated out, delivered or returned changes what the per diem clock is counting. That comes from a gate event, a driver or a person. Not from an inference.

02The roster

Six agents, one question each

Each one is designed around something a dispatcher already asks out loud several times a day, and each will ship with an autonomy setting that starts at the bottom. The status column is the honest one: this is a roadmap, not a changelog.

#AgentWhat it will watchStatus
01DispatcherIdle drivers, hours of service remaining, distance to the gate, open appointment windows, and which load loses money first if nobody movesPlanned · suggest
02Empty ReturnOpen imports against open exports, where the line is taking the empty this week, chassis pool balances and dual-transaction rules at each terminalPlanned · suggest
03Free TimeLast free day, per diem clocks, cut-offs and appointment availability days out, ranked by the dollars accruing rather than by the datePlanned · alert
04ServiceCustomer contract windows, promised delivery times, lanes that run late every week, and the account that is about to hear about it from its own consigneePlanned · alert
05PricingYour own rate history by lane and customer, the true cost of the move, and the accessorials that went unbilled last quarterPlanned · draft
06AnomalyUnusual dwell, GPS gaps, duplicate charges, chassis held far past the move that needed them, driver pay that does not match the tariffPlanned · flag

None of the six exists yet. Suggest, alert, draft and flag describe the ceiling each one is designed to have, not a setting you can change today.

None of them will get its own screen. Free Time will read the same container record described on containers, free time and per diem. Empty Return will work the surface behind street turns and dual transactions. The Dispatcher agent will have no home of its own at all — its suggestions will land on the dispatch board, next to the loads they are about. That board reads today and writes nothing, so there is no row there to land in yet.

03In practice

What lands on the board, and what stays yours

Five situations from a normal week on Newark and Elizabeth. The split is always the same: the agent does the looking, the person does the committing.

SituationWhat the agent will proposeWho commits it
Last free day tomorrow, no appointmentA pickup window from what the terminal has open, with the driver already closest to that gateBooks the slot, or takes a different one
Empty on a chassis, matching export booking openThe street turn, with line, size and type checked against the bookingConfirms the line will authorise it
Driver returning an empty where an import is readyThe dual transaction, with the miles and the second trip it removesGives the second move to the driver
Rate confirmation lands in the inboxA draft load, each field showing the line of the email it was read fromChecks it against the paperwork and saves it
Container discharged, no free time on the recordNothing. It says the field is empty and stops estimatingCalls the line, or fixes the source

Every row of this table is planned. The last one is the one worth arguing about: an agent that has nothing to say has to say nothing, and a system that cannot admit an empty field will eventually fill it in for you.

04Beyond the roster

Three places the model works that are not agents

An agent watches something and comes back to you. These three sit in the middle of work you are already doing, which is exactly why they need the same rule: read freely, propose anything, change nothing.

Command bar PlannedOne keystroke over your own operation: pull a box by number, cut the board down to what has a last free day tomorrow and no appointment, jump to a customer. Reading is the easy half. Anything that would change a record still arrives as a proposal you approve.
Email intake PlannedRate confirmations, terminal notices, empty-return notices and PODs arrive as email and get re-keyed by hand. Parsed into a draft load, a draft quote or a container event, with every extracted field pointing back at the text it came from — and a person saving it.
Voice from the cab PlannedA driver says the terminal will not take the empty. The system proposes the status and opens the exception, instead of asking a man in gloves to find the right button in the rain. The driver app it belongs to is not built either.

05Already true

The part that is built is the part they stand on

An agent is only as honest as the record underneath it. So the work done so far is the unglamorous half: derived status in one place, money computed by ordinary code, and the date that moves the most money carrying the source it came from. Everything in this list exists today, except where it says otherwise.

One derived status
What the board calls a load — enroute to deliver, arrived at return, customs hold — is computed from its moves and its container holds in a single shared module. The API, the board and any future agent read the same word, because there is only one place that decides it.
The clocks
Per diem and demurrage are calculated by plain code, in whole cents, by calendar day in the port's time zone — America/New_York, never whatever zone the server happens to run in — instead of UTC, with unit tests on the daylight-saving edges. An agent will be allowed to explain that number. It will never be asked to produce it.
Provenance on the record
A container carries the source of its last free day and the moment that source was refreshed, plus a data source and a confidence for the record as a whole. Every board row already comes back with that source and that refresh time attached. That is what turns "cite your evidence" from a promise into something the interface can enforce — for the one date worth the most money. The cut-off and the free return date do not carry their own source yet.
History nobody edits Planned
The event tables are in the schema and append-only by design: a container event keeps the raw payload of whatever sent it, a load event keeps its source, its actor and its coordinates. Nothing writes to either one yet — the board only reads. The file you want the day a line bills you for four days of per diem you did not have the box is a table waiting for its first row.
Who may approve what
Dispatching, approving an invoice and approving a settlement are already separate permissions on an explicit role matrix, not scattered checks, and the middleware that enforces one is written. No endpoint calls it yet, because there is nothing operational to dispatch or approve. An agent will inherit a role; it will not get one of its own.
Tenant isolation
Every operational table is behind Postgres row-level security and fails closed: no tenant set, no rows. An agent reading through the same boundary cannot see another carrier's operation, because the database will not show it one. How the isolation works.
Audit trail Planned
The audit table is in the schema, with an actor type for AI and a before/after diff on every change. Nothing writes to it yet. Until something does, no agent gets to change anything — those two facts are the same decision, in that order.

QuestionsStraight answers

What buyers ask about the AI

Is any of this running today?

No. Not in a pilot, not behind a flag, not for one friendly customer. Our status page lists the agents as not monitored, because there is nothing there to monitor — and it will keep saying that until there is.

Can an agent invent a last free day?

It is being designed so that it cannot state one that is not on the record. The last free day on a container already carries its source and the moment it was refreshed, so a suggestion will either cite that field or it does not get made. If the field is empty or stale the agent has to say so rather than guess a plausible Thursday. That rule is easy to write and hard to keep, which is exactly why the evidence columns went into the database before the agents did.

Which model will it use?

More than one, routed by task: small models for extraction and classification, something stronger for planning a day or pricing a lane. Which providers, on what contract, at what cost to you: Not decided yet. Whoever ends up processing your operation gets named in the privacy policy before it happens, not after.

Will our operating data train somebody's model?

No. Your loads, rates and customer history are the only real advantage a carrier has, and the commitment is that they stay inside your own tenant and never train a model that serves anyone else. There is nothing to enforce today because nothing is running; the same commitment is written into the privacy policy, with the contracts marked as outstanding.

Can we turn one off? Can we turn one up?

Off is where every agent starts. Raising autonomy per account and per lane is planned, and it is a decision an owner makes after watching one work — nothing promotes itself, and no autonomy level ever reaches the list of things no agent does on its own, further up this page.

What does it cost?

The agents are the reason DrayBase is being built, so they are not going behind an upsell tier — putting them there would mean selling the old TMS first and the improvement second. Whether heavy use carries a fair-use cap, and where that cap sits: Not decided yet. Nothing is metered today because nothing is running. The pricing page has the model and the placeholders.

When?

No date. We are not going to put a quarter on a slide for software that has to be right at 4am with a box on its last free day. What is being built next, and in what order, is on the roadmap.

Early access

Tell us which of the six you would switch on first

The order these get built in is not settled, and the carriers on the waitlist are the people we are going to ask. If your week is per diem, you will get Free Time before you get Pricing. Tell us where you run and what hurts.