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
Log in or sign up for Devpost to join the conversation.