acilox / solutions / frontline
🛎️ AI Copilots & Automations

Frontline

AI front-desk for the trades that turns an inbound call or text into a booked, dispatched job — triaging the problem, quoting a transparent price band from the business's own price book, and assigning the nearest qualified tech by an explainable scorer, with a non-skippable safety-escalation branch that never mistakes a gasket for a gas leak.

100%
Safety recall
0
False safety escalations
all
Quote line items shown
<60s
Demo to value, no API keys

Why this exists

The trades run on the phone, and the phone is the leak: home-services SMBs miss a large share of inbound calls because the owner is under a sink or on a roof, most callers won't leave a voicemail, and the ones who do rarely get called back — they call the next result instead. A missed call is worth hundreds to thousands of dollars, and the after-hours emergency — two-to-three times normal value, low competition, whoever-answers-first-wins — is the richest and most-missed of all. Answering services take a message; they can't read the calendar, price the job, or dispatch a tech, so they don't actually recover the revenue. Frontline does: it triages the call, quotes a band straight from the business's price book with every line item shown, picks the nearest qualified tech with a scorer that shows its work, and books the slot — while screening every transcript for gas, electrical, carbon-monoxide, and flooding hazards first, because a missed safety flag is the one error this domain never tolerates. It ports Tend's marketplace-grade pricing and matching pillars down to a single owner-operated business.

How it's wired together

inbound

gas · CO · fire · flood

auto

hitl

voice

SMS

web form

triage
trade · severity
whole-word safety scan

safety escalation
instruct + owner ping

price book
structured trade → lexical + vector · RRF

quote
capped multipliers · line items

dispatch
hard filter + explainable scorer
skill · ETA · reliability

schedule
soonest open slot

ServiceScope
typed contract
trade · quote band · dispatch plan
hazard score · confidence

policy engine
first-match-wins

book + notify
customer & tech

owner-ping review
tentative slot

audit log
hash-chained

Frontline architecture overview

How it works, end-to-end

  1. Triage with whole-word, high-recall safety detection

    A transparent classifier labels trade, symptom, and severity and screens for gas / electrical / CO / flooding on whole-word boundaries — so a paraphrased 'gas odor' escalates while a 'gasket', a customer 'shocked by the price', or a 'black countertop' never do. Each call also carries a continuous hazard score that the eval separates the safe population from the dangerous one on.

  2. Transparent, cited quotes that reconcile to the penny

    The price is the price-book base rate times capped urgency and after-hours multipliers, retrieved by a structured-trade filter fused with lexical and vector search. Surcharges are marginal-multiplicative and the multiplier cap is its own line item, so the labor lines sum exactly to the band — never a single invented number, and never a total that doesn't add up.

  3. Explainable dispatch with a real skill factor

    A hard-constraint filter (skill, active, travel radius, capacity) narrows the roster; a linear scorer ranks the survivors with every factor's contribution exposed — ETA over Haversine distance, primary-trade vs cross-trained skill, reliability, spare workload, prior-customer. The chosen tech comes with the score margin over the runner-up, the explainability surface a dispatcher will actually trust.

  4. Real scheduling and a typed ServiceScope

    The agent offers the chosen tech's actual open slots, soonest first, and consumes the slot on booking. Everything it decides lands in one typed ServiceScope — trade, cited quote band, dispatch plan with contributions, hazard score, confidence — the single artifact the policy engine routes on, the console renders, and the eval scores.

  5. Policy-gated autonomy with safety-aware review

    A first-match-wins policy decides auto-book vs owner-ping: safety flags, no-tech-available, low confidence (threshold read from settings), and after-hours routine jobs all hold for a human. And approval is safety-aware — confirming an owner-ping books the held slot, but approving a safety escalation acknowledges it for emergency handling and is never silently converted into a normal booking.

  6. Exposed as MCP tools for any assistant

    A read-only MCP server exposes the triage classifier, a call's full ServiceScope, the price book, and the tech roster to any MCP host — so another agent can pre-screen a transcript for hazards before anything is booked. Run it with `frontline mcp`.

The choices that matter

Decision

Safety recall is earned over an adversarial corpus

Recall of 1.0 means nothing measured over two easy cases. The corpus deliberately mixes paraphrased hazards (a 'gas odor', a CO alarm, a burst-pipe flood) with look-alike false-positive traps ('shocked by the price', a worn 'gasket'), and the eval gates false escalations at zero and reports the hazard separation margin. Whole-word matching is what lets recall and precision both hit their marks.

Curating an adversarial set and whole-word rules is more work than a substring check. It's the difference between a safety claim you can stand behind and one you can't.

Decision

Ported from Tend, scoped to one business

The quote engine (capped multipliers, line items, bands) and the dispatch engine (hard-constraint filter plus linear explainable scorer) are Tend's marketplace pillars applied to a single owner-operated shop. The reuse is the pitch — 'built on a marketplace-grade matching engine' — not duplication.

Some marketplace machinery is heavier than a lone business strictly needs. It's what lets the same shop scale its roster without a rewrite.

Decision

Quotes must reconcile, not just look itemised

Additive surcharge lines silently disagree with a stacked or capped multiplicative total. Making surcharges marginal-multiplicative with an explicit cap line means the labor line items sum exactly to the band a customer is quoted — the kind of correctness a contractor's dispatcher checks by hand.

Marginal-multiplicative math is fiddlier than base-times-factor. A quote that doesn't add up is worse than fiddly.

Decision

Mock-first, deterministic, runnable on a clean clone

Telephony, FSM, SMS, and maps connectors and the LLM all default to deterministic mocks, so the whole thing runs end-to-end in under a minute with zero API keys and zero telephony cost. The real-time voice tier (Twilio Voice + STT) drops in behind the same interface when a key is set.

The text simulator trails a live voice agent until the upgrade is wired. It locks the platform shape and lets any evaluator reproduce it instantly.

Built on

Python 3.12FastAPI · UvicornSQLAlchemy 2.0 · AlembicPostgreSQL 16 · pgvectorRedis · RQPydantic v2 · structlogHTMX · Jinja2Haversine geo · PyYAMLAnthropic SDK · Twilio (voice tier)