Selected work Case study

Team prototype · Anthropic London Hackathon · November 2023

Agent of Death: a weekend agent and the failure that mattered

When someone dies, the job of closing their accounts falls to family. Every provider handles it differently. We built a prototype that does the finding and the drafting.

My role
Co-builder, team of four
Event
Anthropic London Hackathon, 4–5 November 2023
Team
Gerard Cardoso, Vinayak Athavale, matsoob, Uzair Minhas
Stack
Claude 2, Brave Search, Playwright, FastAPI, Next.js
Agent of Death prototype: three subscriptions found in a bank statement, Amazon Prime, SATYPLUS and Midjourney, each listed with the status NEED_TO_CANCEL and a Cancel action, above a field for adding a subscription by hand.

Frame from the team's demo recording by Gerard Cardoso. Watch the demo on Devpost

The problem

People hold dozens of subscriptions and online accounts. After a death, a relative has to discover which ones exist and then work out how each provider wants to be told: a form, a support email, a phone line, a live chat. It is slow work at a hard time.

The prototype takes a bank statement, extracts the recurring payments, and for each one either finds a support email and drafts the message, or returns the simplest set of steps to cancel. A browsing agent that could log in and cancel directly was built as an experiment and was not reliable enough to switch on.

My contribution

This was a team build and Devpost credits all four of us. My code in the public repository is on the onboarding step: a name entry on the main page whose value is passed into the prompts sent to Claude. The statement parser, cancellation chain and browsing agent were written by my teammates.

One decision

The support-email step was allowed to return nothing. If the address was not present in the search results, the model had to say so, and the product fell back to step-by-step cancellation instructions for that provider.

The team added this after seeing the failure. Our write-up put it plainly: Claude 2 was “very good at hallucinating emails”. A drafted message to an invented address looks like a finished task, and a grieving user would only find out when nothing happened.

The lesson about evaluating an agent

This failure only appears on inputs where the correct answer is “there isn't one”. A test set made only of providers with a published support email would never have surfaced it.

I now treat that as a rule for any agent evaluation. Include cases where the right output is an abstention, score them separately, and check that any extracted value appears in the retrieved source. If every case in the set has an answer, the set can't tell you what the agent does when there isn't one.

Evidence

The Devpost entry lists the team, the stack and the challenges, and carries a two-minute demo recording. The repository is public. The entry also says what was not finished: the browsing agent is described there as experimental and not live.

Check it yourself