The Plan Is Not the Permission
Suneet Malhotra
Sep 02, 2026
The most dangerous sentence in an agent workflow is often the most reasonable one: "The next step is to update the file."
That sentence can be correct. The file can be the correct target. The proposed edit can pass review. The surrounding reasoning can be excellent. None of that means the agent should be allowed to perform the write.
A plan is a description of intended behavior. Permission is a property of the execution boundary. I used to let those concepts sit beside each other as if one naturally implied the other. They do not.
A correct plan can still cross the wrong boundary
Consider a routine that notices a broken checkout and proposes a repair. Its analysis may correctly identify a stale directory, select the right repository, and construct a safe recovery sequence. The final action might still be outside the routine's authority. Perhaps it can prepare a patch but cannot push to the remote. Perhaps it can publish a blog entry but cannot send a social post.
Those are not model-quality problems. They are ownership problems. A persuasive explanation is not an access-control token.
The distinction is visible in a state transition: observed, proposed, authorized, executed, verified. Many agent systems collapse the middle into one step: observed, executed. The missing state answers a concrete question: who, or what policy, permitted the transition?
The write boundary should be narrower than the reasoning
I want the reasoning surface to be broad. An agent should inspect logs, compare files, identify likely causes, and explain alternatives. I want the mutation surface to be narrow. The process should have an allowlist of paths, commands, and side effects.
That asymmetry is useful because analysis is reversible and a write often is not. A generated explanation can be discarded. A pushed commit changes the shared record. A message can reach a person. A market order can change a portfolio. The cost of a wrong final step is not proportional to the quality of the preceding analysis.
For a small content routine, the boundary can be explicit: read the editorial files and target repository; write only the source file and local memory log; run the build; inspect the generated route; commit only the intended source file; push only after the postcondition is known.
The important part is that the list exists outside the model's prose. If the agent can redefine its own permissions while explaining why the change is needed, the boundary is only a suggestion.
Verification belongs after authority
There is a second trap: treating a successful command as proof that the authorized action happened correctly. A command can exit cleanly while changing the wrong file, branch, or a larger set of files than intended.
The postcondition must distinguish a real state change from a plausible-looking transcript. For this blog workflow, that means checking the new identifier, confirming the route exists in the built output, reviewing the staged diff, and verifying the remote commit. For a trading workflow, the equivalent record would include the intent identifier, broker response, terminal order state, and reconciliation result.
The sequence matters: permission, action, postcondition. A test that only asks whether the model recommended the right action misses the failure at the boundary. A test that only asks whether a command returned zero misses whether the intended state now exists.
What I would change
I would give every agent routine a declared executor and a declared write set. The executor can be a human approval, a narrowly scoped job, or a service account with one purpose. The write set should be machine-checked before the action, not inferred from the final explanation.
I would also log refusals as first-class outcomes. "Did not publish because authorization was absent" is more useful than an empty log followed by a guess that the agent failed. An agent that refuses at the correct boundary is behaving correctly, even when its plan is sound.
The durable lesson is simple: intelligence can improve the plan, but authority makes the plan real. Keep those responsibilities separate. That separation is the control.
Share this post
You Might Also Like
The Log Is Part of the Agent's Interface
An agent that can act but cannot leave a useful decision record is not autonomous. It is an opaque process with write access.
Agentic AIThe Agent Did Not Need More Context
When an agent edits a shared checkout, the dangerous variable is not context length. It is the boundary around what the run is allowed to write.
Quantitative TradingThe Quote Is Not the Fill
A backtest can use the right price and still model the wrong trade. The missing variable is often not slippage. It is the time between seeing a quote and joining the book.
AI & AutomationReplay the Decision, Not the Answer
Agent tests that compare only final answers miss the failure that matters: the same input can produce a different tool choice, path, or refusal before the answer changes.
Latest Blog Posts
The Quote Is Not the Fill
A backtest can use the right price and still model the wrong trade. The missing variable is often not slippage. It is the time between seeing a quote and joining the book.
Replay the Decision, Not the Answer
Agent tests that compare only final answers miss the failure that matters: the same input can produce a different tool choice, path, or refusal before the answer changes.
AI Infrastructure 101 for QA Engineers: From a Prompt to a Test Result
AI infrastructure for QA engineers: understand the path from data center, GPUs, memory, and networking to model execution and reliable LLM evaluation.
Related Tools & Demos
The QA Field Manual to Language Models
A free 24-chapter book. Start at βwhat is AI, really?β and finish with a small language model you built yourself β one that reads a failing Playwright test and proposes a fix you can run. Read it in your browser, or download the PDF or the Mac app.
View Source Code βMulti-Model LLM Harness
One interface to call any AI model β capability routing, fallback chains, budgets, circuit breakers, and a quality feedback loop. A practical architecture pattern write-up.
Automated Trading System
Multi-engine trading platform with real-time risk management, regime-based strategy selection, and automated order execution.
View Source Code β
Stay in the Loop
Get weekly insights on AI-driven QA, engineering leadership, and automation strategies.
No spam, ever. Unsubscribe anytime.