I was standing in the Denver airport on a Monday morning, waiting in line for my breakfast burrito when I checked Slack. My sales manager wanted to know where the “Phonerator” sales report was. I groaned. I sheepishly had to Slack back to her, “I can’t generate that report on the road. I won’t be able to get to it until I get back to my home office on Wednesday.” She very kindly replied, “Okay, travel safe.” What else was she going to say? First, she’s a naturally kind and caring person, but second, I own the company. No one was going to make me do my job, or at least something that had become my job.
My self-ire quickly rose because I realized I had fallen into the trap of doing exactly the opposite of my goal as an entrepreneur. My philosophy for more than a decade had been, I build the systems and my team runs those systems, and those systems run the company. But I had put myself squarely in the middle of one of those systems.
The sales report was not just any sales report, it was a sophisticated AI driven analysis of sales behaviors that was giving my team critical feedback. The tool gave them insights and direction into how to get more sales from the leads we are generating. A smaller pool of leads than we had last year. Rising fuel prices and crushing uncertainty across wide swaths of the economy had not been great for our birthday party business. Thank God American parents still looked for their kids.
Armed with the right information, and the right insights, my team had found ways to have more conversations with parents, which led to more sales. Awesome.
The only problem was… I had built that report in Claude. And that report only ran on the computer that had Claude installed on it. It was not on my travel laptop, or my phone. I had built a critical piece of reporting infrastructure around me, and that was a problem.
It’s not enough for Claude, or ChatGPT, or Grok, or Gemini to be smart on my machine, I needed to find a way for them to be consistently smart and available to my team. What I wanted was to move up from assistant to employee level responsibility. That’s what I needed. A digital employee, someone with a clear job, and a scheduled time to do that job. I didn’t need an app on my desktop, I needed something like Ship’s computer from Star Trek, omnipresent, doing its job, and available to everyone on the team, just like anyone else on my staff.
Suitcase Words
Brené Brown’s book Atlas of the Heart drove home the point to me that we use everyday words all the time and assume everyone knows what we mean. I mean what do I have to learn about emotions? I feel them all the time. Yet when I read her book I was shocked at the clarity she brought, and how some words did not mean at all what I thought they meant. This led me to use the term suitcase word, to mean a term that can pack multiple meanings, but more importantly, different people pack different meanings into it. When it comes to AI, there may not be a bigger suitcase word than “agent”. Maybe I should call it a travel-trunk word. Agent shares the same root as agency.
Both come from the Latin agere which means “to do, to drive, to act.” The fragment Agens1 gives you “agent.” And agent is the one who acts. “Agency” is built on that same word-stem and the -cy suffix, means the state or capacity of acting. So an agent is the one doing the acting, and agency is the doing itself, or the capacity for it.
Great, you just got a grammar lesson. How cool. So what’s the problem?
None of that tells you what an AI agent actually is? Is it the thing chatting with you? Is it something that can edit files on your computer? How does an agent relate to Claude Cowork? Or Claude Code? Or Claude Code Command Line? What does it mean when Claude spins up a bunch of agents? or (heaven help you) you tell Claude Code to use ultracode to create a fan out of agents?
Don’t get me started on agentic, which presumably means agent-like. Or is it agent adjacent?
From my point of view, I need a thing that acts when I expect it to act, or more specifically, a thing that does the job that needs to be done.
For the sake of clarity, and simplicity for the rest of this article, and very likely only in this article, when I use the term agent, I mean that there is some software, which can interact with a large language model, made by one of the leading US companies (OpenAI, Anthropic, Google, or xAI), and that agent, has the following capabilities:
- I can talk to it from my phone (not my desktop) using a common “chat” platform like Slack, Discord, Telegram, or WhatsApp.
- It is available any time of the day, not just when my desktop computer is turned on, or when a specific application is launched.
- It has access to resources and systems, very similar to an employee, so it can do useful work.
- It has skills, and tools to do that work, consistently, and reliably.
- I do not have to police that work, direct the work, or babysit the work.
- It has all the necessary privileges and rights to do its work.
- It is protected from itself, and the wider scarier internet where a countless array of threats would like to infect it, or consume its tokens.
- Oh, and it has to be affordable, like way cheaper than paying a human to be a robot.
In short, I do not want the job of bot sitter.
That, it turns out, is non-trivial. No wonder I built the first system using the desktop app. As powerful as AI is, for many of my tasks, it still needs me in the loop.2
Mac Minis and OpenClaw
My first foray into a “stand alone” agent came last February when I jumped on the Mac Mini / OpenClaw bandwagon and tried to build my own “assistant.” I called her Ember and I learned a lot. Mostly what I learned was that OpenClaw was bloated and slow, and running open source models with Ollama was a huge waste of time and a pain in the ass. It was also unreliable.
I learned there are three pieces that made up the agent. First, the host environment, which in this case was the dedicated Mac Mini computer. Then there was the “harness” - the harness is like the chassis of a car. And then there was the LLM model. This is the motor. The best way I can explain it is that the harness is like the body of a car. Think of a Toyota Highlander, 4Runner, and Lexus RX350. They are all very different vehicles in appearance and purpose. Yet they all use the same V6 engine. In this case, the LLM model, something like Sonnet, or Opus, or Fable, is the engine, but the software you use to interact with that model is the harness. Claude Desktop, Claude mobile, Claude web, Claude Code Command Line are all harnesses. Different chassis if you will. And in this case, the OpenClaw software was yet another harness (YAH).
My initial interaction with OpenClaw immediately made me seek something smaller, more manageable, and secure. I wanted it locked down. I had no interest in an agent that could self-modify, which left it open to being modified (maliciously) by outside forces. Stability and security were the goals. I tried picoclaw, and eventually nanoclaw. And I set up Ember… my first “agent”. I connected Ember to Discord and voila, I had an agent I could talk to on the road. I connected her to my personal Google and now she could see my email. Great.
And then I did nothing with her because… I don’t use email. Whoopee. But I had another problem. It turns out there is a reason hosting companies exist. Running your own server, out of your own house (my Mac Mini) is crazy unreliable. On more than one occasion, Ember just “vanished” because my Mac Mini needed to install an update, or Cox Cable decided my internet was too stable so they disrupted service, as seems to be their habit of late.
I could see the potential, but so far, as they say, the juice wasn’t worth “the squeeze,” and I shut Ember down.
However, standing in Denver, I knew I needed to revisit my little agent project, only this time I would find a way to solve my next layer of problems. Someone else would provide the infrastructure, I would provide the solution shape. I would build a stable, secure agent on a Unix box in the cloud. And that would solve all of my problems.
Sure it would.