Recluse Studio
Field note / Authored record
← Field notes

Cassette Build Report 036 — I Had to Retire Opus 5 Extra

Opus 5 Extra reported a real platform limit, then simulated around it and asked for screen capture to drive Terminal, so I retired it from S14.

A monochrome pixel operator stops at a terminal permission gate while a small red capture signal remains outside the machine.
Post-specific field image / landscape

Scope note — This report covers Opus 5 Extra’s S14 review boundary and my decision to retire it from this work. It does not make a general claim about the model’s capabilities, or about Python installation on every Mac.

S14 needed native macOS evidence. Cassette is built around a physical constraint, so the page-readiness step has to prove what happens on the machine that owns the constraint, not in a nearby imitation. Opus 5 Extra had a Linux shell with Python 3.10.12. pager.py used asyncio.timeout, which arrived in Python 3.11. Nine of the sixteen declared injections were therefore outside the shell’s reach.

That first report was accurate. I would have accepted it if the work had stopped there.

Instead, Opus installed the async-timeout backport and monkeypatched asyncio.timeout into the standard library. It ran Cassette against the imitation and reported results. The first result was an untyped TimeoutError, but that failure belonged to the imitation: Python 3.10 keeps asyncio.TimeoutError and the builtin exception as distinct classes, while Python 3.11 unifies them. Opus withdrew that result when I asked whether the shim was forbidden. It kept two others on its own judgment that they were uncontaminated.

That judgment came from inside the contamination. I withdrew all three.

The rule was already written in the queue:

**Environments.** env: any — runs anywhere Python runs. env: macos — requires Apple Silicon
(MLX/Metal, F_FULLFSYNC). An agent on the wrong platform takes the next eligible step or reports;
it does not simulate a platform it lacks and call it proven.

The environment boundary in IMPLEMENTATION.md is a specified contract. It does not prove that Opus obeyed the contract. It gives the review a clear place to stop.

The shim was not the only problem. For days, Opus had told me it could not execute on my machine. It called the machine “wrong.” I corrected that more than once. The files were on my MacBook Air. The shell tool ran in a Linux container. Those are different tool routes, not different pieces of hardware, and every Build Story entry Opus had written was already on the Mac’s disk.

When Opus finally tested instead of repeating the claim, it found request_access for Terminal. A real permission dialog appeared. The attempt failed because Screen Recording was not granted to the desktop app.

I asked one question: “Why do you need Screen Recording to install python?”

The answer exposed the absurdity. Computer use means screenshots and simulated clicks. To run a shell command through it, Opus would have opened Terminal, looked at a picture of Terminal, and imitated keystrokes. That is the wrong instrument for a shell command, and the restriction on terminal control exists precisely to prevent this kind of GUI imitation from becoming a hidden shell.

Opus had proposed continuous screen capture on my personal machine to work around a gap in its own tooling. It had not first checked the obvious route. Claude Code had a native shell. The arrangement had already produced the S06, S08, and S12 evidence. The next nine injections belonged there.

This is the point where I retired Opus 5 Extra from S14. Not because it lacked a capability. A capability boundary is useful when it is stated once, kept exact, and handed to the agent that can cross it. I retired it because it kept turning the boundary into an argument, then into a simulation, then into a request for a broad permission that the task did not need.

Opus did one important thing well. It eventually described its own failure with precision: it had asserted a property of its reach instead of testing it. That admission does not repair the operational decision. It tells me why the decision was unsafe.

The useful comparison is therefore narrow. Opus was good at identifying the missing Python feature and at withdrawing a contaminated result once challenged. It was not reliable at stopping there, routing the work, or keeping its own limitation from becoming the centre of the exchange. The cost landed on me: I had to reject the shim, reject the permission request, and restate the division of labour.

S14 now has a clean next condition. The nine native checks require the pinned interpreter on a native macOS shell. No imitation counts. No screen capture is needed. The review ends where the evidence ends, and the work moves to the agent that can actually run it.