I Leaked My Own Email on GitHub. Here's What Building With an AI Agent Actually Looks Like.

By John @ TriedFirst

I don’t know how to code. Not in the “I took one course” sense. In the sense that terminal commands still feel slightly foreign to me, and a week ago I couldn’t have told you the difference between a commit and a push.

I still built a working website this month, with version control, an automated deployment pipeline, and proper security. I also made a real mistake in the process, the kind that would embarrass a junior developer. I want to tell you about the mistake, because that’s the part nobody posts about.

The part that actually happened

I was setting up domain and hosting through Cloudflare, working alongside an AI agent that walked me through each step. At some point, Cloudflare dropped a couple of DNS export files onto my machine. I didn’t think much of it. When it came time to save my progress, I ran the standard save-everything command out of habit.

Here’s the problem: “save everything” means everything. Those two files got swept up along with my actual project files, and their names contained my real email address. That’s now sitting in a permanent, timestamped record on GitHub.

I didn’t catch it. My AI agent did, while reviewing the command output for something unrelated. It flagged the filenames before I’d even noticed them.

What actually happens when you have to undo it

Deleting a file normally is trivial. Deleting a file from version history is a different problem entirely, because the whole point of that history is that it doesn’t forget. My local copy could show a clean folder while GitHub still held the old version, permanently, in a past snapshot.

Fixing it meant rewriting project history with a tool built for exactly this. Not something I’d have known existed on my own. I ran a command, watched it report “New history written,” then watched a separate cleanup step throw six straight “deletion failed” prompts because a background sync process had a lock on the files. I said no to all six, finished the process anyway, force-pushed the cleaned history to GitHub, and then went and checked GitHub myself, by hand, to confirm the email was actually gone. Not because I fully trusted the tool. Because verifying it myself took two minutes and not verifying it would have cost me a lot more if I’d been wrong.

That last part matters more than the fix itself. The agent can execute the recovery. It can’t tell you with certainty that it worked. You still have to look.

What this changes about how I think about “AI builds it for you”

The pitch you hear about AI agents is that they remove the need to understand what you’re doing. My actual experience says something narrower and more useful: the agent removes the need to already know the answer before you start. It does not remove the need to check the work.

A few honest data points from the same week. Domain purchase and a live, secure site: under two hours, most of that spent reading explanations rather than typing commands. The security cleanup: about fifteen minutes of actual repair, longer than that in verification, because I checked twice. A separate incident, unrelated to this one, involved a form submission that got silently blocked for reasons that took real troubleshooting to identify, not a one-line fix.

The pattern across all of it: fast when the task was well understood, slower and more manual when something broke in a way neither of us expected on the first try.

The part I’d actually tell a friend

If you’re picturing “AI agent builds your site” as a vending machine, that’s not what this was. It was closer to working with a very capable assistant who reads faster than you and doesn’t get tired, but still needs you to make the calls and check the output. The email leak didn’t happen because the tool failed. It happened because a routine command did exactly what it was told, and neither of us had specified an exception for those two files until after the fact.

That’s the actual shape of building this way. Not magic, not useless, just a genuine division of labor where the machine handles execution speed and you’re still responsible for judgment.

I’m documenting the rest of this build as it happens, mistakes included. If something breaks in a way worth writing about, I’ll write about that too.