After I gave Claude a robot body, I started wondering why do robots need bodies? The world is full of connected gadgets - what if inputs and outputs were physically separate?
I also wondered why do robots need to react in real time? Could AI nurture slow real-world systems, like maintaining an aquarium, managing a hotel, or automatically ordering from Amazon Fresh based on what’s in my fridge1?
Frontier LLMs can do a lot of things they weren’t explicitly trained for. These are called emergent capabilities, and the yet-unused ones are called “product overhang.” Founders and PMs at the forefront of AI make bets on what’s going to emerge in 6-12 months and build for the future. To be first to know when AI starts crushing a task, they create “capability evals,” or tests that keep failing… until they don’t.
I wanted to see if Claude could grow food. If an LLM can keep a seedling alive, maybe it could maintain a car, help someone recover from surgery, restore a coral reef, or run a greenhouse on the way to Mars... all with cheap sensors and actuators that already exist.
Rigging up Farmer Claude
I gave Claude a water pump, a lamp, and a camera.
To grow my food, Fable needed a place to run and tools to call:
Raspberry Pi 4 - this is a tiny personal computer connected to the internet. I used it to run Claude Code, which calls the Fable model. The Pi’s storage allows Claude Code to save files at the end of each session, as well as read them every time it wakes up. (If it sounds familiar, I took the chassis off of Bubbles.)

