3AM Lab Notes
Harness Work Is Hard Work
I built my own agent harness to skip the permission prompts — and stuck around because the bones were too interesting.
Building your own harness is challenging.
“Why even build one?” That’s the first question any sane person would ask, and I would say, “All those approval prompts pissed me off.” Of course, I started this journey earlier in the year, when my then-favorite harness, Claude Code, started adding all those guardrails. I get it: those “my agent deleted” stories were horrible and funny, and the AI labs didn’t want to get blamed—or at least wanted to avoid bad press. In my experience, all that overreach wasted hundreds of hours of work on my project. Even with the specs mapped out, the implementation plan approved, and the context and appropriate capability tokens in place, Claude would stop to ask, “You sure about this?” at 2 a.m. If you’re not working to a deadline, that’s fine. But if you want to rush to the finish line, that’s another story.
Of course, while working on this project the rest of the big boy harnesses have fine-tuned theirs and managed to add back a bypass permission mode. They also added features like Goals or Ralph Mode which tells the agent, don’t come home empty handed. I could have called it quits and called it a day but what I was learning was too interesting.
Behind the scenes are the bones of it all, the stuff most users take for granted. If a tool call fails, how many attempts should the agent make before stopping? Should it escalate or just try something different? Do you run this inline, or do you run a subagent? What happens when the subagent gets stuck in a bad loop? Yes, definitely not everyone’s cup of tea.
To say I built my own harness just because of the permission prompts would be an oversimplification. I built it because I had a specific workflow I liked, and Claude Code—powered by Anthropic or Ollama models—started hallucinating more as my subprojects and repo got larger, at least in my experience. Rework is expensive; LiteLLM, Langfuse, and my wallet confirm.
So what was different about the workflow I wanted? I wanted a harness that sticks to the Superpowers workflow: one user-facing Pi agent that brainstorms with me, narrows the spec down to a T, and then coordinates the planner, orchestrator, worker, and reviewer on the subproject—without relying on long-lived sessions. It hands work over via A2A, gives me visibility through OTel, and supports Subagent-Driven Development and Test-Driven Development, all through a VS Code extension with Discord as another way to communicate. Trust me, if there had been a project that did all that, I would have used it rather than build one. I’m smart, but not that smart.
I did get smarter, I think. More importantly, I now have something I want to release into the wild—once I iron out a few more Pi quirks.