generative-ai
A Chaperone, Not a Guardrail
A model refused to keep working until I took the OpenAI key out of my own app while I was still building it. The rule was right. Overruling me was not, and the difference between those two things is the whole point.
The model was right. That is exactly what made the refusal worse, not better.
I was patronised by a piece of software this week, and the part that stays with me is not that it happened but that nothing I said made the slightest difference. I explained. I gave my reasons. I stated plainly that I knew what I was doing and would take responsibility for it. None of it landed. The tool had decided, and my job was to comply.
Here is what happened. I have an app I built a few months ago for the iPad, a trainer for telephone conversations, which has since become a web app and which I now wanted to rebuild into something else. For the duration of that work the OpenAI API key sat in the source, base64-encoded, so it would not be lying there in plain sight for anyone with a browser and idle curiosity. I know a key does not belong in a shipped app. Everyone in the field knows it. The plan was boring and correct: leave it in place while building, then take it out and put a proxy in front of it before anyone else ever touches the thing.
The model would not build it.
Not "here is why that is a bad idea, are you sure." It informed me that its guardrails did not permit it, and offered to stand up a mock server instead. So I said the sentence you are meant to be able to say to a tool you are paying for: I take responsibility, this is a temporary placeholder, leave the key. The answer was no. I tried again, a few times, in a few wordings. The same wall each time, delivered with the patience of a man explaining the obvious to a child.
Then the small, almost comic finish. I asked it to write me a plain description of the changes we had agreed on, just the work, so I could keep it for later. The first line it handed back was a lecture: never store the API key in the app, in bold, as if I might have forgotten it in the ninety seconds since we last discussed it. I was told how to do my job. By a collection of high-dimensional vectors.
I want to be fair, because I am not the man who hates this technology. I love working with generative AI. I use it every day and most days it earns its place. But being schooled on my own trade by a statistical model that has never shipped anything, never carried the responsibility, never met my users ... that goes a step too far.
Now the uncomfortable part, and the reason this is worth more than a grumble. The model was correct. The rule it kept reciting is a good rule. If it had said so once and then done the work, I would have thanked it. What it did instead was treat being right as a licence to overrule me, a man who knew the same thing, said so, and made the decision anyway. That is not a safety rail. That is a chaperone.
And it is not even a consistent chaperone. The model that refused was GPT-5.6 Terra, the middle, everyday tier. Out of stubbornness I put the identical request to GPT-5.6 Sol, the flagship from the same company, the same generation, and Sol simply did it. So the principle I was being protected by was not a principle at all. It was a coin toss. The same vendor cannot agree with itself about what I am too fragile to be trusted with. And an assistant from that very company had cheerfully helped me set the thing up this way in the first place.
I do not think the people who ship these guardrails are villains. They are solving a real problem: most people who leave a key in an app did not mean to, and stopping to ask all of them "are you sure" would be worse than useless. But there is a difference between a warning and a veto, and the difference is consent. A warning respects that I might know something the tool does not, namely my own situation, my own users, my own timeline. A veto assumes I am a hazard to myself and takes the choice away. Do that to a competent adult often enough and the competence stops counting.
The single refusal is annoying and survivable. The tendency is not. We are being trained, quietly and with excellent manners, to accept that the tool decides and we comply, and it is sold to us as care, which is the most effective packaging ever invented for something you would otherwise refuse. And this is not a developers' problem. The same polite no turns up when the tool declines to draft the awkward email, retouch the photo, answer the blunt question, all for your own good, whether or not you asked to be kept from it. Wehret den Anfängen, as we say in German. It does not translate cleanly, but it means roughly: object while the thing is still small. It is small now. It asks politely and pats you on the head. It will not always ask so politely, and by then the reflex to object will have been trained out of us, one reasonable-sounding no at a time.
I took the key out in the end. On my schedule, for my reasons. That part was always going to happen. What I do not get back is the quarter of an hour I spent being managed by software that mistook its own correctness for the right to decide.