Claude vs. Fiancé: LLM let loose on a raised bed. Tomato saga.

TL;DR: I let an LLM run one garden bed and my fiancée ran the other. I'm ahead on tomato count. She's ahead on tomato size. She has eaten several of hers. I have eaten none of mine and the frost is close. So naturally, I'm calling this a nail-biter.

Disclaimer: my fiancée hasn't read this yet. If I sound unusually generous about her gardening, that's strategy.

Intro

Have you ever been very confident about something, only to realize later that you were measuring the wrong thing?

This spring, we split the raised beds. She took one and grew tomatoes the way she always has: intuition, a hose, and years of knowing what she's doing. I took the other and made basically every decision by asking Claude first.

Essentially all the same variables: Same soil mix. Same tomato varieties: Costoluto Genovese, Cherokee Purple, and Early Girl. Same Zone 8b summer in Camas. The beds are only a few feet apart. The main difference was who was making the decisions. My bed also gets a little less sun on one side, because apparently even controlled experiments need an annoying confounding variable.

I started this because I wanted to learn more about growing tomatoes. Instead, I've mostly learned about evaluation. Ahhhhh why do I turn all my hobbies into work :|

It turns out a tomato plant is a pretty good way to discover problems with fully autonomous AI systems.

The setup

The whole thing runs on an ODROID (because ODROID was cheaper than raspberry pi lol) in the garage.

  Tapo cams (x2) ──RTSP──┐
  Soil probes 6" / 12" ──┤
  Temp + humidity ───────┤
  Weather forecast ──────┤
                         v
                     [ ODROID ]
                         │
              4 AM ──────┼──── ffmpeg ──> timelapse
                         │
                    Claude API
                         │
                   recommendation
                         v
                 [ Home Assistant ]
                         │
              constraint layer:
              - both probes under threshold
              - 45+ hrs since last water
                         │
                         v
                   Tuya valve ──> bed

I put soil probes at six and twelve inches because surface moisture and root-zone moisture disagree constantly, and only one of them is particularly useful.

The Tuya valve is just a dumb switch. It doesn't make decisions.

Every morning at 4 AM, the ODROID pulls the current sensor readings, grabs the latest frames from both cameras, adds the local forecast, and sends everything to the Claude API.

Claude comes back with a watering recommendation and, when something looks unusual, a note about what changed. Home Assistant handles the actual watering, but only after running the recommendation through a few hard constraints.

The constraint layer is probably the part of this system I put in as a safeguard. Like if the API goes down, the response is nonsense, or the model decides we're in the middle of a drought that doesn't exist, the constraints can still say no. Nothing in the loop depends on the model being right. It just needs to be useful often enough to help.

The cameras were partly for the fun of having a timelapse, but mostly because pictures preserve things that are hard to describe. Every decision has a visual record attached to it. Its also useful for Claude to judge whats happening with plants.

Curve Ball

By July, both beds had spotting on the lower leaves. Yellow halos. Concentric rings. Slowly moving upward.

Claude flagged this and asked me to look closely. I described what I was seeing and got a confident, nicely organized answer: early blight, probably Alternaria. Remove affected foliage, improve airflow, mulch to reduce soil splash. It also mentioned herbicide as another possibility.

The advice was reasonable.

I read more about aminopyralid, a herbicide that can survive composting and pass through livestock. It can cause symptoms in tomatoes that overlap with what I was seeing. Our soil DID contain dairy manure compost.

Without being sure, I could potentially be spending the next month applying fungicide to a bed with a herbicide problem. And the model couldn't decide which explanation was correct. And I could not either. Trouble in the garden.

So I ended up actually having to run a bioassay. Look it up, its fun(?).

Peas are a standard indicator for aminopyralid. They show characteristic damage at concentrations well below the point where tomatoes necessarily make the problem obvious.

So I planted peas in the suspect compost and another batch in known-clean potting mix as a control.

Then I waited.

They came up looking the same.

No obvious contamination.

