Inspiration
The problem at most food banks is coordination. Food arrives with different shelf lives. Every household has its own allergies and dietary restrictions. Volunteer availability shifts day to day. Someone has to balance all of it at once, and while they do, perishable food quietly spoils.
That's exactly the kind of repetitive work the Agents for Humans theme targets. So I built an autonomous Food Bank Operations Agent for the Good Neighbor track.
What it does
The agent runs a community food bank's daily logistics end to end:
- Monitors inventory and flags items before they expire
- Matches food to families around their allergies and dietary restrictions
- Schedules deliveries by assigning available volunteers
- Notifies families, volunteers, and admins and reports honestly when a message didn't send
- Escalates to a human only for genuine judgment calls
How we built it
The core is a Strands Agents SDK agent backed by Claude Haiku 4.5 on Amazon Bedrock, with 21 custom tools across inventory, family matching, volunteer scheduling, notifications, and waste analytics. State lives in eight DynamoDB tables.
Each autonomous cycle begins with a triage tool that ranks what needs attention, expired items, imminent expiry, deliveries missing a driver, families never served, low stock and then the agent handles the routine work itself and escalates only the rest.
I deployed it to Amazon Bedrock AgentCore Runtime as an ARM64 container serving /invocations and /ping, with boto3 scripts for the ECR push and runtime creation, and OpenTelemetry wiring so traces land in CloudWatch. A Streamlit console provides the human view and can drive either a local agent or the live AgentCore runtime hosted publicly behind a password using a tightly scoped IAM user
Challenges we ran into
The agent emptied the shelves. Because the prompt rewards distribution, it gave away every item in one pass. I added a reserve policy: items about to expire are always offered, but a portion of the long-dated, shelf-stable stock is held back for families who arrive later in the week. Hosting the UI publicly was harder than building the agent. I first tried AWS App Runner and hit repeated silent failures, the container pulled fine, then died in 18 seconds with no logs. After forcing a diagnostic, I found the root cause: App Runner doesn't support WebSockets, which Streamlit depends on entirely. No config could fix it, so I moved the console to a platform that does and kept AgentCore for the agent itself.
Accomplishments that we're proud of
Production-minded from the start.** Least-privilege IAM scoped to a single model, table set, and runtime; CloudWatch traces via OpenTelemetry; a clean, installable package; and repeatable deploy scripts for ECR and AgentCore. An agentic loop. The agent triages priorities, matches food to families around allergies and dietary needs, assigns volunteers, sends notifications, and escalates to a human only when a genuine decision is required
What we learned
I learned to trust measured results over the model's own words. My demo reads the food bank's state back out of DynamoDB before and after each cycle and prints what actually changed, rather than echoing what the agent claimed it did.
What's next for Food Bank Operations Agent
Proximity-aware matching that routes by distance, richer dietary logic beyond category exclusions, and AgentCore Memory so the agent carries context across cycles.
Built With
- agentcore
- bedrock
- cloudwatch
- ecr
- iam
- pandas
- strands
- streamlit
Log in or sign up for Devpost to join the conversation.