-
-
Fieldhand: an autonomous agent fleet for crop intelligence. Google ADK, Gemini on Vertex AI, and Cloud Run.
-
The agent pipeline — Watchman, Diagnostician, Skeptic, Agronomist, Operations — plus a model-free policy gate and an audit ledger.
-
Same alarm, opposite answer — a harvested field gets no alert, a heat-stressed one gets a scout. The tell is the field's own history.
-
Four agents run every morning. The Skeptic's only job: prove the diagnosis wrong before anything costs money.
-
Fieldhand doesn't just find problems — it argues with itself before it costs you a thing. Works on any field on Earth.
Inspiration
A satellite can see that something's wrong with a crop, but it can't tell you what. It sees one signal — plants looking less healthy than they should — and that could be disease, drought, a field that was already harvested, or just a cloud on the wrong day. Every satellite ag tool alerts on that drop, and because most of those alerts are nothing, farmers learn to ignore them. A tool that cries wolf is worse than no tool at all. We wanted an agent that does what a good agronomist does: distrust the alert and try to prove it wrong before bothering anyone.
What it does
Fieldhand is a fleet of agents that checks a farm's fields from orbit every morning — nobody logs in. For each field worth looking at, four agents run in sequence: a Diagnostician reads the satellite evidence and proposes a diagnosis; a Skeptic attacks it, checking neighbouring fields and the field's own history in prior years to see if the alarm is real; an Agronomist decides whether treatment is even warranted and finds a legal spray window (wind, rain, temperature); and Operations turns the plan into work orders. Anything that costs money or leaves the farm stops at an approval queue and waits for a human. On real data it correctly refuses a false drought alarm on a harvested field, and acts on a genuine heat-stress signal by escalating a scouting task — from the same starting alert.
How we built it
Google ADK orchestrates the fleet — LlmAgent, SequentialAgent, and a LoopAgent wrapping a ParallelAgent for the Skeptic's two disconfirmation probes. Gemini 3.5 and 3.7 Flash on Vertex AI do the reasoning; Gemma handles the plain-language rewrite for growers. The sensing pipeline pulls free Sentinel-2 imagery from the Earth Search STAC catalogue and computes vegetation indices; Open-Meteo supplies weather. Everything runs on Cloud Run (three services), with Firestore for parcels, alerts, the approval queue, and an append-only audit ledger, Cloud Storage for imagery, and Cloud Scheduler + Pub/Sub driving the autonomous daily sweep.
Challenges we ran into
On Gemini 3.x, max_output_tokens is a combined ceiling over reasoning and visible output — budgets ported from another provider got eaten by thinking and returned truncated fragments with no error. Gemini also sends numeric tool arguments as strings ("$6,044"), which crashed the policy layer until we coerced at the tool boundary. The subtlest bug: season-relative history has to anchor to the scene's date, not today — comparing a June scene against late-August history gives exactly the wrong answer.
Accomplishments that we're proud of
The Skeptic. Given identical evidence, it reaches opposite, correct conclusions depending on whether a field's decline is unique to it — and it does that with arithmetic, not vibes, so it can't be talked out of its answer. And the whole autonomy story stops at a policy layer that is plain code with no model in it: even a wrong or prompt-injected agent physically cannot spend a grower's money.
What we learned
The interesting engineering wasn't making the agents smart — it was deciding where agents don't get a vote. Triage is deterministic code, the policy gate is model-free code, and the disconfirmation checks are arithmetic. The model does the judgement; everything with a correct answer stays out of its hands.
What's next for Fieldhand
Per-parcel rolling baselines to replace the per-crop constants, more crops and named diseases, and turning the drafted outbound actions (co-op messages, crew assignments) into real integrations behind the same approval gate.
Built With
- cloud-run
- cloud-scheduler
- cloud-storage
- fastapi
- firestore
- gemini
- gemma
- google-adk
- google-cloud
- next.js
- open-meteo
- pub/sub
- python
- rasterio
- react
- secret-manager
- sentinel-2
- typescript
- vertex-ai
Log in or sign up for Devpost to join the conversation.