On October 1, 2025, AI Tinkerers San Francisco ran a mini-hack with LiquidMetal and Vercel called Agents That Buy & Sell. I entered solo and took first place.
My agent is a flipper. It scans listings from three marketplaces, prices each one against what that item usually sells for, buys the underpriced ones within its budget and books the expected profit. Every buy and every skip comes with a written reason, so you can watch it think.
Why I built it
The theme asked for agents that trade, and flipping is the cleanest version of that: buy low, sell higher, and every decision has a dollar value anyone can check. An agent that spends money has to earn trust fast, so I made mine show its work. Each listing gets a score, a decision and the rule behind it, right there in the log.
What it does
Here is one real scan, run from the repo's own code: 15 listings across eBay, Craigslist and Facebook Marketplace. The agent bought nine for $2,370 of its $5,000 budget and skipped six, and it says why for each one. The listings are simulated, as they were on demo day. Generating them let me show the whole loop live without API keys or anti-bot walls.

How it works
The agent is one TypeScript application on LiquidMetal's Raindrop platform: three services and three stateful actors. A public Hono API router takes a scan request, asks the scraper service for listings, the valuation service for scores and the decision actor for a verdict. The decision actor hands each purchase to a transaction actor, which books purchases, resales and profit, and an inventory actor, which tracks what the agent owns. Four SmartBuckets hold the listings, price history, transactions and inventory.
Valuation is four weighted scores, each 0 to 100: where the price sits in the item's historical range (40%), how far below retail it is (25%), scarcity words in the title such as "limited" or "discontinued" (20%), and the price against the item's average sale (15%). The decision actor then buys only if the margin is at least 20%, the profit is at least $50, the price fits the remaining budget and it has never bought that listing before.
The hard calls
Simulate the market, keep everything else real. Scraping live marketplaces means API keys, login walls and anti-bot defenses, and that fight would have eaten the hackathon. So the scraper generates realistic listings and everything downstream of it is real code with real tests. A live feed replaces one service; real sold prices replace one table.
Rules a judge can read. The buy decision is four plain checks. Every buy shows the profit and margin that justified it, and every skip names the check that failed.
State lives in actors. The budget and the list of purchased listings sit in a stateful actor that saves to storage, so a second scan can't buy the same listing twice.
Where it stands
It's a hackathon build. Every component has its own tests: 206 in Vitest, and 200 pass today. The 6 failures sit in one integration-test file whose stand-in actor storage is missing a method the actor now calls. The demo-day deployment is gone, but the code runs; the scan above came straight from it.
A real version needs two things: live listings and real sold prices. The price table covers five product families, so everything else gets a default resale of $500. That's how an $80 iPad Pro scored a perfect 100 above. And the API resets the budget to $5,000 on every scan, so the balance doesn't carry between runs yet.