posts

Maybe stop using Opus for everything

Saturday. I’m absent-mindedly baby-sitting a Claude Code session, applying a fairly simple change to an as-yet-unpublished greenfield project. And it’s taking aaaaaages. I’ve got an Opus 5 top-level session managing two Opus 5 agents, worker and reviewer, and between them they’ve been working on one task in one section of a change for almost a day and a half. And when I dig a little bit into why, it looks like one of them has decided that mutation testing is necessary for every change it makes (it’s not), and it’s running a dozen cycles of manual mutation tests on every test suite as part of every review, so what should be a two-minute “run tests and check code” turned into over an hour of generating sed scripts and whatever other nonsense. The manual part is because my global CLAUDE.md file says “don’t use JavaScript frameworks” and it extended that to mean “don’t use any packages that call themselves frameworks in any language ever”, so it decided it couldn’t use e.g. Stryker.

There is precisely one feature in this new project that I guess, if it were production software expecting hundreds of installations, would be worth this level of scrutiny, and that’s the first-run bootstrap; you know, the “go here and create the admin account” setup bit that you have to do as soon as the site is reachable. But this is not that; this is a wiki engine I’m writing because all the wiki engines I looked at have UI/UX that might have been acceptable when Windows XP was still a thing, but it’s 2026 now and we have CSS and expectations.

Anyway, point is, I told it to stop being silly, stop running the mutation tests after every new unit test was added, definitely stop running twelve cycles of mutation tests every time, and suddenly the task was finished and I could go climb a rock.

Model vs Model

As I was driving to said rock, it occurred to me that in over a year of using Claude, much of it with various versions of the Opus model, it had never decided mutation testing was necessary before, and I wondered if it was something new in the recently-released Opus 5 model’s training data. If you haven’t sat with one of these models through various versions (3.5, 4, 4.5, 4.6, 4.7, 4.8, now 5), you won’t have experienced the way certain words or phrases suddenly pop up in new versions, almost to the point where you could use them to forensically identify which version generated some text. Opus 5, for example, is talking a lot about “oracles”, as in “potential information leaks” (i.e. the security sense of the term), which I don’t remember from earlier versions.

There were also a lot of posts when Sonnet 5 was released saying it was better than Opus 4.8 for development work, although they warned about increased token counts due to a brand-new tokenization model, but I have a Max subscription so I don’t care about that. So I decided it was time to rejig my configuration and my agents a bit; here’s what I’ve ended up with.

A quick note about OpenSpec

If you haven’t used OpenSpec, the spec-driven agent extension and CLI tool, here’s an overview. It breaks work down into changes, which pretty much map to a story or ticket, and each change gets its own set of files: proposal.md is the high-level description, design.md contains the implementation details, and tasks.md is a list of actual tasks with [ ] checkboxes. The tasks are divided into sections, usually with 5–10 tasks in each section.

New sub-agent pattern

When I first started using it, my agents tackled a whole section at a time, which often needed the million-token context window of Opus 4.x. But lately I’ve switched to a different pattern, where I am the Product Owner, the main session acts as the Analyst and Architect and breaks each section down into minimal blocks of two or three tasks that can be completed by a Worker agent, reviewed by a Reviewer, and committed independently. The top-level session and both agents had been running on Opus 4.8 and were now running on Opus 5, which I suspected was a slight case of overkill.

So I tweaked the setup, and now it looks like this:

  • Main session: Opus 5
  • Worker agent: Sonnet 5
  • Reviewer agent: Sonnet 5, runs on each block
  • NEW Supervisor agent: Opus 5, runs on section completion

Now the worker and reviewer agents rattle through the blocks within a section much faster, but I still have the reassurance of an Opus 5 review from the supervisor before the section changes are committed. If the supervisor finds something, fixing it becomes a new block that the worker and reviewer cycle through. The supervisor can push back twice before I have to get involved.

I also told it to cap mutation test cycles at three for this project, and to only use them for critical paths on all projects.

Combined, these changes have made things progress a lot faster; I feel like I’m back to the velocity I had with Opus 4.8, and the supervisor is catching some genuine issues in the code, especially around security and stability.

Share and Enjoy

I’ve updated my plugin marketplace at daemonicai/dmon-dev to scaffold the agents, and I added an update-scaffold skill to migrate from the old pattern to the latest one. As usual, feel free to use it as-is, or fork it and adapt it to your specific needs. This is all still an unexplored frontier, and we need to be forging these paths together.