Originally published on tamiz.pro.
The hype cycle around Large Language Model (LLM) agents has shifted dramatically. We moved from "Can it write a poem?" to "Can it write code?" and now to "Can it deploy that code and manage its own dependencies?" The engineering challenge has changed with it. It is no longer about prompt engineering or chain-of-thought fidelity. It is about agency without catastrophe.
I see it repeatedly in code reviews and incident reports: an agent configured with openai.FunctionCalling is given permission to execute shell commands, read the production database, and push to main. On a deterministic task, it works beautifully. On a stochastic one, it might hallucinate a function name, call it with malformed arguments, and trigger a cascade of state mutations that take three engineers four hours to reverse.
The hard part of building AI agents is not getting them to think; it is building the cages that keep them from breaking things when they don't. Containment, control, and debugging are not soft issues—they are the primary infrastructure constraints of modern autonomous systems.
The Illusion of Determinism






