Most agricultural AI is trained on massive, single-crop industrial fields — think Midwest corn. Point that same AI at the farms that actually feed most of the world — a half-acre plot in Kenya growing maize, beans, and cassava mixed together — and it falls apart. We built AgriSentinel to fix that, as our entry in the "Fortified Enterprise Fleet" category.
The core idea
Instead of one model trying to do everything, AgriSentinel is five specialized Gemini agents coordinated by a Gemini 3.5 orchestrator:
Plot Disaggregation Agent — untangles intercropped micro-plots via constrained spectral unmixing.
Cloud Piercing Agent — reconstructs optical imagery from cloud-penetrating SAR radar during monsoon season.
Stress Sentinel Agent — flags drought/disease stress days before it's visible, via evapotranspiration anomaly detection.
Carbon Verification Agent — estimates soil carbon change remotely using a physics-informed model, for carbon-credit verification.
Farmer SMS Agent (Gemma) — compresses everything above into one plain-language SMS a farmer can read on a basic phone.
The orchestrator decides, per plot per cycle, which agents are actually relevant given live conditions — cloud cover, season stage, whether the plot is enrolled in a carbon program — and runs them concurrently.
What surprised us technically
Model-region mismatches are real and easy to miss. gemini-3.5-flash wasn't available on Vertex AI's regional us-central1 endpoint for our project — it needed the global endpoint instead. The error message was clear once we read it carefully, but it's the kind of thing you only find by actually deploying, not by reading docs in the abstract.
Free-tier quotas will quietly sabotage a deployed service. Our first version used a plain Gemini API key and hit the AI Studio Free Tier's ~20-requests/day cap almost immediately, since one orchestration cycle makes 4-5 calls. Moving to Vertex AI — billed against our actual GCP project instead of a shared free-tier bucket — fixed this and also let us drop the API key secret entirely in favor of the Cloud Run service account's built-in credentials.
Sequential agent calls add up fast. Four sequential Gemini calls per cycle meant ~47 seconds end to end. Since our four core sub-agents are independent — different sensor modalities, no shared state — we parallelized them with a thread pool and cut that to ~14-17 seconds.
Async infrastructure needs defensive error handling, not just happy-path code. A single malformed test message sent through the Pub/Sub console crashed our push-subscription handler — and because push subscriptions retry any non-2xx response indefinitely, one bad message became an infinite retry loop flooding our logs. The fix: always acknowledge (200) even on a bad payload, and log the failure instead of throwing.
Being honest about scope
Two of our five agents ship with real, complete architectures but untrained or simplified models, given our build window — the SAR-to-optical translator (a Pix2Pix-style U-Net) is implemented and runs, but wasn't trainable to production accuracy without a paired dataset pipeline we didn't have time to build; the carbon estimator uses a closed-form physics approximation rather than a full gradient-penalized PINN. We documented both clearly in the README rather than overstating them — we'd rather show an honest, well-architected fleet than a fragile one that looks more finished than it is.
Try it
Live service: Cloud Run
Code: GitHub
Built by Arpan Ghosh and Asmita Karmakar, team Korvanta AI.
(This post was written by team Korvanta AI to document how we built AgriSentinel for the All Things Agentic Hackathon.)





Top comments (0)