Hackathon · Dwelly Real-World Agents Hackathon · London 2026
Hamyway City
Always acting is dangerous. Always escalating is useless.
An AI agent for delivery desks that reads a messy case, works out who owns the decision, and takes one safe next step or hands the case to a person.
People's Choice - Real-World Agents Hackathon 2026
Voted by the participants and the audience after the demos at Dwelly's Real-World Agents Hackathon in London on 10 October 2026.
- Event
- Dwelly Real-World Agents Hackathon, London
- Result
- People's Choice
- Stack
- TypeScript, Next.js, Claude, TypeSafe Jev, ElevenLabs, three.js
- Track
- Delivery and Logistics
- Team
- Anson, Arvin, Min and Lu Min
Why it matters
A delivery desk sits between the customer, the carrier and the shop, and owns almost none of the decisions: dispatch books, the shop refunds, the carrier investigates. The work is coordination, and it goes wrong in familiar ways: a reply promises a refund nobody approved, takes a side when the scan and the customer disagree, or answers a legal threat that a person should have read. At the hackathon, unseen cases arrived at the code freeze with too little time to answer them by hand. Ours answered all 30 on its own in under two and a half minutes, for $2.42.
How it works
The agent reads a case and acts on it, or stops for a person.
Case folder
Emails, portal messages, call notes
text · PDFs · images · audio
Read the case
Records apart from claims
Claude Sonnet 5.5
- who is who
- what was promised
Found 2 open promises
TypeSafe Jev
Five seats, twelve yes or no questions
problem type · clash score
Problem: safety risk
Plan
Act, ask, hand over, wait or call
Claude Opus 5.5
Safety gate
Judges each message on its own
send < 0.3 · hold · stop ≥ 0.8
- hard rules in code
- risk scored by Claude
Safety check passed (risk: low)
Sandbox outbox
Recorded, never called delivered
one retry · other channels
Sent a message to Dispatch
Decision card
A person decides in one read
why it stopped · options
A person needs to decide
Desk Caller
Phones the person the plan named
ElevenLabs · WebRTC · their language
[spoken in Spanish]
Promise check
Every promise, before it is made
gate rules, then Jev · 2.5 s
I can't promise that.
Decisions we made
Every message is judged on its own
Hard rules in code come first: no asking for door codes or PINs, no recipient the case never names. Then each message, not the case, gets a risk score for promises, personal details and safety advice. Below 0.3 it is sent, up to 0.8 it waits for a person, above that it is stopped, and a message the check could not score waits too. The thresholds live in the playbook, not in a prompt, so a desk lead can change how careful it is.
Trade-off. Every case waits for one more Claude call before anything is sent. Jev would have been quicker and cheaper, but its scores were not calibrated against our thresholds, so the check stayed on Claude.
Stopping is an answer
When a person has to decide, the agent stops and writes a decision card: why it stopped, the two or three facts the decision turns on, and what each option would send. Legal, regulator, police or press action always goes to a person, enforced in code. In the last run of our own eval, on 48 cases, it sent nothing in the 5 cases where a person had to decide, and escalated none of the 38 where a message was the answer.
Trade-off. Each card is work for a person in the middle of a shift, so the agent only stops where the playbook says a person must decide.
Voice goes through the same gate
A driver who cannot type leaves a voice note, and when a call is the right move the agent places one in the browser, in the caller's language. What is said becomes a claim in the case, and any promise the voice agent wants to make is checked by the hard rules of the gate and then by Jev within 2.5 seconds, or refused with a fixed sentence. Giving the speech model each case's own references and names cut word errors on reference-heavy messages from 22.0% to 5.1%, across 14 messages in three accents.
Trade-off. The case only runs again after the call ends, which takes 30 to 150 seconds, so during a call the agent works from what it knew before it.
Photos
Gallery
The full engineering is on GitHub.