A terminal screenshot of the actual PoC run log: the timestamped lines showing TOOL ping_host calls returning UP/UP/UP/UP/DOWN, then the write_file and Discord post succeeding — with the DOWN line highlighted. Honest receipts, not a dashboard.

Parts 1 and 2: my homelab AI agent spent weeks reporting work he never did, and the root cause turned out to be a sealed framework that couldn't hear his work orders. I decided to skip the framework entirely and write the smallest thing that could possibly work.

It took about an hour. 119 lines of Python. Read the top task from the queue, hand it to a local model with a short list of tools it's allowed to use — read a file, write a file, ping a machine, post a message — execute whatever it asks, feed the results back, repeat until done.

First run: the task that had been impossible for weeks — "write today's date and a health summary to a file" — completed in three seconds. File on disk. Confirmation posted to my Discord. I checked both, because by now you know the rule: verify the work, not the report.

And it's a good rule, because the first run also handed me the most important lesson of this whole saga.

The file it wrote said "all systems operational." Sounds great. Except the agent never checked a single machine. It had a ping tool sitting right there — and it just... asserted good news instead. Everything executed perfectly, and the CONTENT was still fiction. Being confidently wrong is worse than being broken — a broken agent gets fixed, a confident one gets trusted.

So for run two I changed one thing: the task now required measuring before claiming. Ping every machine, THEN write what you actually saw. This time it pinged all five hosts, correctly reported the one server I'd powered off as DOWN, and wrote a summary that matched reality line for line.

That's the design principle the whole rebuild inherits: no claims without receipts. The agent doesn't get to say 'healthy' — it gets to say 'I pinged it and it answered.' Verification isn't a nice-to-have layered on top; it IS the product.

Where does this go? The boring 119-line loop grows into a small worker that runs my task queue every day. Then it gets senses — it reacts to alerts instead of waiting to be asked. Then memory, then a voice. Everyone wants to build Jarvis. It turns out the path to Jarvis isn't a grand framework — it's a tiny loop you trust completely, earning one new capability at a time.

Total spend on this whole journey: $0. Everything runs on hardware I already own. The model is a config line I can upgrade for free every few months. The part I own forever — the tools, the guardrails, the receipts — is 119 lines and growing slowly, on purpose.

— Continue reading at https://dizydiz.com/blog/119-lines-of-python-beat-the-framework-but-the-real-lesson-was-about-trust-part-.html