Covers December 2025 - August 2026.

It dawned on me today that I’m not training just one AI anymore. I trained them all.

I don’t mean model weights. None of these are my models. What I’ve actually been shaping is the environment around a mix of agents, models, and CLIs - showing them how I expect work to be done and what “done” really means.

When I started this in December, I had three separate wrappers (one each for Claude Code, KiloCode, and OpenCode) because each behaved differently enough that I did not trust a shared abstraction yet. I assumed I would eventually pick a favorite, configure it exactly right, and build everything around that one tool. Instead I kept trying other tools and the list grew. Codex joined it. Then Cline, native providers, local models, and whatever else I happened to be trying that week.

The global AGENTS.md carries the rules I want everywhere, and each application adds its own architecture and constraints on top. Shared skills describe the repeatable jobs, and backend-specific prompt fragments translate those jobs for whichever CLI gets them. aidd records the run, watches for stalls, limits retries, and keeps the transcript. At the end of every run, the repository has to prove the result with its own checks.

Most of these rules exist because something went wrong at least once. An audit prompt taught agents to write done, so the prompt changed and the feature store now rejects the word. A run performed a git reset against my live working tree, so runs got isolated worktrees. Test agents eventually gained a live-reproduction rule after filing bugs they had only seen on screen. There are plenty more.

Some of those failures turned into tests, others into a guardrail or a strongly worded instruction. If the first control doesn’t catch the problem, something farther down usually does, and the failure leaves enough evidence to add whatever check was missing. I still add checks when a run finds a gap.

At this point I can hand the same task to very different agents and usually get the same useful result on the first try. When it misses, I usually have a stopped run and enough evidence to work out why. The project rules and checks stay in place when I change models.

Looking back at all those validation rules, I seem to have approached this like a database administrator. I suppose that was inevitable.