back

work/streetwise/

Streetwise

Four AI agents that find shops nearby, collect quotes, block hidden fees and place the order

Solo (Team SOLOX): agents, messages, maps, payments · 2026

PythonFetch.ai uAgentsAgent Chat ProtocolASI1 LLMOpenStreetMapLeaflet
Streetwise: Four AI agents that find shops nearby, collect quotes, block hidden fees and place the order

Manual work before

To buy a few things locally, a buyer walks to a shop or calls around to ask what is in stock and what it costs, then does it again at the next shop. Hidden packing fees and closed shutters show up only at the counter.

What it automates

  • -Finding open shops nearby
  • -Asking each shop for a quote
  • -Checking quotes for hidden fees and wrong totals
  • -Placing and confirming the order
  • -Collecting the agent charge

The workflow

  1. triggerThe buyer types a shopping list in ASI:One, or scans the QR sticker on a shop.
  2. step 1The Shopper Agent turns free text or Hinglish into an item list with the ASI1 LLM.
  3. step 2The Store Locator Agent finds real open shops on OpenStreetMap around the buyer's live location, widening 500 m → 1 km → 2 km until it has 3.
  4. step 3Each shop's Merchant Agent quotes from that shop's own price list.
  5. step 4The Trust Agent blocks hidden fees, wrong totals and closed shops, then builds up to 3 options: cheapest, nearest, one shop.
  6. step 5The buyer picks one; the shop owner taps YES or NO.
  7. step 6The shop's agent pays a small per-order agent charge in FET on the Fetch.ai testnet, and the Shopper Agent checks it on-chain.
  8. outcomeOne chat replaces the walking and calling. The buyer gets a Verified Receipt; the owner's YES is the only manual step.

status Built for Fetch-A-Thon 3.0. All four agents tested end to end locally; prices and orders are demo data.

In short

  • -Prices, totals and fee checks are plain code. The LLM only turns the buyer's text into an item list, so it can't make up a number.
  • -Typed messages between agents: ShopSearch → ShopList, QuoteRequest → QuoteList, CheckQuotes → Verdict, OrderRequest → OrderResult.
  • -Live location through a one-time link that expires after 30 minutes, or a pasted Google Maps pin.
  • -Agent charge through Fetch.ai's AgentPaymentProtocol: a real 0.002 FET transfer on the Dorado testnet, verified on-chain. The code refuses any other chain.

Architecture

Four kinds of uAgents talk in typed messages. The Shopper Agent is registered on Agentverse with a mailbox, so buyers reach it from ASI:One. Shops come from OpenStreetMap; quotes, checks and payments stay in code.

System designEvery agent talks in typed messages. The LLM only reads text; maps, prices, checks and payments are code.
PEOPLESTREETWISE AGENTS · UAGENTS (PYTHON)EXTERNALchatShopSearchsearchquotes ·ordersCheckQuotesYES / NOpayschargeBuyerASI:One chat · or a shop'sQRShop ownerYES / NO screenShopper AgentASI1 LLM → item list ·options · receiptStore Locator Agent500 m → 1 km → 2 kmMerchant Agentsone per shop · own pricelistTrust Agenthidden fees · totals ·closed shopsOpenStreetMapNominatim · real shops +hoursFetch.ai testnetdorado-1 · agent charge
  • user
  • ai
  • service
  • guard
  • external
  • call
  • ← scroll →
  1. 01Buyer chats in ASI:One (Agent Chat Protocol) or scans a shop's QR
  2. 02Shopper Agent reads the item list (ASI1 LLM; keyword parser as fallback)
  3. 03Store Locator Agent searches OpenStreetMap: 500 m → 1 km → 2 km until 3 shops
  4. 04Merchant Agents quote from each shop's price list
  5. 05Trust Agent blocks bad quotes and builds up to 3 options
  6. 06Buyer picks; shop owner taps YES / NO on the owner screen
  7. 07Shop's agent pays 0.002 testnet FET; the Shopper Agent checks it on-chain and sends the Verified Receipt

Decisions

+ The LLM only reads the item list; prices, totals and fee checks are code- Let the model quote and add up the order  A model can invent a number. The buyer's money should never depend on that.
+ One Merchant Agent per shop, quoting from that shop's own price list- One central agent holding every shop's prices  Each shop keeps control of its stock and prices and confirms its own orders.
+ Ripple search: 500 m → 1 km → 2 km until there are 3 shops- One fixed search radius  Busy markets get the nearest shops; quiet areas still get enough options.
+ Free OpenStreetMap search (Nominatim), held to 1 request per second- A paid maps API  No key and no bill for a hackathon build; the rate limit respects the free service.

Failure handling

The LLM is off or returns a bad list

A keyword parser reads the list instead (longest words first, so "peanut butter" isn't also "butter").

OpenStreetMap search fails

One retry, then the demo shops in shops.json, so the chat still works offline.

A quote hides a fee, has a wrong total or the shop is closed

The Trust Agent blocks it before the buyer sees it.

The scanned shop is closed or misses items

Nearby open shops are searched instead, so the QR still helps.

The owner doesn't answer

No tap within 60 seconds means the order is not confirmed.

Payment pointed at the wrong chain

The code refuses any chain other than the dorado-1 testnet.

Numbers

4

Agent roles

500 m → 2 km

Search rings

≤ 3

Options shown

cheapest · nearest · one shop

0.002 FET

Agent charge

testnet, no money value

Next

  • ○ Real shop prices once shops join
  • ○ Owner dashboard (Next.js + Supabase)
  • ○ Saved shop data for Delhi NCR so search doesn't depend on a free service