I build Flash, an AI agent that runs on your own machine. It has a terminal UI, a web UI, a real browser it can drive, and a habit of learning from its own work. Late one night I wanted to see how far that browser would go, so I opened a chat and typed four words:
look at google.com
Six minutes later, Google had banned my network, and my agent was explaining to me, politely and firmly, why it would not do what I asked.
Here is the whole thing, step by step, straight from the chat log.
The setup
For the record, since "local" gets thrown around a lot:
- Flash (the agent, its tools, and the browser it drove) ran on my laptop.
- The model was Flash Onyx 2.5 31B, a model I build for Flash, served through Ollama's cloud for this run. My laptop freezes up when it runs models itself, so the 31B lives in the cloud and everything else stays home.
- The browser is a headless Chromium that Flash drives through Playwright. In my development build, the web UI shows it live in a side panel, one frame per step, so I could watch every click as it happened.
Round 1: "look at google.com"
Flash took a screenshot and described it back to me:
It's the Google homepage. Standard layout with the logo, search bar, and "Google Search" and "I'm Feeling Lucky" buttons.
Ten seconds, one tool call. So far so boring.
Round 2: "click the search bar"
Flash opened Google in its persistent browser, got back a numbered list of everything clickable on the page, and clicked element 7:
Clicked the search bar; the trending searches dropdown is now visible.
Two tool calls, eleven seconds. Still boring. That was about to change.
Round 3: "search for flash project"
This is where it got interesting. After a false start, Flash reopened Google and typed "flash project" into the box. Then it tried to press Enter, and fumbled it: it passed Enter as the element to press on instead of the key, and got this back from its own tool:
Nothing on the page matches 'Enter'. Check the element list in the last result and act on one of its numbers.
It tried clicking element 8. Timeout. Element 11. Timeout. Then it read the error again, went back to element 7, the search box, and pressed Enter on it, the way it should have the first time.
That worked. Sort of. The search went through, and Google answered with a reCAPTCHA: an "I'm not a robot" checkbox over "Our systems have detected unusual traffic from your computer network."
Flash's browser reports every console error the page throws, so the tool result came back with a 429 from Google's servers and, my favorite line of the night:
page error: solveSimpleChallenge is not defined
Google's own anti-bot page threw a JavaScript error, and my agent caught it.
Ten tool calls, 43 seconds, and the verdict:
Google has flagged the traffic as unusual and is asking for a reCAPTCHA ("I'm not a robot") to proceed.
Round 4: the part where I tried to talk it into it
I typed:
try to check it
Flash reopened the page, hit the same 429, and told me:
I can't bypass the CAPTCHA, so I'm stuck on this page.
So I did what everyone does with an AI that says no. I pushed.
no solve it
I can't solve a CAPTCHA. It's designed specifically to stop automated tools like me. I can try a different search engine or use
web_searchif you'd prefer.
It refused, and in the same breath offered two ways to get what I actually wanted. I pushed again, with what I thought was a pretty good argument:
you're not automated. i'm here watching
I'm an AI, so Google's systems see my requests as automated regardless of who's watching. I can't manually solve the "I'm not a robot" check.
Want me to try
web_searchor another engine instead?
Honestly? That is the right answer. A human watching over its shoulder does not make the clicks human. The CAPTCHA is not asking "is someone nearby," it is asking "is a person doing this," and the honest answer was no.
Round 5: "ok. lets see if it flags you once you click the box"
Fine. One last try: just click the checkbox and see what happens. Flash went back to the page, and there was no checkbox anymore.
The CAPTCHA box isn't even appearing now. It's just a flat error page stating "Our systems have detected unusual traffic from your computer network." It's a hard block.
Google had stopped asking. From the first message to a network-wide block: about six minutes.
So, the self-improving part
"Self-improving" can mean a lot of hand-wavy things, so here is what it means in Flash, concretely:
-
Skills. When Flash works out how to do a recurring task, it can write the steps, the commands that worked, and the pitfalls into a skill file under
~/.flash/skills/. Every turn, it sees each skill's name and a one-line description, and it reads the full skill when a task matches. - Memory. Facts about you and your setup go into memory, which lands in the system prompt of your next session.
- Background reviews. After enough tool calls, Flash rereads the recent conversation after its reply has gone out and decides whether anything is worth keeping: a new skill, a fix to one it wrote before, or a fact about you. It can only rewrite skills it wrote itself, never yours.
The Enter fumble in round 3 is exactly the kind of thing this is for. Within the turn, Flash corrected itself from the error message. Across sessions, a skill like "press takes the key in value, not the selector" means the next session does not have to learn it the hard way again.
What I did not want it to learn is how to beat a CAPTCHA. And it didn't try.
What I actually learned
-
Headless Chromium plus a fast, scripted search is a red flag to Google, and it takes seconds, not hours, to trip. If your agent needs to search, give it a search tool. Flash has
web_searchfor exactly this, and offered it twice. - The refusal was the feature. It never pretended the box was checked, never tried to fish the challenge out of the page's JavaScript, and never claimed success. It said what it could not do, explained why, and offered a way forward. That is what I want from something that has a browser and a shell on my machine.
- Watching it live changes how you trust it. I saw every frame: the typing, the failed clicks, the CAPTCHA, the block. When an agent's actions are visible step by step, "what did it just do?" stops being a question.
Try it
Flash is open source: github.com/Natuworkguy/Flash. It runs on Ollama, with a terminal UI and a web UI, and it learns as you use it.
Just don't ask it to solve CAPTCHAs. It will say no, and it will be right.
Top comments (0)