{"slug": "i-banned-claude-from-saying-looks-reasonable-and-it-started-finding-my-blind", "title": "I banned Claude from saying 'looks reasonable' and it started finding my blind spots", "summary": "A developer building a SaaS product created a \"skeptic\" review sub-agent explicitly instructed to disprove design documents rather than verify them, then ran it against an execution plan written minutes earlier. The agent surfaced four major findings, including a self-contradiction where the developer added a second outbound-communication loophole to a design that declared exactly one. The developer argues that flipping the reviewer's success condition — failing to disprove equals defeat — is what forces the model past its default \"looks reasonable overall\" approval.", "body_md": "I'm in the middle of launching a SaaS product, and the deliverable from one particular session wasn't code.\n\nIt was an execution plan, plus the design of the quality gates.\n\nIn other words: writing down \"how we're going to build this\" and \"how we're going to inspect what we built\", as documents a later session (the implementer) could pick up and run with.\n\nAs part of the quality gates, I defined a few review sub-agents.\n\nOne of them is alarming from the name alone.\n\n**skeptic**.\n\nIts job: \"go disprove the claims in the design doc.\"\n\nA normal reviewer's job is to verify.\n\nNot this one. Its definition says:\n\nI have to admit, I built a genuinely unpleasant agent.\n\nI saved the skeptic's definition file.\n\nAnd immediately thought, as if it were the obvious thing to do:\n\nWhat if I point this thing at the design doc I just finished writing?\n\nHanding my own execution plan to an agent I defined as \"its job is to disprove you.\"\n\nBit of a masochist move, but I ran it.\n\nResult: **4 findings, all MAJOR**.\n\nFrom a design doc I had written minutes ago. The ink wasn't even dry.\n\nThe one that hit hardest was this.\n\n**I had written a statement that contradicted a rule I set myself.**\n\nThis project has a strict rule: \"block all outbound communication.\"\n\nAnd that rule carries an invariant: \"there is exactly one loophole, and it's here\" (I defined it myself as the only hole).\n\nYet somewhere else in the design doc, I had casually written \"add a new loophole by reusing the existing procedure.\"\n\nOpening a second hole in the thing I had declared to have exactly one.\n\nI had walked straight through my own invariant.\n\nThe other three findings were the same species of hole.\n\nEvery one of these is something I'd spot in ten seconds in someone else's PR.\n\nIn a document I wrote fifteen minutes earlier, they were completely invisible.\n\nIf you just ask \"review this design\", the AI puts on its honor-student face.\n\n\"Great work. A few minor improvements...\"\n\nThose four findings never make it into the \"minor improvements.\"\n\nWhat worked, I think, was flipping the success condition upside down.\n\nA reviewer for whom \"finding no problems = success\", and\n\na reviewer for whom \"failing to disprove = defeat\",\n\nread the same document and do completely different things.\n\nThe latter loses unless it hunts for flaws, so it digs for holes like its life depends on it.\n\nCutting off the \"looks reasonable overall\" escape route in the definition itself is what did it.\n\nWhen you run development doc-driven, you eventually hit a wall that no amount of source-of-truth hygiene fixes:\n\n**the person who wrote the source of truth is the least qualified to review it.**\n\nRight after writing, the \"what I meant to say\" in your head overwrites the actual characters, and you see assumptions that aren't on the page.\n\nSo the reviewer you should hire isn't one that approves you.\n\n**You unleash a reviewer whose job is to disprove you on the person who wrote the deliverable: yourself.**\n\nAnd the most ironic part this time: the disproving agent was itself a deliverable of this very design.\n\nI shot my freshly written design with a freshly built inspection tool.\n\nAn inspection tool shows its true value the moment you aim it at yourself.\n\nAfter fixing the findings, I hesitated over whether to run the same skeptic for another round.\n\nIt feels like it could keep punching forever.", "url": "https://wpnews.pro/news/i-banned-claude-from-saying-looks-reasonable-and-it-started-finding-my-blind", "canonical_source": "https://dev.to/jun_uen0/i-banned-claude-from-saying-looks-reasonable-and-it-started-finding-my-blind-spots-491l", "published_at": "2026-09-13 01:47:50+00:00", "updated_at": "2026-09-13 01:56:22.500649+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "large-language-models", "ai-products", "developer-tools"], "entities": ["Claude"], "alternates": {"html": "https://wpnews.pro/news/i-banned-claude-from-saying-looks-reasonable-and-it-started-finding-my-blind", "markdown": "https://wpnews.pro/news/i-banned-claude-from-saying-looks-reasonable-and-it-started-finding-my-blind.md", "text": "https://wpnews.pro/news/i-banned-claude-from-saying-looks-reasonable-and-it-started-finding-my-blind.txt", "jsonld": "https://wpnews.pro/news/i-banned-claude-from-saying-looks-reasonable-and-it-started-finding-my-blind.jsonld"}}