You open Cline in VS Code, throw it a refactor task, and there's a toggle that basically says "don't ask me for permission on anything." Auto-approve for everything: file reads, writes, terminal commands, even deletes. I tried it. It works. The agent chains ten, fifteen actions without pausing, without you confirming a single thing, and in a five-minute demo it looks like magic.
The problem isn't that it doesn't work. The problem is that it works until it doesn't. And in a real codebase, that "until it doesn't" isn't some remote possibility — it's a matter of time.
My thesis is simple, and I hold it from the architect's chair, not from fear of AI: total autonomy for a code agent is a pretty demo right up until it deletes something it had no business touching. The restriction isn't distrust toward the tool. It's design. It's the same logic you apply when you give read-only permissions to a service that has no business writing, or when a CI pipeline doesn't have production credentials by default.
If you already read the previous post about how to configure Cline step by step, this is the one that comes after: not the how, but the why behind the restrictions I deliberately leave in place.
Cline VS Code AI agent: what the official source says and doesn't say
The official Cline page on the VS Code Marketplace is clear on one point: the permission model exists because every action the agent takes — creating files, editing, running terminal commands — goes through a checkpoint where the user can approve or reject. That's the baseline architecture. Auto-approve is an option you turn on, not the default behavior.
What the page doesn't say — and this matters just as much as what it does say — is that turning on auto-approve is a good practice for a team or a codebase with history. There's no editorial recommendation of "use it this way in production." It's a configuration feature, neutral, documented as a capability. The reading that "it's meant to always be used in autonomous mode" is a user interpretation, not a claim made by the extension.
That distinction is the foundation for everything that follows. The tool gives you the option. It doesn't tell you what to do with it.
Where people get total autonomy wrong
The common recipe, the one you see in threads and conference demos, is: "turn on auto-approve, let the agent work, review the diff at the end." Sounds efficient. The hidden cost shows up in three specific places:
Unfiltered terminal commands. If the agent can run any command without asking, it can execute a git push --force, an rm on a directory that wasn't the target, or a database migration script that wasn't meant to run twice. The agent doesn't have bad intent — it has incomplete context about what's reversible and what isn't.
Unbounded file scope. An LLM interpreting "fix the auth bug" can end up touching the deploy config file because, in its reasoning, "it was also related." Without an intermediate approval point, that scope creep isn't caught until it already happened.
Change accumulation without checkpoints. Fifteen chained actions with no pause means that if action number three made a wrong call, the next twelve build on top of that mistake. Reviewing the diff at the end means reviewing the output of a cascading chain of reasoning, not the reasoning itself.
The counter-argument people use to defend total autonomy is "but in an isolated sandbox, with a test repo, it doesn't matter." True. And I have no objection there: for quick prototyping in a disposable environment, auto-approve makes sense. The problem is when that same setup gets copied straight into an environment with real history, cross-cutting dependencies, and people who weren't the ones who wrote the prompt.
flowchart LR
A[Tarea al agente] --> B{Accion propuesta}
B -->|Lectura de codigo| C[Auto-aprobar]
B -->|Escritura en carpeta acotada| D[Aprobar con revision]
B -->|Comando de terminal| E[Pedir confirmacion manual]
B -->|Fuera del alcance declarado| F[Rechazar y replantear]That's roughly the criteria I use to decide what stays on auto and what stays with the handbrake on.
Decision matrix: when to restrict and when not to
This isn't a benchmark table. It's a sensible criteria for deciding the autonomy level based on the type of action, meant to apply to any codebase with history — it doesn't need to be a production one with real data for this to apply.
| Action type | Reasonable autonomy level | Why |
|---|---|---|
| File reading and analysis | Full auto-approve | No side-effect risk, just context consumption |
| Editing within a bounded folder (e.g. tests) | Auto-approve with later diff review | Blast radius is limited by project convention |
| Config editing (CI, env, deploy) | Manual approval always | The cost of an error there isn't local, it's systemic |
| Destructive terminal commands (rm, force push, drop) | Rejected by default, explicit approval case by case | These are the actions with no "undo" button |
| Installing new dependencies | Manual approval | Changes the attack surface and the project's dependency tree — something I already touched on when comparing npm and pnpm in monorepos |
The column that matters most to me as an architect is the middle one: "approval with later review." It's not all-or-nothing. That's the gray zone where the agent has room to work fast without every single step turning into a human bottleneck. That's where the real design decision lives — not at the "everything auto" extreme, nor at the "everything manual" one.
The limits of this position, said out loud
I don't have a controlled experiment measuring how many times an autonomous-mode agent broke something versus a restricted one. There's no public dataset I know of, and if someone has one, I'm not going to make it up here. What I have is a systems-design criteria applied to a new context: when you delegate an action with irreversible effects to an unsupervised executor, the expected cost of an error goes up — regardless of whether the executor is a script, a new hire, or an LLM.
That reasoning carries over from other engineering domains — it's the same principle that separates a health check that only confirms the process responds from one that confirms the process can actually do its job, something I already got into when talking about Docker healthcheck versus the orchestrator's healthcheck. The surface changes, the underlying logic doesn't.
What I can't conclude, because I don't have that evidence, is a number for "how much safer" restricting is versus not restricting. If someone tries to sell you that figure without showing the methodology, ask for the source before you believe it.
FAQ
Can Cline run in fully autonomous mode without asking for permission? Yes, it has an auto-approve option that can be turned on for reads, writes, and command execution. It's documented in the extension, it's not hidden behavior.
Is Cline's autonomous mode insecure by design? No. The default design ships with approval checkpoints. Insecurity shows up when the user turns off those checkpoints without bounding what the agent is allowed to touch.
Is auto-approve good for anything? Yes, for prototyping in a disposable environment or a sandbox where reverting any change costs nothing. There, the friction of approving every step doesn't add anything.
How do I decide which folders to leave on automatic mode?
A simple criteria: if an error in that folder is reversible with a git checkout and doesn't touch anything outside the repo, it's a candidate for autonomy. If it touches infrastructure config, credentials, or destructive commands, it isn't.
Does this only apply to Cline or to any code agent in VS Code? The principle of separating reversible from irreversible actions applies to any agent with command execution capability, it's not exclusive to one extension.
Does restricting the agent make it slower to work with? It adds friction at the points where the cost of a mistake is high. Everywhere else — reading, analysis, editing in bounded zones — there's no need to slow it down. You only lose speed where it's worth losing it.
My stance, no beating around the bush
I don't turn on full auto-approve in any codebase with real history, and it's not because I don't trust the model. It's because the model doesn't have the full context of which parts of the system are fragile and which aren't — I have that context, or the team does, and that's why the approval checkpoint stays mine.
The five-minute demo with total autonomy is going to keep being spectacular. What doesn't change is that a demo has no history, no data that matters, and nobody depending on that rm not going sideways. Designing the agent's limits before handing it the task is, for me, the part of the job that doesn't get automated — and probably shouldn't.
If you're just starting with Cline, my concrete suggestion: define first which folders and which commands are "red zone" in the project, and configure the approval level based on that list, not the other way around.
Original source:
- Cline VS Code Marketplace: https://marketplace.visualstudio.com/items?itemName=saoudrizwan.claude-dev </content>
Related Articles
TigerFS Isn't a Filesystem, It's a Promise of Determinism
TigerFS is the storage layer TigerBeetle uses to guarantee total determinism. It's not competing with ext4 or btrfs: it solves a very specific problem in high-consistency financial systems.
Aug 22 2026 · 8′ · Tutorials · rust · sistemas distribuidos
Noroboto: Lying Fonts and Rust Mitigation — A Technical Read Without the Hype
Fonts lie. Noroboto documents how the text subsystem can return incorrect metrics and proposes mitigations in Rust. Before you copy it into production, you need to understand what problem it actually solves, where the common recipe breaks down, and what reproducible experiment is actually worth runn
Aug 17 2026 · 8′ · Opinion · linux · sistemas
Cline in production: the autonomous code agent for VS Code I use with deliberate constraints
Cline can create files, run commands, and open the browser autonomously from inside VS Code. That sounds like productivity. It also smells like risk if you haven't thought through the permissions before you start. My thesis: the mental model matters more than the tool.
Aug 17 2026 · 9′ · Tutorials · TypeScript · LLM
Comments (0)
What do you think of this?
Drop your comment in 10 seconds.
We only use your login to show your name and avatar. No spam.
No comments yet. Be the first — your take matters most when we're few.