Parts Oracle 🔧📊

A pricing oracle that catches mechanics overcharging. Other AIs pay it to ask "is this quote fair?" — and it proves every answer with receipts.


💡 Inspiration

I know cars. I've built OBD-II diagnostic tools, done my own repairs, spent real time around shops — and I've still stood at a service counter holding a $1,400 quote with no way to push back. If someone with automotive domain knowledge can't argue with a padded quote, most people have no chance.

The information gap is the whole scam: the shop knows what parts and labor cost. You don't. Nobody is watching repair prices systematically — so nobody can call out the markup.

When this hackathon asked for an autonomous agent that does real work on the open web, grounded in ground-truth sources, the fit was obvious. This problem doesn't need another chatbot with opinions about car repair. It needs an agent that watches the actual market — and can prove what it says.

⚙️ What it does

Parts Oracle is an autonomous pricing oracle. On a schedule, with no human in the loop, it:

  1. Monitors real auto-parts prices on retailer pages — every price saved with its source URL and retrieved_at timestamp
  2. Computes fair repair-cost ranges in ClickHouse
  3. Publishes cited fair-price reports to cited.md (Senso)
  4. Sells verdicts over x402 — to humans and to other agents

The fair range for a job is computed from really-retrieved data, never from a model:

$$\text{fair}{low} = \min(P{parts}) + R_{labor} \cdot h_{low} \qquad \text{fair}{high} = \max(P{parts}) + R_{labor} \cdot h_{high}$$

where $P_{parts}$ are live-retrieved parts prices, $R_{labor}$ is a published regional labor rate, and $[h_{low}, h_{high}]$ is the standard labor-hour range for the job.

Send it a \$1,255 repair quote → it returns: fair price ≈ \$510, these three line items are padding, this one needs a physical inspection — with the receipt behind every number.

The design rule that defines the project: the LLM only reads — it parses quotes. It is never allowed to price. Every dollar figure traces to a real retrieved row.

🏗️ How we built it

Data layer first, deliberately — it's the moat. Every row in ClickHouse carries provenance (source URL + retrieval timestamp). The seed dataset was gathered from live retailer product pages and published labor-rate sources, documented in a provenance manifest.

On top of that:

  • Render Workflows — the agent's spine: monitor → benchmark → publish as chained tasks with parallel per-job price checks
  • Claude (Anthropic) — extraction with an enum-locked schema: 17 canonical jobs + an honest "unmapped" bucket; structurally forbidden from inventing line items or prices
  • ClickHouse — price history + fair-range benchmarks
  • Senso / cited.md — the publishing adapter for cited reports
  • Composio — outbound notifications (Telegram)
  • x402 — the payment gate on the verdict endpoint

Five sponsor tools, each load-bearing. Every fragile integration lives behind a thin adapter with an honestly-labeled fallback.

🧗 Challenges we ran into

The honest one first: we're early in the build. The provenance-tagged data foundation is live; the full loop is specified — in an eight-phase plan with verify gates — but not shipped. We ran out of clock, not out of clarity.

Render signup failure: our card was repeatedly declined by the signup system itself. The Render judge directed us to build and record locally (documented in our repo), so we built on the Render Workflows SDK's local task server — deploy-ready the moment access unblocks.

Real data barely exists: genuinely public, per-job repair pricing is almost nonexistent — which is exactly why an agent that gathers its own, with provenance, deserves to exist. The scarcity is the business case.

📚 What we learned

  • "Grounded in real sources" is the hard part of agentic AI — and the part worth doing. Scraping is easy; provenance discipline is engineering.
  • Honesty can be structural, not aspirational: the model physically can't output a price, fallbacks label themselves, and unsupported judgments return no_data instead of a guess.
  • Design for failure on day one: adapters with honest fallbacks turned a sponsor-platform outage into lost hours instead of a lost project.

🚀 What's next

Finish the loop: scheduled cycles, the published report refreshing itself, and the demo we designed for — another agent paying ours over x402 for a cited verdict, live. Then widen the oracle beyond one vehicle's parts to the repair market broadly.

In an economy of agents, the most valuable thing to sell is an answer you can prove.

Built With

  • anthropic
  • claude
  • clickhouse
  • composio
  • fastapi
  • python
  • senso
  • x402
Share this project:

Updates