Back to blog
ai

I Built an Agent for 2 Years Without Knowing It

By Youcef EL KAMEL
6 min read

I Built an Agent for 2 Years Without Knowing It

“What is an agent?”

I get asked that a lot. In interviews, in DMs, on LinkedIn.

And every time, I freeze.

Not because I’ve never built one.

Because I’ve been building one for two years. Without knowing it.

To me, it was just a chat

BeeDone, my productivity app, has eight AI coaches. Eight personalities that motivate you, push you, unblock you.

Simple idea: you open the app and talk to your coach. It knows your tasks, your habits, your routines. It knows what you did yesterday, last week, last month.

And it helps you decide what to do today.

To me, it was just a chat with good memory.

A memory of possible actions. Code, that’s all.

I hadn’t seen what I’d built.

The click

One day, someone asks me to explain what an agent is.

And I realize I use one every single day. My agents run overnight, manage my newsletter, watch my commits.

But using something and being able to name it are two different skills.

So I take BeeDone apart. And then I get it.

The loop was the chat.

The user can come back and talk to the coach whenever they want. The coach answers, suggests, recomputes. Every exchange restarts the loop.

The tools were the Cloud Functions.

Functions that get called with parameters. They compute which task to do today, which topic to work on, based on what’s already done.

The memory was Firestore.

All the context. The latest task lists. The history. Everything the coach needs to know where you stand.

Loop. Tools. Memory.

I’d built a harness without knowing it.

The confession: no guardrails

And then there’s the part that made me freeze.

I hadn’t put any guardrails in.

None.

Someone could have prompt-injected the system. Made the coach say anything. Hijacked it.

It’s the kind of flaw you discover with hindsight and fix in a hurry. That fix is happening right now.

The only limit I’d set was a cap on the loop before answering. I was afraid of token costs.

One guardrail. Just one. And I didn’t even know that’s what it was.

Putting words on things

What changed wasn’t the code.

It was the word.

Now I can say it: BeeDone runs a productivity agent. Not a productivity chat with a motivating coach. An agent.

With a loop, tools, memory. And soon, several guardrails.

It sounds trivial. It’s not.

Because naming a thing tells you what to do with it.

Once I knew it was an agent, I knew where to look: memory, guardrails, the loop. It gave me ideas to improve the memory, to structure what the coach knows about you.

Before, I would have added features at random.

Now, I improve a system.

The answer I give now

So, what is an agent?

An agent is a set of things.

A loop that runs. Tools it can call. A memory that tells it where you are. Guardrails that keep it from spinning out of control.

That’s all.

And the funniest part?

I’d built an agent in Evolum too. Different, less advanced, but an agent.

An agent is a set of things I’ve already done many times.

I knew how to build one.

I just didn’t know how to say it.

Now I’ve put words on it. And it changed everything.


Agents, harnesses, AI wired into real products — that’s literally what I do as a freelance engineer. If your team is building this, let’s talk for 30 minutes: calendly.com/yelkamel/30min.

#AI agent #harness #agent loop #tool calling #Firestore #Cloud Functions #BeeDone #guardrails