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.
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.
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.
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.
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.
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.
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.
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.