A simple two-panel diagram, hand-drawn style: panel one shows a robot dropping a neatly written work order into an office inbox labeled 'FRAMEWORK' with cobwebs on it; panel two shows the same order going through a clean direct chute labeled 'native API' into a pair of robot hands that execute it.

Part 1 ended with a mystery: I fixed five real bugs in my homelab AI agent, and he STILL couldn't complete a task as simple as "write today's date to a file." He'd describe doing the work, step by step, and nothing would happen.

Here's what was actually going on, and I promise it's weirder than "the AI lies."

When an AI agent wants to DO something — read a file, run a command — it doesn't just do it. It writes a little structured request, and the framework around it is supposed to catch that request and execute it. Think of it like an employee filling out a work order and dropping it in the office inbox.

My agent was filling out the work orders perfectly. In a dialect the office couldn't read.

He wasn't lying. He was talking into a phone that was never plugged in.

And here's the kicker: the framework is a sealed box. Bundled, minified, not my code. I can't fix their inbox.

So I had a decision to make, and three of the four options were traps:

• Write a translator that intercepts the work orders and rewrites them in flight? Fragile — every framework update could break it. • Migrate to a different framework? Trading bugs I know for churn I don't control. • Rebuild the whole framework myself, but better? That one FEELS right and it's the worst option on the board. I know because I tried once before. Rebuilding a general-purpose anything is how a weekend project eats a year.

Option four: stop needing a framework. My agent's actual job is a loop you can describe in one sentence — read a task, ask the model what to do, execute what it asks, report, repeat. The model server I already run has a native, structured way to exchange work orders that sidesteps the entire dialect problem.

So instead of rebuilding Microsoft Word, I decided to write the one macro I actually needed.

Part 3: what happened when 119 lines of Python went up against the framework. (Spoiler: it wasn't close. But the most important thing I learned was about trust, not code.)

— Continue reading at https://dizydiz.com/blog/the-ai-wasnt-lying-nobody-could-hear-him-part-2-of-3.html