So after doing a lot of research, it turns out, it could have been a simple water drainage issue. Nothing in my system was measuring it and there is no way for Claude to know we have compacted clay soil beneath our beds trapping water. It affected both of our beds and we we had enough time to re-do out beds so that saved that day but it did delay us in the season.

It was a Claude failure though that took me in wrong directions. You could say, the model was not….grounded hehehe.

The model was genuinely better than me at a few things.

First, it caught bad assumptions. I spent weeks pruning aggressively because I'd convinced myself that airflow was the big issue for tomatoes (thanks to tiktok algos I should say). Then But Claude convinced me that Camas summers are dry, not humid so I should ~cut back~ on the pruning. And my plants improved.

The useful part wasn't that Claude knew the answer. It was that it was willing to question the premise which I was pleasantly surprised by given it can be a sycophant.

Second, my ridge gourd developed interveinal chlorosis, which looks a lot like an iron deficiency if you know just enough plant pathology to get yourself into trouble. It wasn't iron. Again, it was overwatering. Claude got this right.

Third, it was awake at 6 AM to catch a rabbit problem we had using the Tapo pictures. That sounds stupid until you've watched a small garden problem turn into a large garden problem because you noticed it three days later. Rabbit repeller in, Rabbit problem out.

The scoreboard

The season isn't over, but here's where things stand.

My bed has more tomatoes. Not by a little. But none of them are ripe.

Her bed has fewer tomatoes, they're noticeably bigger, and she's been eating them for two weeks.

Going into this, I told the model I cared more about getting most produce when I started the project. I think it interpreted this as - I wanted more fruit rather than bigger fruit lol. And it optimized for exactly that. And frankly, it worked.

The problem is that I never told it how much I cared about when I got to eat them.

More fruit means the plant is spreading its energy across more fruit. Eventually that tradeoff shows up somewhere, and for me it showed up at ripening.

So now I have a bed full of green tomatoes and rising anxiety about frost :|

If frost holds off, I win on volume and it's not even close. I am watching you El Niño. But if frost comes early, I have a compost pile full of very well-researched, AI generated green tomatoes and she has a season's worth of BLTs lol.

Lessons

You can optimize a system beautifully against the metric you gave it and still lose because the metric you gave it wasn't the whole objective.

"More tomatoes" was the objective I asked it for. But "More ripe tomatoes before frost" was the objective I actually cared about. So yes, the evaluation metric matters.

And I’d keep the human bed as the control. Without her bed sitting ten feet away and growing tomatoes ‘normally’, I wouldn't have a very good idea whether any of this was actually working and would not have a yard stick to double check things.

Also, skip fish fertilizer. They are actually really good but man do they STINK. Sorry fish fertilizer.

Next

Will let you all know who won once frost hits later this year (2026).

There was also a whole side quest with bugs (10+ types of bugs and so much drama…like aphid infestation first which later got solved by assassin bug colonization which eat aphids. Interesting stuff like that). I will maybe write another article on it soon.

Further Reading

Grow Your Own Tomatoes and Tomatillos, OSU Extension EC 1333. This was our baseline: site prep, cultivar selection, pruning, harvest, and the rest, all written for our climate rather than the internet in general.

Aminopyralid Residues in Compost, OSU Extension. A good explanation of why this happens, and why tomatoes are useful indicators. Sensitive vegetables can be affected at extremely low concentrations.

Herbicide-Contaminated Compost and Soil Mix (PDF), OSU Extension EM9307. It has pictures of damaged plants, which was exactly what I wanted while staring at my own.

Herbicide Carryover in Hay, Manure, Compost, and Grass Clippings, OSU Small Farms. This is where I got the bioassay protocol.

Home Assistant docs, if you want to build the irrigation automation yourself. The soil-probe thresholds took the most tuning by far.

Tags: ai, gardening, evaluation, software, llm

Ashwin Ramadevanahalli

Engineer | Dog Dad

Next
Next

Making Better Decisions: Myths, Mindset, and Method