Take two photos of a thing — the agent checks it's real, prices it against the live market, lists it on eBay, talks to the buyers, and hands you a shipping label. Your only decision is one tap to approve the price range.
Inspiration
Everyone owns things they'd sell "if it weren't such a hassle" — pricing, writing the listing, then an inbox of lowballers and scammers. That middle is exactly what agents are for. And 2026 added a twist: AI-generated fake listings flooded marketplaces, so an agent that lists things FOR you must also prove the thing is real before it lifts a finger.
What it does
- Verify 2.0 — the anti-fake gate. Qwen3.7-VL examines 2–4 frames from a live capture: same physical object across viewpoints? A real scene — not a screen, a print, or an AI render? A confident fake is refused outright, with the reasoning shown.
- Acts on its own uncertainty. In the gray zone it doesn't guess — it asks for one specific extra shot ("tilt it and photograph the underside") and re-examines. The decision policy is a pure function with unit-tested boundaries.
- Prices with receipts. DashScope
forced_searchpulls live comps; the agent proposes a range. The human approves it — the one money decision in the flow. - Lists for real. One tap creates an actual eBay listing through the Inventory API — OAuth, category from taxonomy, item specifics auto-filled — and the live listing id comes back into the UI.
- Negotiates inside bounds. Buyers are ranked, scam patterns flagged, replies drafted. Counter-offers are clamped in code — never below your floor, never revealing it. The model suggests; the code enforces.
- Closes. A payout breakdown (sale minus the real marketplace fee) and a ready shipping label. Your next touch is a box.
The benchmark (measured, not asserted)
A labeled suite ships in the repo — including AI fakes generated with qwen-image, so the examiner is tested against its own model family:
| kind | cases | correct |
|---|---|---|
| ai (qwen-image renders) | 4 | 4/4 |
| screen re-shot | 1 | 1/1 |
| catalog re-shot | 1 | 1/1 |
| object mismatch | 1 | 1/1 |
| honest live captures | 7 | 7/7 |
7/7 fakes caught · 0/7 false blocks on real items · median verdict 5.4s · $0.057 per full run. It didn't start perfect: two AI renders passed at 0.95 confidence until the prompt switched from per-frame realism to cross-frame consistency — the viewpoint may change, the world may not. bun run bench reproduces everything.
How we built it
~1,000 lines of zero-dependency TypeScript (plain fetch, no SDK) as one Node.js web function on Alibaba Function Compute behind a custom domain. All intelligence is Qwen on Model Studio (DashScope intl): qwen3.7-plus VL as the examiner and pricing/triage brain, qwen3.6-flash for angle requests and the live buyer chat, qwen3.7-max for the weekly digest. Platform finding: enable_search: true alone is silently ignored — you need forced_search. Optional immutable evidence locker on OSS; every model call metered into a cost ledger.
Challenges
- A photo of a screen fooled single-frame verification ("a screen showing a real photo IS a real photo"). Fix: two frames while the camera moves, judged together for parallax and scene continuity.
- Letting a model negotiate safely: money limits live in TypeScript, not in the prompt — the floor physically can't be crossed or revealed.
- eBay sandbox quirks (Business Policies opt-in, required item specifics, duplicate detection) — all handled honestly in code.
What's next
Portable "proof of physical reality" badges other marketplaces can consume; ARKit parallax fusion (the production onlist app already captures it); negotiation memory across a buyer's messages.
Built With
- alibaba-cloud
- dashscope
- ebay-api
- function-compute
- qwen
- qwen-cloud
- typescript
Log in or sign up for Devpost to join the conversation.