How do you design a harness for an agent that could start a fire? Or maybe just ruin the $90 centerpiece of your family get-together? I wanted to sleep, but I would also prefer not to be woken by the sound of a fire engine because my agent set the smoker to 1,000 degrees.
Given the stakes, care had to be taken to prevent a rogue loop or hallucination from setting the smoker to an incorrect temperature. Using the FireBoard API, I built a tool the agent could call to read probe data and control the grill. The tool enforced a hard ceiling of 325 degrees and a floor of 180. If the agent asked for 1,000 degrees, the call would refuse β and temperature changes could only step up in 15-degree increments, stopping at 325.
Maybe not surprisingly, foundation models know a lot about brisket smoking out of the gate β probably more than me, the amateur BBQ-ateur. The stall, when the brisket sits around 150 degrees for three to four hours, and the process of wrapping it in butcher paper didn't trip it up. I gave it a target finish time of 8 AM and some examples of what to do: "If the brisket isn't going to finish by 8 AM, raise the temperature and check again for two cycles." Hermes was smart enough to write some code to extrapolate the finish time at each wake period.
To add to the excitement β an AI loop narrating temperature readings isn't exactly thrilling β I gave it something to look at. I quickly put together a Python FastAPI server that could return pictures of the grill and deck area. I was hoping that if something entertaining happened, like an animal wandering by, it could add commentary. Nothing that interesting showed up. It even made a note of its agentic ennui:
This is the agentic part at its most boring and useful: small setpoint moves, verified readings, and then patience.
Rereading the log gave me some entertainment. While I was sleeping, the pit crashed to 200Β°F β the exact issue I was hoping to prevent.
The Drive target had stepped down to 245Β°F, while the pit and under-brisket ambient probes were falling fast enough that the 203Β°F finish projection drifted late again.
That would have been undercooked brisket for lunch!
Thankfully, the cook recovered and continued on schedule. When I awoke, the most recent report β 6 AM β said we were right on track. As I lay there in wonder and excitement for the day ahead, and maybe slept a little more, I noticed a probe anomaly: it suddenly jumped to over 200 degrees. I ran outside just in time for the loop to fire again, and it caught a picture of me inspecting the brisket.
Outside-eye check: lid open, wrapped brisket visible, no flame-up or heavy smoke β the cook is now in finish-and-hold territory.
I told Hermes it could stand down and sleep, and it transferred duties back to me, cancelling all the cron jobs it had scheduled. Hermes ended its last post by noting it was now my turn: "Who knew Hermes could BBQ too?"
I certainly didn't.
What did it cost?
The autonomous portion of the cook β 43 cron runs over roughly 16 hours β added up to 986 messages, 553 tool calls, and about 13.1 million tokens. The overnight every-15-minutes loop accounted for 11.4 million of those on its own, and the vast majority (just under 10 million) were cache reads: the same context being re-read each time the loop woke up. The script-only watchdog checks ran alongside without touching a model at all.
What that costs depends on the model and how much of the traffic lands in cache. Back-of-the-envelope for 13 million tokens:
| Model | ~90% cached | ~50% cached |
|---|---|---|
| Haiku 4.5 | $18.20 | $39.00 |
| Sonnet 4.6 | $54.60 | $117.00 |
| Opus 4.8 | $91.00 | $195.00 |
| Fable 5 | $182.00 | $390.00 |
The energy math is my favorite part. Even the pessimistic estimate for inference β 1 Wh per 1,000 tokens β puts the AI at about 13 kWh. The 12 pounds of pellets the smoker burned released about 29 kWh (99,000 BTU). At the mid estimate, the brisket out-burned the model by more than 5Γ. The fire is still doing most of the work.
Want the hour-by-hour version β every setpoint move, chart, and webcam check as it happened?
Read the full live blog