Marginalia, Side Effects & Loose Threads
The copy-paste buffer was part of the architecture
Around Christmas 2025, before I had any hands-on experience with Claude or Codex, I was building what became BotSwarm, a multi-agent research system. When OpenCode got stuck, I opened another browser window.
My starting setup was a local language model, OpenCode to work on the code, and OpenWebUI to talk to the model directly. No IDE, no git. The integration between the two windows was me.
OpenCode was supposed to handle the coding loop: describe a change, generate the code, run it, try again. Sometimes it did. Sometimes it kept returning to an approach that had already failed.
The term Ralph Wiggum loop, from Geoffrey Huntley’s work, was already in use for persistent agent iteration. Repeated attempts in my setup sometimes meant confidently wrong, then confidently wrong again.
I could keep trying to explain the mistake, or change the workflow. The fallback was manual. I put the problem into OpenWebUI, read the answer, decided which parts to keep, copied them into the file and checked the result.
It was slower. It also made the decision visible. The model had produced a candidate. I still had to decide whether it did what I needed.
A file that parses
The code grew in one Python file. Before a risky change I made a copy. My basic check was whether Python could parse the result.
That catches a broken file. It says very little about whether a research pipeline produces useful research, whether a security check covers the right case, or whether two pieces agree about the state they share. I was learning that distinction while building the thing.
I would use version control from the start if I did it again. Manual backups and a syntax check were the limits of my setup, and I eventually needed better ways to recover changes and check behaviour.
The decision in the middle
The useful part of the manual fallback was the pause between generation and acceptance. I had to read the result, connect it to the problem and decide what happened next. Another answer in the browser window did not automatically become another change in the file.
That became more important as the tools improved. Faster generation gave me more to evaluate. It did not tell me which result to accept.
The copy-paste buffer was a crude way to keep that decision in the loop. I would happily replace the copying. I would keep the decision.