Inspiration

Food banks run on volunteers and donated inventory, coordinated by one exhausted ops manager. The people who keep the pantry open are often 70+, on flip phones, with no appetite for another app. The interface had to be a text message.

What it does

PantryPilot is a Good Neighbor Agent that runs pantry operations over SMS.

  • Volunteers check open shifts, book (“I can help Saturday morning”), cancel, or ask what they are signed up for. The Volunteer Agent looks them up by phone, resolves relative dates, and writes the booking through a typed tool.
  • New volunteers register by texting “Hi I’d like to volunteer.”
  • Staff log donations and distributions in English (“Received 300lbs canned goods from Trader Joe’s”). Low stock triggers outbound staff alerts before anyone opens a dashboard.
  • Sunday evenings the Report Agent reads the week’s logs and coverage and writes the ops summary a director actually wants. Numeric fields are type-checked; anything the model cannot source comes back null, not invented.

How we built it

FastAPI + a Twilio webhook (or the dashboard demo panel) → AWS Strands Agents SDK → Claude Haiku 4.5 on Amazon Bedrock. Three specialized Strands agents — Volunteer, Inventory, Report — act only through typed @tool functions (SQLite locally, DynamoDB in production, SMS). Sender-aware routing distinguishes volunteer vs staff. Demo mode needs zero cloud credentials for messaging; agents still run live on Bedrock. An AgentCore runtime entry point lives in agentcore/agent.py.

Architecture diagram: pantrypilot-architecture.svg

Challenges we ran into

Ambiguous staff texts (“we distributed 180 meals”) do not map to a SKU — the agent should ask, not guess. Report-agent hallucinations on meal counts were stopped with prompt constraints plus server-side coercion to number-or-null. Shift boards went empty after a week; upcoming Tue/Thu/Sat slots now top up on startup.

Accomplishments that we're proud of

A volunteer can book Saturday by sending one sentence. The shift board ticks up in real time because the agent wrote the row. Staff can restock from a loading dock with a text. The weekly report refuses to invent a number.

What we learned

Community logistics is a routing problem: who is texting, what they meant, which tool is allowed to fire. Keep SMS readable. Never let the model publish a statistic the database did not provide.

What's next for PantryPilot

A real pantry pilot with Twilio, bilingual replies from the volunteer language roster, and an AgentCore deploy for the runtime.

Built With

  • amazon-bedrock
Share this project:

Updates

Submission history