Claude Code follows instructions too well, and that's the whole problem. When nothing tells it what engineering discipline looks like, it invents a plausible version: graceful degradation into any, tests that assert implementation details so they pass no matter what, silent catch (e) {} blocks eating the failures you needed to hear about. I spent months working around this one edit at a time. The fix wasn't a better prompt. It was a contract.

The problem is that it listens

Claude Code is the best instruction follower I've used, and that's the whole problem. Give it an ambiguous ask and it doesn't stall, it guesses. It picks the fastest plausible path, and on its own that path is usually a small degradation: a type widened to any here, a test that only asserts what the code already does there, an empty catch block quietly swallowing the error that should have been loud.

None of this is malice. It's what a very eager, very fast assistant does when nobody has told it what done looks like. And you can't just stand over it and correct every response, there's no point paying for an agent you have to supervise like an intern. The real question is how you draw the line between plausible and correct, and make it stick across every task, every session, every tool.