fixRAgent  · one page · maintenance photo triage
AR Logic LLC · fixragent.com · legal@fixragent.com

fixRAgent triages a maintenance photo: what it is, how urgent, who to call, what to say right now.

Triage, not diagnosis. We claim the routing, not the answer. One engine behind a free web door and an API door; below is one real Triage Profile and the payload behind it.

The Triage Profile — one photo, one real call

No photo is shown on this sheet: the photo behind this Triage Profile is a user upload, held under a licence that covers processing only, so the Triage Profile's structure is shown with the engine's own words and coordinates.

What the engine looked at

  1. 01Furnace[676, 237, 1000, 824]
  2. 02Air Handler[336, 264, 680, 796]
  3. 03Ductwork[0, 0, 350, 999]

Each box is the engine's own [ymin, xmin, ymax, xmax] for this photo on a 0–1000 scale; nothing is listed that it did not return.

WHAT IT IS

Gas Furnace and Air Handler

In the photo: Gas furnace and air handler unit in mechanical room

Nothing is named as broken.

URGENCY

WHENEVER

Sound, cosmetic, or not part of the building. Nothing to send anyone out for. Add it to the next visit, or leave it as it is.

WHICH TRADE

No trade to call — there is nothing here to fix.

SAY THIS TO YOUR TENANT NOW

I've had the photo looked at and nothing is wrong with it that shows up. There's no work owed here. If the Gas Furnace and Air Handler starts behaving differently, send me another photo and I'll look again.

No fault shows in this photo — no trade to call. If you notice something a photo can't catch — a noise, a smell, a drip that comes and goes — add it to the description and send the photo again.

HOW SURE THIS IS

Five of five reads agreed.

The same photo was read five times, independently.

Each read looks at your photo on its own. The count is how many of them landed on the same answer about a fault.

engine-v2-vote-1.0.0 · v1.1-2026-09-11 · engine-v2.deep.gemini-3-5-flash-lite.a1_rubric_v11.n5 · 2a0a447e-9ef1-4ec2-bde0-46ef5e7088bb

The shape — the same fields, every call

is_building_assetasset_typeasset_categoryphoto_subjectreport_photo_agreementfault_detectedfault_visible_in_photofault_summaryfault_classesseveritytiercriterion_1_firedtier_forced_byvisible_wiringwater_near_electricalsafety_hazardhazard_detailtrade_requiredconfidenceresident_explanation

Every reply carries all of these under core, in this order; the payload on the right shows a subset of them with this call's values.

The payload — one fixed JSON shape, every call

{
  "diagnosis_id": "2a0a447e-9ef1-4ec2-bde0-46ef5e7088bb",
  "engine_version": "engine-v2-vote-1.0.0",
  "config_id": "engine-v2.deep.gemini-3-5-flash-lite.a1_rubric_v11.n5",
  "agreement": { "mode": "deep", "n": 5, "k": 5, "decided": true },
  "core": {
    "is_building_asset": true,
    "asset_type": "Gas Furnace and Air Handler",
    "asset_category": "HVAC",
    "fault_detected": false,
    "fault_classes": [],
    "severity": "P4",
    "tier": "WHENEVER",
    "criterion_1_fired": false,
    "tier_forced_by": null,
    "trade_required": null
  },
  "callback_url": "/api/outcome?diagnosis_id=2a0a447e-9ef1-4ec2-bde0-46ef5e7088bb"
}

Abridged: 10 of the 20 core fields, values verbatim from the call on the left. The full shape, field by field, is at fixragent.com/docs. The urgency word is assigned by the server from a fixed decision table, never taken from the model. Your developers map this to your work-order fields.

The API door

curl -X POST "https://fixragent.com/api/triage?config=deep" \
  -H "Content-Type: application/json" -H "x-triage-key: $TRIAGE_DEMO_KEY" \
  -d "{\"image\":\"$(base64 -w0 photo.jpg)\",\"mimeType\":\"image/jpeg\"}"

Same engine, headless. A diagnosis_id and a callback_url come back with every triage; tell us what it turned out to be and that answer joins the record. Keys are issued by hand today — ask at fixragent.com/docs.

The pilot offer

Send us last month's 25 closed work orders. We triage them blind. You compare.

You already hold the answer key: what each one turned out to be, who went, and when. We send back a tier, a trade and a say-this line per photo, without seeing your closeouts. The comparison table is yours either way.

To take it up: email legal@fixragent.com with how many work orders and which month. A person answers; nothing is automated on our side.

What it does not do — said here rather than discovered later

A direct Buildium connection is proven only in our own Buildium test account, needs Buildium Premium, and is not open to any manager account yet; for any other PMS or CMMS, your developers map our JSON to your work-order fields. This API keeps no photo bytes, only a hash of the photo; the web app stores a photo only when a person opts in. The model provider, Google, keeps prompt, response and photo for 55 days.

Measured, 13 Sep 2026. The Triage Profile above is one real photo, read that day by the engine production serves: the deep configuration, whose id is stamped in the payload above; five reads, 4.7 s. The fast configuration read the same photo three times and answered WHENEVER in 4.2 s. No row was stored for either call. Both timings are one call each, from one machine, and are not a service level. The photo is one of the 226 photos in the evaluation corpus (STANDING-FACTS.md); nothing records who took this one, which is why it is not shown (see above); photo sha256 a4232950f74c029d219eacff3d0f84ad86744c3c584b3c2fdafb49afbfeed913.

Educational AI triage. Gas, water near electrics and exposed wiring are licensed-trade jobs.