Project Info
Inspiration
Produce procurement is still surprisingly manual. A restaurant, co-op, or bulk buyer may know they need 500 tomatoes, but they still have to find suppliers, compare prices, check inventory, split orders, and coordinate payments. We saw this as a coordination problem that autonomous agents are well-suited to solve, as working with small farmers to reduce waste, produce can be optimized in bulk. USDA's Economic Research Service (ERS) estimates that about 30 percent of food in the United States goes uneaten at the retail and consumer level. Promoting locally grown and organic food, we wanted to build a system where a buyer could simply state their intent and let agents handle the discovery, optimization, and transaction workflow.
What it does
AgriBroker is an autonomous produce procurement marketplace built on the Fetch.ai ecosystem. A buyer can ask for produce in natural language, such as "I need 500 tomatoes under $250." AgriBroker discovers seller agents, gathers inventory and pricing information, computes the cheapest feasible split across suppliers, coordinates payment, and returns a single transparent receipt. In live agent mode, the orchestrator communicates with a Registry agent and multiple Farmer agents to source the order through agent-to-agent messaging.
How we built it
We built AgriBroker in Python using Fetch.ai uAgents, ASI, and Agentverse. The system consists of an orchestrator agent, a registry agent for seller discovery, and farmer agents that manage inventory, pricing, invoices, and receipts. We implemented a deterministic optimizer that selects the lowest-cost supplier combination, integrated Stripe Checkout for buyer funding, added simulated Stripe Connect-style payouts for sellers, and created onboarding tools that allow new farms to join the marketplace without modifying the orchestrator.
Challenges we ran into
The biggest challenge was balancing reliability with live integrations. ASI, Agentverse, Stripe, Business Agents, and agent networking all introduce external dependencies that can fail during a demo. To address this, we built a deterministic local workflow and layered live integrations on top of it. We also had to make agent coordination visible to judges, so we added progress updates and an agent trace that shows discovery, quoting, purchasing, and receipt generation across multiple agents.
Accomplishments we're proud of
We're proud that AgriBroker demonstrates a complete intent-to-action workflow. A buyer can start with a simple natural-language request, and the system autonomously discovers suppliers, gathers quotes, optimizes an order split, coordinates payment, and returns a final receipt. We also successfully implemented live Registry and Farmer agent communication, farmer self-onboarding, Stripe Checkout integration, and visible agent traces that make the multi-agent architecture easy to understand.
What we learned
We learned that building agentic commerce is about more than making agents communicate. The system also needs to be reliable, transparent, and auditable. Designing clear protocols, deterministic optimization logic, fallback mechanisms, and user-facing receipts was just as important as integrating ASI and Agentverse. We also gained experience coordinating multiple independent agents within a marketplace workflow.
What's next
Our next steps are to deploy the agents in a hosted environment, enable fully automated payment confirmation, expand beyond tomatoes into broader produce catalogs, add seller reputation and quality metrics, support delivery and logistics workflows, and make seller onboarding completely self-service. The long-term goal is to create an autonomous procurement network where buyers can source produce from a large ecosystem of independent farm agents.
AgriBroker
Autonomous produce procurement for the Fetch.ai ecosystem.
AgriBroker lets a buyer ask for produce in natural language, then uses agents to discover sellers, gather quotes, compute the cheapest split, fund the order, pay selected farms, and return a single itemized receipt.
Demo prompt:
I need 500 tomatoes under $250.
Expected result:
- Farm A supplies 200 tomatoes at $0.40 each.
- Green Valley supplies 300 tomatoes at $0.42 each.
- Total cost is $206.
- The buyer stays under the $250 budget.
Why It Matters
Bulk buyers should not manually compare suppliers, check stock, split orders, and send separate payments. AgriBroker turns one procurement intent into an agent-run marketplace workflow:
- Understand the buyer's request.
- Discover farms selling the requested item.
- Ask each farm for a live quote.
- Optimize the cheapest feasible split.
- Fund the order through the orchestrator.
- Pay the winning farms.
- Return a combined receipt.
The current repo includes the local deterministic core plus uAgent entry points. The local flow is intentionally runnable before Agentverse, ASI:One, and live testnet payment credentials are configured.
Architecture
| Component | Role |
|---|---|
| Orchestrator | Buyer-facing agent. Parses intent, asks for quotes, optimizes, coordinates payment, returns receipt. |
| Registry | Tracks which agents sell which catalog items. |
| Farmer agents | Hold inventory, quote prices, invoice orders, confirm paid purchases. |
| Sunny Acres | Demo verified-brand seller. Use Flockx Business Agent when available; local config includes a code fallback. |
| Optimizer | Pure greedy optimizer for per-unit pricing with no fixed shipping cost. |
| Payment layer | Buyer funds orchestrator; orchestrator pays selected farms. Uses simulated Stripe locally, with optional testnet FET as a Fetch-native stretch. |
Repo Structure
agents/
protocols.py Shared uAgent message models
optimizer.py Pure cheapest-split optimizer
farm_state.py Farm inventory and pricing behavior
workflow.py End-to-end local procurement flow
llm.py ASI:One intent parser with local fallback
payments.py Testnet/simulated payment helpers
registry_agent.py Registry uAgent
farmer_agent.py Parameterized farmer uAgent
orchestrator_agent.py Structured orchestrator uAgent
config/
farms.json Demo farms, stock, prices, seeds, ports
scripts/
run_local_demo.py Local tomatoes procurement demo
tests/
test_optimizer.py
test_llm.py
test_workflow.py
docs/
api-notes.md Fetch integration notes and verification checklist
Quickstart
Create a virtual environment:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
Run tests:
pytest
Run the local demo:
python scripts/run_local_demo.py
You should see a transcript showing intent parsing, quote collection, optimization, buyer funding, farm payouts, and receipts.
Preview the ASI-style response without Agentverse:
python scripts/preview_asi_response.py
Run the demo readiness check:
python scripts/check_demo_ready.py
Print every Agentverse profile, handle, README, and run command:
python scripts/print_agentverse_profiles.py
ASI:One And Agentverse
The ASI:One entry point is:
python -m agents.asi_chat_agent
This starts a Chat Protocol-compatible uAgent with mailbox=True and publish_agent_details=True. Keep this process running while testing from ASI:One.
Supporting Registry and Farmer agents also publish Agentverse metadata and README profiles. See docs/agentverse/setup.md for the full profile checklist.
Setup steps:
- Create
.envfrom.env.exampleif needed. - Add
ASI_ONE_API_KEYwhen you want live ASI:One intent parsing. - Keep
AGRIBROKER_INTENT_MODE=local,AGRIBROKER_BUYER_PAYMENT_MODE=simulated, andAGRIBROKER_FARM_PAYMENT_MODE=simulatedfor the first ASI:One test. - Run
python -m agents.asi_chat_agent. - Open the Agent Inspector URL printed in the terminal.
- If logs say
Agent mailbox not found, that is expected before the first setup. In Inspector, click Connect and choose Mailbox. - Open the Agent Profile in Agentverse.
- Set the public profile:
- Name:
AgriBroker - Handle:
@agribroker - Description:
Autonomous produce procurement agent that discovers farms, compares tomato quotes, optimizes split orders, and returns payment receipts. - Tags:
procurement,produce,marketplace,payments,Fetch.ai
- Name:
- Click Chat with Agent from Agentverse.
- Send:
I need 500 tomatoes under $250.
Expected ASI:One response:
AgriBroker found 5 sellers for tomatoes.
Quotes:
- Farm A: 200 @ $0.40
- Farm B: 400 @ $0.45
- Farm C: 100 @ $0.50
- Sunny Acres: 300 @ $0.48
- Green Valley: 300 @ $0.42
Optimal split:
- Farm A: 200 tomatoes = $80.00
- Green Valley: 300 tomatoes = $126.00
Receipt:
- Total: $206.00
- Budget: $250.00
- Status: confirmed
- Buyer payment: Stripe Checkout (simulated)
- Farm payout mode: Stripe Connect (simulated/local demo)
Troubleshooting:
- If the agent cannot bind to
0.0.0.0:8200, run it from a normal terminal instead of a restricted sandbox, or changeORCHESTRATOR_PORT. - The app automatically points Python at the
certificertificate bundle. If Agentverse mailbox logs still showCERTIFICATE_VERIFY_FAILED, fix local Python certificates. On macOS python.org installs, run/Applications/Python 3.13/Install Certificates.commandif present. You can also run:
export SSL_CERT_FILE="$(python3 -c 'import certifi; print(certifi.where())')"
python -m agents.asi_chat_agent
Payment Model
The intended marketplace payment flow is:
- Buyer approves the optimized plan.
- Buyer funds the order through Stripe Checkout.
- Orchestrator acts as a neutral purchasing agent for that order.
- Orchestrator pays or marks payout to each winning farm.
- Farms confirm payment, decrement inventory, and return receipts.
- Orchestrator returns one combined buyer receipt.
Buyer payment and farm payout are separate modes:
AGRIBROKER_BUYER_PAYMENT_MODE=stripe # simulated | stripe
AGRIBROKER_FARM_PAYMENT_MODE=simulated # simulated | testnet | stripe_connect
Buyer funding (Stripe Checkout). For the organizer-preferred Stripe path, set AGRIBROKER_BUYER_PAYMENT_MODE=stripe. With no STRIPE_SECRET_KEY, AgriBroker creates a simulated Checkout reference like cs_simulated_... and displays dollars in the receipt. With a real test key, it can create a hosted Stripe Checkout Session.
Farm payouts. These can remain simulated for demo reliability, use testnet FET as a Fetch-native settlement stretch, or use Stripe Connect transfers to pay sellers in fiat. The Connect model is: the buyer funds the platform via Checkout, then the platform transfers each seller's share to their Stripe connected account (acct_...). Enable it with:
AGRIBROKER_FARM_PAYMENT_MODE=stripe_connect
STRIPE_CONNECT_TRANSFERS_ENABLED=true
Connect payouts are off by default and demo-safe: a real stripe.Transfer.create only runs when STRIPE_SECRET_KEY is set and STRIPE_CONNECT_TRANSFERS_ENABLED=true. Real payouts also require genuinely onboarded connected accounts. The workflow now carries each farm's stripe_connected_account_id from config/farms.json into invoices, but the seeded acct_demo_* ids are placeholders. Replace them with real Stripe test connected accounts before enabling live Connect transfers. If the network/faucet/Stripe fails during judging, simulated farm payout keeps the workflow alive while making the status explicit.
Useful payment setup commands:
python scripts/print_agent_addresses.py
python scripts/check_testnet_payment_ready.py
python scripts/check_stripe_ready.py
When using a real Stripe test key, run the local Checkout return page server before clicking Checkout links:
python scripts/serve_checkout_pages.py
Stripe redirects successful test payments to http://127.0.0.1:8787/checkout/success, which displays an AgriBroker order confirmation page. Use Stripe test card 4242 4242 4242 4242 with any future date and CVC.
Fund the printed orchestrator wallet before switching to:
AGRIBROKER_FARM_PAYMENT_MODE=testnet
Keep AGRIBROKER_FARM_PAYMENT_MODE=simulated until the orchestrator wallet is funded and at least one testnet payout has been verified.
Onboarding A Farmer
Farmers can self-onboard into the local marketplace without hand-editing JSON:
python scripts/onboard_farmer.py --name "Green Valley" --item tomatoes --stock 300 --price 0.42 --floor 0.38 --no-stripe
The wizard builds a valid farm entry, validates the full config before writing, appends the farm to config/farms.json, and prints the command to bring that seller agent online:
python -m agents.farmer_agent --name "Green Valley" --registry <REGISTRY_ADDRESS>
By default this uses simulated Stripe onboarding and creates a demo connected account id like acct_demo_green_valley. Real Stripe Express onboarding is gated separately from transfers:
STRIPE_CONNECT_ONBOARDING_ENABLED=false
STRIPE_CONNECT_TRANSFERS_ENABLED=false
Set STRIPE_CONNECT_ONBOARDING_ENABLED=true only when using a Stripe test key and you want a real hosted onboarding link. A future web form can reuse agents/onboarding.py; the current MVP prints the run command instead of launching and supervising farmer processes.
Current Demo Data
| Seller | Stock | Unit Price | Notes |
|---|---|---|---|
| Farm A | 200 | $0.40 | Cheapest but limited stock. |
| Farm B | 400 | $0.45 | Main filler seller. |
| Farm C | 100 | $0.50 | Backup supplier. |
| Sunny Acres | 300 | $0.48 | Flockx Business Agent target with code fallback. |
| Green Valley | 300 | $0.42 | Self-onboarded seller with simulated Stripe account. |
For 500 tomatoes, the optimizer picks Farm A first and then Green Valley.
Running uAgents Locally
The structured uAgent files are ready for the next integration step:
python scripts/run_local_bureau.py
That starts the registry plus all configured farm agents in one local uAgents Bureau. To run individual agents instead:
python -m agents.registry_agent
python -m agents.farmer_agent --name "Farm A"
python -m agents.farmer_agent --name "Farm B"
python -m agents.farmer_agent --name "Farm C"
python -m agents.orchestrator_agent
python -m agents.asi_chat_agent
Before live use, replace demo seeds in config/farms.json and .env with real secret values. Do not commit real seeds or API keys.
The orchestrator currently exposes a structured ProcurementRequest message. The ASI:One Chat Protocol adapter should call the same workflow core after the current hosted Chat Protocol setup is confirmed.
Environment
Copy the example file:
cp .env.example .env
Important values:
ASI_ONE_API_KEY: enables ASI:One intent parsing.ASI_ONE_BASE_URL: ASI:One chat completions endpoint.ASI_ONE_MODEL: model name used for intent extraction.AGRIBROKER_INTENT_MODE:local,asi, orauto.AGRIBROKER_DISCOVERY_MODE:localusesconfig/farms.json;agentasks a live Registry agent.AGRIBROKER_REGISTRY_ADDRESS: Registry agent address used whenAGRIBROKER_DISCOVERY_MODE=agent.AGRIBROKER_BUYER_PAYMENT_MODE:simulatedorstripe.STRIPE_SECRET_KEY: Stripe secret key for Checkout Sessions and Connect transfers.STRIPE_SUCCESS_URL/STRIPE_CANCEL_URL: redirect URLs for Checkout.AGRIBROKER_FARM_PAYMENT_MODE:simulated,testnet, orstripe_connect.STRIPE_CONNECT_TRANSFERS_ENABLED:trueto allow real Stripe Connect farm payouts (defaultfalsekeeps them simulated).FETCH_NETWORK:testnetfor this hackathon demo.FETCH_EXPLORER_TX_URL: base URL used when real tx hashes are present.- Agent seeds: replace demo seeds before deployment.
Agent Discovery Mode
The ASI chat agent defaults to local discovery so the judge-facing demo stays reliable:
AGRIBROKER_DISCOVERY_MODE=local
When the Registry and Farmer agents are running, switch to live agent discovery:
AGRIBROKER_DISCOVERY_MODE=agent
AGRIBROKER_REGISTRY_ADDRESS=<registry agent address>
In agent mode, farmers register themselves with the Registry. The orchestrator asks the Registry who sells tomatoes, sends QuoteRequest messages to those farm addresses, collects QuoteResponse messages, sends purchase orders, pays invoices, and waits for receipts.
To test live agent discovery locally:
- In terminal 1, start the Registry plus all farm agents:
python scripts/run_local_bureau.py
- Copy the printed
Registry: agent1...address. - In terminal 2, export:
export AGRIBROKER_DISCOVERY_MODE=agent
export AGRIBROKER_REGISTRY_ADDRESS=<registry agent address>
python -m agents.asi_chat_agent
- In ASI:One, ask:
I need 500 tomatoes under $250.
If anything goes sideways during live judging, switch back to:
export AGRIBROKER_DISCOVERY_MODE=local
Agentverse Profile Files
Agentverse README/profile text lives in:
docs/agentverse-profile.md: buyer-facing AgriBroker chat agent.docs/agentverse/registry.md: seller discovery registry.docs/agentverse/orchestrator.md: structured procurement orchestrator.docs/agentverse/farm-a.md,farm-b.md,farm-c.md: seeded farm agents.docs/agentverse/sunny-acres.md: verified storefront candidate and Business Agent bridge.docs/agentverse/green-valley.md: self-onboarded seller.docs/agentverse/setup.md: launch and mailbox checklist.
Build Roadmap
- Local deterministic demo with simulated payment. Done.
- Structured local uAgent quote and invoice flow. Started; local Bureau runner added.
- ASI:One Chat Protocol entry point. Added.
- ASI:One intent parsing. Local fallback added; live API key path available.
- Stripe buyer funding. Checkout Session path added; real key/webhook confirmation still optional.
- Testnet FET farm payouts. Farm payout mode and fake-ledger tests added; live funding still needs wallet setup.
- Agentverse deployment.
- Flockx Business Agent participation or verified storefront fallback.
Manual Test Prompts
Use these after every major change:
I need 500 tomatoes under $250.
Expected: confirmed $206 plan with Farm A and Green Valley paid.
I need 1500 tomatoes under $1000.
Expected: partial plan with a 200 tomato shortfall and no payment executed.
I need 500 tomatoes under $100.
Expected: over-budget result and no payment executed.
Judge Story
AgriBroker is built to show "intent to action":
- The buyer states an intent.
- Agents autonomously discover and compete.
- The orchestrator chooses the cheapest feasible allocation.
- Funds move through the agent network.
- The buyer receives a transparent receipt.
The key differentiator is that the multi-agent architecture is necessary: the order cannot be optimally fulfilled by blindly calling one API or one seller.
Analysis
View
Metric
- 6
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- PythonIn code
1 of 1 appear in the indexed code.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
273 KB
Source files
58
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
Ai-Hackathon-2026-Berk/AgriBroker
62 files · 278 KB · @ 9326d6a
Structure
Application logic
17 files · 27%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- Python78%
- Markdown22%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
requirements.txt
pypi · 6- pytest
- python-dotenv
- requests
- stripe
- uagents-core
- uagents[all]
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
Feature verification
Agent trace visible to judges (discovery, quoting, purchasing, receipts)Verified
we added progress updates and an agent trace that shows discovery, quoting, purchasing, and receipt generation across multiple agents
Claimed on Devposthigh confidenceagents/workflow.py:631— _format_agent_trace_lines filters transcript lines like 'Registry returned', 'Sent QuoteRequest', 'Sent PurchaseOrder' into a visible Agent trace blockagents/asi_chat_agent.py:178— build_reasoning_messages streams step-by-step progress messages into the chat during a live run
ASI:One Chat Protocol entry pointVerified
The ASI:One entry point is python -m agents.asi_chat_agent ... starts a Chat Protocol-compatible uAgent with mailbox=True and publish_agent_details=True
Claimed on readmehigh confidenceagents/asi_chat_agent.py:307— create_asi_chat_agent constructs an Agent with mailbox=True, publish_agent_details=True, and a ChatMessage protocol handler
Budget/inventory guardrails: partial fulfillment and over-budget handlingVerified
Manual Test Prompts: 1500 tomatoes under $1000 -> partial plan with shortfall and no payment; 500 tomatoes under $100 -> over-budget result and no payment executed
Claimed on readmehigh confidenceagents/workflow.py:144— run_procurement checks split.shortfall or split.over_budget and calls no_buyer_funding, skipping farm settlement entirelytests/test_workflow.py:37— test_over_budget_does_not_pay_farms and test_shortfall_does_not_pay_farms assert no payment executes in these cases
Buyer payment coordination via Stripe Checkout (simulated and real)Verified
integrated Stripe Checkout for buyer funding
Claimed on Devposthigh confidenceagents/payments.py:173— create_stripe_checkout_session calls stripe.checkout.Session.create when STRIPE_SECRET_KEY is set, else falls back to simulated_stripe_buyer_fundingagents/workflow.py:169— run_procurement calls fund_order_from_buyer using the configured buyer payment mode
Deterministic cheapest-split optimizerVerified
computes the cheapest feasible split across suppliers
Claimed on readmehigh confidenceagents/optimizer.py:44— optimize_split greedily sorts quotes by unit price and allocates quantity, tracking shortfall and over_budgettests/test_optimizer.py— dedicated test file exercises the optimizer
Farmer self-onboarding without editing the orchestratorVerified
created onboarding tools that allow new farms to join the marketplace without modifying the orchestrator
Claimed on Devposthigh confidenceagents/onboarding.py:105— onboard_farmer builds a validated farm entry and appends it to config/farms.json without touching orchestrator codescripts/onboard_farmer.py— CLI wizard referenced in README for self-onboarding, e.g. Green Valley exampleconfig/farms.json:62— Green Valley farm entry exists in config matching the self-onboarded seller example in the README
Live Registry and Farmer agent-to-agent messagingVerified
In live agent mode, the orchestrator communicates with a Registry agent and multiple Farmer agents to source the order through agent-to-agent messaging.
Claimed on readmehigh confidenceagents/agent_network.py:105— run_procurement_via_agents sends WhoSells to the registry, QuoteRequest to each farm address, then PurchaseOrder/PaymentSent, using ctx.send_and_receiveagents/registry_agent.py:41— Registry agent handles RegisterCatalog and WhoSells messagesagents/farmer_agent.py:65— Farmer agent handles QuoteRequest, PurchaseOrder, PaymentSent messages and registers with the registry on startup
Natural language buyer intent parsingVerified
A buyer can ask for produce in natural language, such as 'I need 500 tomatoes under $250.'
Claimed on readmehigh confidenceagents/llm.py:51— parse_buyer_intent_locally uses regex to extract qty, item, and budget from free text deterministicallyagents/llm.py:75— parse_buyer_intent_with_asi_one calls ASI:One chat completions API to extract intent as JSON when ASI_ONE_API_KEY is set
Seller discovery across multiple farmsVerified
AgriBroker discovers seller agents, gathers inventory and pricing information
Claimed on readmehigh confidenceagents/workflow.py:120— run_procurement filters farms.json entries that have the requested item and gathers a quote from eachagents/registry_agent.py:47— who_sells handler on the Registry uAgent returns SellerList of addresses for a live agent-mode discovery
Simulated Stripe Connect-style farm payoutsVerified
added simulated Stripe Connect-style payouts for sellers
Claimed on Devposthigh confidenceagents/payments.py:304— create_stripe_connect_transfer only calls real stripe.Transfer.create when STRIPE_SECRET_KEY set AND STRIPE_CONNECT_TRANSFERS_ENABLED=true, otherwise simulated_stripe_transferagents/payments.py:466— settle_farm_payment routes stripe_connect mode payments through create_stripe_connect_transfer
Single transparent itemized receiptVerified
returns a single transparent receipt
Claimed on readmehigh confidenceagents/workflow.py:452— format_procurement_response builds a combined receipt with quotes, optimal split, total, budget, status, and payment lines
Sunny Acres verified Business Agent live quote integrationVerified
Sunny Acres: Demo verified-brand seller. Use Flockx Business Agent when available; local config includes a code fallback.
Claimed on readmemedium confidenceagents/business_seller.py:29— register_pending_reply/resolve_pending_reply implement async correlation for a live Business Agent chat quoteagents/asi_chat_agent.py:238— fetch_business_quote sends a chat message to the configured business_seller_address and awaits a reply, falling back to the seeded catalog price on timeout
Agentverse deployment / published agent profilesCode-supported
We built AgriBroker in Python using Fetch.ai uAgents, ASI, and Agentverse... successfully implemented live Registry and Farmer agent communication... Agentverse deployment (roadmap item 7)
Claimed on Devpostmedium confidenceagents/agentverse_profiles.py:50— registry_profile_kwargs/orchestrator_profile_kwargs/farmer_profile_kwargs attach readme_path, publish_agent_details=True for Agentverse publishing, but actual deployment/registration on Agentverse can't be confirmed from static codeREADME.md— README roadmap item 7 'Agentverse deployment' is listed without a 'Done' marker, unlike earlier completed items
Testnet FET farm payouts (Fetch-native settlement)Code-supported
added simulated Stripe Connect-style payouts for sellers ... testnet FET as a Fetch-native stretch
Claimed on readmemedium confidenceagents/payments.py:412— send_fet_with_retries calls ledger.send_tokens with retries and falls back to simulated on failure; requires a live ledger/wallet which is not exercised in this static check
USDA food-waste reduction impact framingClaimed only
USDA's Economic Research Service (ERS) estimates that about 30 percent of food in the United States goes uneaten at the retail and consumer level.
Claimed on Devposthigh confidence
An AI agent derived these features from the project’s Devpost page and readme, then searched the code for each one. Verified features are backed by cited code; claimed-only features had no supporting code, which is not by itself proof a feature is missing.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.