Inspiration
A third of all food produced is wasted while 1 in 8 people go hungry. The food exists; the need exists — what's missing is a coordinator fast enough to beat the spoilage clock. Today that's a stretched volunteer making frantic phone calls. Groups like Food Rescue US prove the model works, but a human still runs every step. We asked: what if the coordinator itself was autonomous?
What it does
FoodBridge watches for surplus-food donations and runs the entire rescue on its own: it judges food safety (USDA danger-zone rules), picks the best shelter (need, nutrition for children, fairness, capacity, cold-chain), dispatches a driver and self-heals when one declines, confirms delivery, and sends the donor a tax receipt with Good Samaritan Act protection. It contacts a human for exactly three things — a borderline safety call, a rescue about to fail, or an oversized donation — as a real email/Slack/Discord ping with one-click Approve/Reject. Every rescue is counted three ways: meals delivered, money saved, CO₂ prevented. In one demo shift: 350 lbs rescued → 291 meals, $1,037, 875 lbs CO₂ — with a single human decision.
How we built it
A Strands Agents SDK agent genuinely drives the loop: the model calls bound tools (check_food_safety, rank_recipients, estimate_impact, consult_guidelines) and decides what to invoke, in what order. Agentic RAG: a curated knowledge base (USDA guidance, the Bill Emerson Good Samaritan Act, Big-9 allergens, date labels) that the agent retrieves from — every escalation carries a citation. Cross-run memory learns driver reliability; a JSONL decision trace makes every step auditable; an animated dashboard, a conversational ask, and an interactive add command let judges drive it themselves. It runs on Amazon Bedrock (with a Bedrock AgentCore Runtime entrypoint included) or a free local model — and a deterministic offline mode runs with zero setup.
Challenges we ran into
Making the LLM the agent without making it the arbiter: food-safety rules stay hard-coded guardrails, and the model reasons through the same tools. Small local models sometimes leaked tool-call JSON or wandered in loops — we added output sanitization, hard per-call timeouts, and a deterministic fallback so a flaky model can never break a rescue. Honesty took work too: the banner only claims "LLM-driven" when credentials actually exist.
Accomplishments that we're proud of
Genuine tool-calling (the agent chose to consult the guideline knowledge base unprompted), grounded escalations with legal and safety citations, real-world delivery (Gmail/Discord with one-click decisions), 21/21 tests passing on both Python 3.9 (offline) and 3.12 (live SDK), and a demo anyone can run in one command with zero accounts.
What we learned
The best agent UX is silence: five rescues handled invisibly and one well-argued escalation beats any dashboard. RAG isn't just for chat — citing USDA rules inside an autonomous decision is what makes a coordinator trust it. And graceful degradation (LLM → deterministic) is what turns a demo into a product.
What's next for FoodBridge
Deploy the AgentCore background runner for a pilot food bank, real SMS driver replies, vector embeddings for the knowledge base, and multi-site donation splitting — plus an impact ledger nonprofits can show funders.
Built With
- amazon-bedrock
- amazon-web-services
- bedrock-agentcore
- boto3
- html5
- javascript
- json
- ollama
- python
- rag
- smtp
- strands-agents
Log in or sign up for Devpost to join the conversation.