Keep — an autonomous recall agent for your household

Track: Taskmaster · Gemini 3.7 Flash · Google ADK · Cloud Run · Live: https://keep-web-216652108713.us-central1.run.app

A recall on something you own is announced to a government database, not to you. Keep registers your possessions once, then works without you. No chat interface, anywhere.

The agents

Steward Owns the household. Delegates, decides when to act.
Cataloguer VIN, photo or typed model number → a registry entry.
Watchman Decides whether a recall actually covers one of your things.
Claimant Gets the remedy: drafts, sends, escalates, closes.

Every hour, with nobody watching

  1. Trigger. Cloud Scheduler fires a Cloud Run Job. No user, no request, no session.
  2. Pull. Three live federal feeds — CPSC, NHTSA, openFDA — fetched concurrently.
  3. Narrow. A pure, unit-tested prefilter scores every possession against every notice and cuts thousands of pairs to a handful. It never flags anything.
  4. Adjudicate. Watchman reads that shortlist one pair at a time at thinking_level: HIGH and returns a verdict, a confidence and a reason. It never sees the whole feed.
  5. Claim. On a match, Claimant drafts a letter citing the specific campaign and sends it.
  6. Re-enter. Each claim records when it should next be touched. The next sweep climbs a rung: consumer line → compliance, citing the statute → the regulator.
  7. Log. Every step appends to a Firestore event log. The interface is a pure fold over that log, so the picture and the truth cannot drift apart.

The hard part: false alarms

A household owns a Yeti Rambler tumbler. CPSC 26712 recalls the Goal Zero YETI 3000X, and the notice really does say YETI. Flag that tumbler and the owner learns the alerts are noise.

So steps 3 and 4 are split and neither may act alone. The prefilter's rule is one sentence: an exact identifier, or brand and model agreeing, or a distinctive model number alone — a lone brand match never qualifies. Every rejection is logged with its reason and shown with the same weight as a hit. A test asserts twenty real decoys produce zero false positives.

Technologies and data sources

Gemini 3.7 Flash on Vertex AI · Google ADK · Cloud Run, Cloud Run Jobs, Cloud Scheduler, Firestore, Cloud Build, Secret Manager, Cloud Trace.

CPSC product recalls, NHTSA campaigns via vPIC VIN decode, openFDA food and drug enforcement — all live, all free. Every recall ID shown is checkable on the government's own site. Nothing is seeded.

The interface is an isometric cutaway of the house: "things happened while you were logged off" is the honest rendering of an asynchronous agent. Time of day comes from the event timestamps, so a 02:00 sweep is drawn into a dark, lamplit house. Register something yourself from the panel on the left — twenty presets across the three feeds, six of them meant to be rejected, with the expected outcome printed before you press.

Lessons learned

  • Don't let the model do what a rule can do, and don't let the rule decide. Splitting the matcher is what makes the behaviour explainable, cheap, and defensible.
  • A rejection has to be a real output. Ours produced no events at first, so the system's best property was invisible.
  • An unreachable model is not a verdict. On a quota error the pair is left unjudged for the next sweep, never written down as cleared.
  • Independent agent calls should not run in sequence. Running them concurrently took a sweep from 173 seconds to 2.

Scope, stated plainly

One hardcoded household, no auth. Claim recipients are redirected to a builder-controlled inbox — an agent that mails strangers on a schedule is not something to enable by accident. NHTSA campaigns are scoped to make/model/year, not to an individual VIN, and the agent says so rather than over-claiming. Statute citations come from a fixed table, never the model.

Built With

Share this project:

Updates

Submission history