Design principles
Approval-first: the agent never spends your money
Autonomous agents are impressive in demos and terrifying in a market where a wrong booking costs a week's income. So we drew a hard line: the agent proposes, the human commits.
There is a version of this product that runs entirely on its own — reads the lot, picks the buyer, books the truck, sends the messages. It would demo beautifully. It would also be unusable, because the first time it sent a commitment to a buyer at the wrong price, the user would never trust it again.
So FreshRoute Agent is built on a single non-negotiable rule: no action that touches money, reputation, or a third party happens without an explicit tap.
The workflow, with the gates marked
Lot intake → automatic
Quality analysis → automatic
Market comparison → automatic
Buyer outreach → APPROVAL REQUIRED
Transport booking → APPROVAL REQUIRED
Delivery tracking → automatic
Payment confirm → APPROVAL REQUIRED
Everything upstream of outreach is analysis: parsing, grading, pricing, ranking. Analysis is cheap and reversible, so the agent runs ahead freely. Everything downstream is commitment, and commitment is gated by an approve/reject card in the chat with the full terms visible — buyer, price, quantity, transporter, cost, expected net.
An agent that asks permission at three points is more useful than one that asks at none, because it's the only one anyone will actually let near a real trade.
Approval is only credible if it's auditable
A confirmation dialog that vanishes is not a control. Every action — by the agent, the user, or the system — is written to an action log with a timestamp and an actor. The drawer is one tap from the conversation, so "what did it do, and when, and who said yes" is always answerable after the fact.
Approval required · buyer outreach
- Buyer
- Al-Madina Traders, Lahore
- Reliability
- 4.8 / 5 · 41 trades
- Offer
- Rs 400 / kg · Grade A
- Transport
- Refrigerated · Rs 18,000
- Expected net
- Rs 302,000
Logged to the action log with timestamp and actor.
That log turned out to matter for a reason we didn't anticipate: disputes. When a buyer claims the agreed grade was different, the record of what was proposed and approved settles it in seconds.
Honest status beats silent fallback
The same principle applies to the AI itself. When the model is unavailable, the app does not quietly substitute a guess. A badge in the chat header always reads one of three states:
| State | What it means |
|---|---|
| LIVE | Real model responses through the server-side proxy. |
| DEMO | Deterministic local calculation — the arithmetic still holds, the language understanding is reduced. |
| AI ERROR | The call failed. Shown in the conversation, not buried in a console. |
Degrading loudly costs some polish. It buys the one thing an agent handling someone's harvest income cannot do without.