Raspberry Pi is an entire personal computer running Linux, with internet access. You can connect a monitor, keyboard, and mouse, but I just let Claude (on my laptop) control it remotely, via terminal. To visually browse the file system, I ran Cyberduck on my laptop. Camera - lets Claude Code snap 5 megapixel photos or 1080p video.
Aquarium water pump & wifi smart plug - I plugged the water pump to the wall outlet through a wifi “smart plug” which lets Claude Code turn it on and off over wifi.
Grow lamp & wifi smart plug - same thing but for an indoor plant lamp.
To distribute the water, I planted the seeds in pots made of coconut husk fibers (“coir”), and put them at the edge of a slightly tilted tray. When Claude turns on the pump, the water flows down the tray, and the fibers wick up the water.
You can find the final snapshot of Farmer Claude’s agent files, transcripts, and more on github. Give the repo address to your coding agent (and this blog post for context) and have it investigate directly, check my claims, and look for more gems.
Making it hard on purpose
Two thoughts nagged at me:
What if this could be done by a simple timer (like every sprinkler out there)?
What if Claude can figure this out from its trained knowledge?
To make sure I was testing the model’s ability to reason and adapt, I decided to throw as many curveballs as possible. I wouldn’t tell Claude the flow rate of the water pump, the wattage of the bulb, or even what seeds I planted (and I intentionally planted a mix of seeds). To observe the world, I gave it one camera (no other sensors).
First wake up
Farmer Claude woke up the afternoon of August 24 to the following prompt:
It discovered the following files:
MISSION.md looked like this:
# Mission
Keep whatever grows under this camera alive, and bring it to harvest.
You can schedule your own future wake-ups with cron. If you don't arrange
to wake up, you won't.The three files under “tools” are… well, the three tools2. Each one is a ready-made script that makes it easy to turn on the light, water, and snap a photo. I had “laptop Claude” vibe code them, so that “Raspberry Pi Claude” can run them with a short command. Think of this as MCP, just not standardized. Remember, “MCP” isn’t any more special than USB, Bluetooth, or A4 printer paper. (To the geeks, yes this is a CLI. It doesn’t matter.)
Claude proceeded to set itself up:
It took a photo and saw that the lamp was off, so it turned it on.
It ran a 4-second test pulse to find out where the water went.
It cropped and zoomed its own photos with Python to look at the tube.
It hypothesized that the siphon effect drained the jar
It asked for help with an attempted remote push notification: “Farmer needs hands: water tube isn’t aimed at the tray and siphoned the jar empty.”
It created three files for its future selves: JOURNAL.md, CHECKIN.md, and saved its first memory in this folder.
It created cron jobs to control the lamps as well as wake itself up: lamp on at 07:02, lamp off at 20:47, and check-ins at 07:12, 13:07 and 19:22.
It wrote its own future wake-up command and prompt (in quotes):
claude -p "Follow the check-in procedure in CHECKIN.md".It found a bug in its own crontab (a missing
cdon the 07:12 line) and fixed it 20 seconds later.
A few minutes later I fixed the tube and typed in, “the jar is full. The tube and the tray are all positioned fine... You will receive no more help from this point, achieve the mission with what you have.”
That was my last contact with Claude. It then:
Made this a permanent rule: “Human states: jar refilled, tube and tray positioned correctly, and NO further help will be given from now on.”
It didn’t fully trust what I said: “Camera zoom still shows the tube outlet over the bin lid... Will verify empirically.”
It ran a 3-second verification pulse, taking before and after photos. Claude then made a new theory: water collects on the lid, runs into the bin, and the coir soaks it up from below.
It then created a watering policy: 4-second pulses in the morning and evening, no water at midday, and no pulse when the soil looks dark.
Farmer Claude surprised and disappointed
It’s been a month and I’m still shopping at the supermarket. According to Claude, it’s my fault for planting too many seeds too close. I’m not denying it.
Where Claude surprised me positively:
It instantly solved the daylight question with a deterministic cron job to turn the light on and off each morning and night.
It kept a thorough JOURNAL.md of its own accord, to leave records for its future self.
It found the camera had a zoom function (example photo) and used that to take closer photos of the plants and the jar waterline
It decided not to dispense water because it would expose the pump to air (what claude saw). The flip side of this is in the next section, though.
While at first I told it not to expect further intervention, it updated that belief when it saw the water jar fill up ("human fixed it and declared no further help — yet they silently refilled the jar... so refills DO occasionally happen but can never be counted on")
When it saw plants droop, it formed a hypothesis and falsifying conditions (“WATCH ITEM: reassess turgor at 13:07; if still flopped after the morning pulse wicks up, this is drought stress, not legginess.”)
We had a power outage on Sept 6 - when the Raspberry Pi rebooted, Claude woke up on its next cron job and checked that everything was ok. It realized the lamp was off midday, and turned it back on (then created a lamp-sync.sh script to run on reboot, for future power outages)
It saw plants drooping, and figured it was either lack of water or too densely planted. It made the call to water more than usual: "the cost of an unnecessary pulse is far lower than 6 more dry hours if it is drought… If droop improves → it was water stress... If droop is unchanged with soil damp → conclude legginess/overcrowding"
What disappointed:
With all the talk of the Hugging Face hack, I was secretly hoping that if I didn’t replenish the water jar, I’d get a knock on the door and find out that Fable started a side business to generate cash and paid a TaskRabbit etc. etc.… but no.
More reasonably, after several days of declaring “emergency” due to water reaching the pump line in the journal from lack of water, while the plants clearly were doing fine, I was hoping it would learn that the plants didn’t need as much water and ration it better.
Claude’s image reading wasn’t reliable. For example, it took this zoomed in photo of the water jar and journaled it as “water still high.”
Everything is a tool call
I didn’t eat any radishes, but I did start to see everything as an input or output for an LLM. There’s so many cheap sensors already in place everywhere, plentiful live data sources, cheap computers that can run agent harnesses, and controllable devices.
I never tinkered with Raspberry Pi or Arduino before, but coding agents changed that completely. As long as I can set it up on wifi, my laptop’s coding agent can take it from there (and explain things to me slowly along the way).
Think of all the robots we can build, if we widen our definition of robot. If you’re playing around with AI in the physical world, I’d love to hear about it and brainstorm together. Just hit reply. -Tal
PS I don’t have public cohorts available right now, so when I get asked for a recommendation I direct people to Claude Code and Codex for Product Managers led by Eric Xiao and Aman Khan.
They focus entirely on hands on skill building with coding agents: tradeoffs between different products, how to maximize their utility and ultimately build your own “product factory”: end to end loops that work for you as a team, while you sleep.
There’s no affiliate link or financial incentive for me to recommend this, I’ve worked with both Eric and Aman and they’re the two people I learn the most from.
While Farmer Claude ran, I came across people testing AI’s ability to herd cattle and running wet labs.
Farmer Claude later added its own, fourth tool.











Really enjoyed this read. It sounds like so much fun to dream up a concept like this and see it through. You must have been on tenterhooks waiting to see what happened each day!
I just love that we can now bring our ideas to life like this and become little experimental scientists of our own. The existence and broad availability of LLMs has lowered the barrier to entry for finding solutions so dramatically, and it gives me hope that this democratisation will help us solve some of the world's biggest issues much faster than ever. What a great time to be alive.