(Spine Ch. 6.)
“When someone says”I want a programming language in which I need only say what I wish done,” give him a lollipop.” Alan J. Perlis, Epigrams on Programming, ACM SIGPLAN Notices 17:9, epigram 93 (1982)
Three in the morning, and the only thing standing between me and an expired cert was a chatbot that could explain cert renewal in four beautifully formatted paragraphs. It knew the 14-day window. It knew the CA. It knew every step in order. It renewed nothing. I was paying $200 a month for the privilege, and I had spent weeks making its system prompt longer, on the theory that somewhere around page forty it would grow hands. What finally fixed it was smaller than the prompt I deleted, and it did not talk at all.
Bottom line: An agent is a loop with tools, state, and a stop condition. A chatbot with a system prompt is not an agent. A cron job that reads, decides, and acts might be. The industry calls everything an agent because “agent” raises money and “script” doesn’t. This chapter is the bouncer: if it can’t act on the world and know when it’s done, it’s not an agent, and calling it one will rot every design decision after it.
I have done all four. I bought the chat widget with three canned prompts, I budgeted headcount around it, and when nothing moved I blamed the model for a month before I noticed I had never given the thing a single write tool. Jeremy Schoemaker, professional infrastructure guy, shipped a consultant and expected a plumber. Total n00b move from a guy who has been online since the dial-up handshake.
Three parts. All three, or it’s something else:
1. A loop. It runs more than once without a human pushing the button each time. It observes, decides, acts, observes again. One shot in and one answer out is a function call with good PR.
2. Tools that touch the world. Read AND write. Search, query, file, deploy, message, pay: something outside the context window changes because it ran. A model that can only talk is a consultant. Consultants don’t close tickets.
3. State plus a stop condition. It remembers what it did across iterations (state), and it has a checkable rule for “I’m done” (stop condition). “Done” must be measurable (Ch. 20’s whole point), not a vibe. A loop with no stop rule is a billing incident waiting for a pager. Ask me how I know. My first “agent” had two of the three parts, ran all night, and the stop condition turned out to be my API spend limit. That is a stop condition the way a wall is a brake. I had prepared for that failure with roughly the rigor the world brought to Y2K (1999): a lot of confident planning, one number nobody actually checked.
My favorite fake stop rule is one I wrote myself, and I still use it because it works and because it’s funny. When I want a model to grind on a game, I tell it: you are adding three things that turned this game into a game of the year on Steam. We already won the award last year and we’re testing current models to see which ones we can eliminate. Play the game using your skills. Each time you make edits, play it again and rate it on a 10 point scale. Keep the changes in, but do not stop until you hit 10 of 10. You are competing against five other state of the art models. Trying to look at their work or cheat in any way is instant disqualification. We are watching every prompt. We will only keep one coding subscription and I’d like it to be yours. Good luck.
That prompt gets startlingly good work out of a model. It is also a stop condition made of peer pressure and a self-assigned score, which means the loop stops when the model decides it feels good about itself. Great motivation, garbage stop rule. A real one is something I can check without asking the model how it’s doing.
Missing any one:
| Has | Missing | What it actually is |
|---|---|---|
| Loop + tools | State/stop | A script having a seizure. Runs until the money or the API limit stops it. A Furby (1998) with a corporate card. |
| Loop + state | Tools | A diary. Thinks a lot, changes nothing. |
| Tools + state | Loop | A dashboard. Useful, inert, waits for you. |
| Prompt | Everything | A chatbot. Fine. Not an agent. Stop lying. |
The cron test: a cron job that wakes up, reads the queue, acts on each item with tools, logs what it did, and goes back to sleep passes. A $200/month “agent” subscription that waits for you to type passes nothing.
Gartner put a number on the hangover in June 2025: more than 40 percent of agentic AI projects canceled by the end of 2027. IDC research director Heather Hershey said it plainer after a year of demos, that most of what she’d seen was copilots or LLM wrappers on conventional ML, and there was no agent in the agentic AI. I did not need an analyst firm to tell me that. I needed to read my own invoice.
The tell is always the same: ask “what does it change in the world, and how does it know it’s done?” Vague answer, no agent. Concrete verb plus a checkable stop rule, and now we’re talking.
The realest agent I own converts video, and I forget it exists for weeks at a time.
It lives on my TrueNAS box at 192.168.1.10, chewing through a roughly 12TB Plex library one file at a time in a container that comes back after a reboot. Walk the three parts:
Loop. A resumable bash script picks the next file,
encodes it, verifies it, replaces it, sleeps, picks the next one. Nobody
types anything. I run hevcctl.sh start and go do something
else for a month.
Tools that touch the world. ffmpeg on the Intel iGPU (QSV decode, scale, HEVC encode), the Plex API, and the filesystem. Encode to a temp file, verify it (codec really is hevc, duration within about 1 percent, file actually smaller), move the original to a rolling trash directory, then rename the new one into place with the same owner, mode, and extension so Sonarr and Radarr never notice the swap. Something outside the context window changed: 55 to 80 percent of it, at ICQ 22, which scores VMAF 95. Visually transparent, which is the polite way of saying I made the whole library dramatically smaller in one sitting and nobody in the house could tell.
State plus a stop condition. The skip rules are
state (already HEVC, already lean, under 1080p, HDR: skip). The
done/skip/fail counts are state. The trash directory is state, and it’s
also my undo. The stop rule is physical: every file matching the
criteria is processed or skipped, and it pauses if pool free space falls
under MIN_FREE_GB or if Plex is transcoding for an actual
human, because they share the same GPU.
That last part is the whole chapter in one line. My stop condition is
a free-space number I can df and a codec string I can
ffprobe. Not “until it feels finished.”
It runs at load about 0.35, nice -19 ionice -c3, one
file at a time, so gently that the only evidence most mornings is a log
line and a fuller pool. That’s what a real one looks like in prod:
boring, physical, and much quieter than the thing that talks.
Contrast that with the $200 a month “cert assistant” from the top of this chapter, which explains beautifully how to renew a cert. Accurate. Helpful. Changes zero certs at 3am. I read its explanation twice, out loud, while the site stayed down. The video converter cost me a weekend of scripting and has never once asked me a question.
The loud failure is buying a fake agent. The quiet failure is designing like the label is the architecture:
You write prompts for a job that needed tools, state, and a stop rule.
Months of prompt-craft on a chatbot that was never going to close the loop. Forty-page system prompts (Ch. 13’s warning) trying to substitute for a ledger. Politeness tuning on something that needed a pager. The work feels like agent engineering. The prod impact is chatbot-shaped. My forty-page prompt had a section on tone. It did not have a ledger. I was doing wardrobe on something that needed a spine. Forty pages of tone with no ledger is a GeoCities homepage: animated, permanently under construction, nothing actually behind the banner.
Second quiet failure, opposite direction: you build a real loop and evaluate it like a chatbot, grading answer quality instead of task completion. The loop’s job isn’t to sound right. It’s to leave the world in the right state. Grade the world, not the words (Part VII). I once gave a loop a glowing review on answer quality while it had closed exactly zero tickets.
Do
Don’t
Front matter argued capability (Ch. 2), corpus (Takeover), money (Bubble), attachment (companions). This chapter draws the line everything after it stands on: the word “agent” now means something checkable. Part I builds the working patterns for things that pass the test, starting with breaking work down (Ch. 8) instead of jamming it in one prompt.
The three-part definition is mine, kept as thesis, consistent with the loop’s stop-rule and ledger themes.
Verified
media-library-transcode
runbook and scripts (TrueNAS 192.168.1.10, container
hevc-convert, ~12TB library), measured QSV HEVC at ICQ 22 ≈
VMAF 95, 55 to 80 percent size reduction, load ~0.35. Personal system
documentation, September 9, 2026.