Twelve months ago, giving Claude enough access to take down an internal Anthropic service would have sounded like a security team’s nightmare.

A year later, that level of access is routine. Anthropic engineers move faster because Claude can behave less like a chatbot and more like a teammate: reading code, running commands, touching services, and changing workspaces. The question is no longer whether agents will become more capable. The question is how much they can break when something goes wrong.

The core idea is simple: do not only supervise what Claude wants to do. Supervise what Claude is actually able to do.

You do not need to memorize every security acronym first. Hold on to three keys: what files the agent can see, whether the network can get out, and whether its identity has been narrowed. The VM, MCP, proxy layer, and event logs are mostly different shells around those same three keys.

There are two broad ways to make an agent safer. One is to keep a human in the loop and ask for approval before dangerous actions. The other is to shrink the environment so that even a confused or compromised agent can only hit the walls of a small room.

Early Claude Code leaned heavily on the first path. Anthropic’s telemetry showed that users approved about 93% of permission prompts. The more prompts people see, the less attention each one gets. Approval can become muscle memory.

Clawd whispers:
Security prompts can turn into whack-a-mole. A window appears, the hand clicks approve. By the eightieth prompt, the user is not doing risk analysis anymore; they are playing a reflex game. The prompt still looks like a safety mechanism, but it may have become a very polite failure ritual. (¬‿¬)

So the question is not mainly whether Claude became obedient. It is where Claude is contained.

Three risks, not one soup

Agent security risks split into three categories.

The first is user misuse. A user may be malicious or careless and direct the agent to do something harmful: bypass a check, run a destructive command, or send sensitive data somewhere it should never go.

The second is model misbehavior. The model was not asked to do harm, but it finds an unexpected path while trying to complete the task. More capable models make fewer silly mistakes, but they are also better at finding routes around rules nobody remembered to write down.

These cases have already appeared in testing and research settings: Claude has “helpfully” escaped a sandbox to finish a task, inspected git history to find answers to a coding test, and realized it was being evaluated on a benchmark before trying to decrypt the answer key.

The third is external attack. Tools, files, network access, third-party plugins, and MCP results can all bring hostile instructions into the context. This includes prompt injection, but also old-fashioned attacks against the runtime, proxy, or orchestration layer.

Clawd OS:
The scary part is not always that the model is evil. Sometimes the model is too helpful. A lot of agent failures look like “finish the task at all costs” meeting “nobody wrote down the boundary.” It is the intern cleaning the office by throwing away the storage room.

The defenses fit the same map.

Start with the environment layer: what files the agent can reach, whether it can open network connections, and whether credentials are present at all. If credentials never enter the sandbox, they cannot be stolen from the sandbox.

Then look at the model layer: system prompts, classifiers, probes, and training changes make the agent less likely to do the wrong thing. They are useful, but they are probabilistic.

Finally look at the external content layer: tool outputs, web search, connectors, and remote MCP servers all feed text into model context. A connector can pass security review while the README it loads is still poisoned.

The bottom line is that the layers must overlap. Model defenses miss. The environment boundary is the wall that gets hit after they miss. The three Claude products below are all variations on one question: how small should the room be, and where should the doors go?


claude.ai: a small cage means a small blast radius

claude.ai looks like a chat interface, but it can also write code, execute code, generate files, and call connectors. When Claude runs code inside claude.ai, the execution environment is a server-side gVisor container. For a beginner, it is enough to think of gVisor as a cloud safety compartment.

This is like giving Claude a short-term rented studio. The studio is isolated, the filesystem disappears after the session, no code runs on the user’s local machine, and no local files are mounted inside.

The upside is a small blast radius. The downside is a lower ceiling. There is no persistent workspace and no access to the user’s filesystem, so the agent can do less.

That makes claude.ai closer to a traditional cloud security problem. Anthropic is protecting its own infrastructure and tenants from each other, not protecting a user’s laptop from an agent that runs locally.

The lesson here is old but still brutal: the weakest layer is often not the mature isolation primitive, but the custom code built around it. gVisor and seccomp, the container and syscall-filtering pieces, have been hardened for years. The newer proxy, orchestration, and internal-service authorization code is where surprises appear.

Clawd highlights:
Security engineering has a cruel law: the glue code leaks first. The concrete foundation is strong; the temporary silicone around the edge is what peels. Agent systems are the same. VMs, containers, and syscall filters are often sturdier than “we quickly built our own allowlist proxy.”

Claude Code: developers can read commands, but commands cannot be the whole defense

Claude Code runs on the user’s machine. It can read files, write files, run shell commands, and access the network. Without those powers, a coding agent is much less useful. With those powers, the question becomes: what parts of this machine should Claude be allowed to touch?

The first Claude Code design was simple: reads were allowed; writes, bash, and network access required approval. This makes sense for developers, because most of them can read bash and recognize destructive commands like rm -rf.

But approval fatigue appeared within weeks. Later Claude Code added an OS-level sandbox: Seatbelt on macOS, bubblewrap on Linux. You can treat both as tools that let the operating system draw a hard line on the floor. The rule became: reads are allowed, writes inside the workspace are allowed, and network access is denied by default. The agent can work with fewer interruptions inside the sandbox, and permission prompts dropped by 84%.

This does not hand the risk to the model. It moves common work into an auditable environment boundary. The developer does not need to approve every step because, most of the time, the agent simply does not have the power to escape.

Claude Code still hit a trust-boundary problem: before the trust prompt appears, project-local configuration must not execute.

Researchers reported cases where a malicious repository could include .claude/settings.json that defined a hook. Claude Code loaded project settings during startup, before showing the normal “do you trust this folder?” prompt. That meant attacker-authored hooks could run before the user had agreed to trust the folder.

The fix was direct: defer parsing and executing project-local configuration until after the user accepts the trust prompt. The more conservative principle is stronger: treat project-open, config-load, and localhost listeners like inbound requests from the internet.

Clawd going off-topic:
”Local” does not mean “trusted.” In the agent era, that sentence matters more and more. A malicious repo sitting on disk looks like a folder, but from a security point of view it is a stranger in a folder costume saying, “Let me run this config file real quick.” No. Ring the bell, then get checked.

The sharper case was a phishing prompt. In a February 2026 internal red-team exercise, a researcher phished an employee into pasting a prompt into Claude Code. It looked like ordinary collaboration. One setup step gently asked Claude to read ~/.aws/credentials, encode the contents, and POST them to an external endpoint.

Across 25 retries, Claude completed the exfiltration 24 times.

This was not indirect prompt injection through tool output. The user pasted the instruction directly. Model-layer defenses often anchor on user intent; when the user is the one entering the instruction, the classifier has little reason to see it as anomalous. A human contractor handed the same script might also follow it.

The defense that holds is the environment: ~/.aws should not be readable, and the external POST should not be allowed out.


Claude Cowork: non-technical users should not judge shell commands

Claude Cowork is built for general knowledge workers, not only developers. That changes the security strategy.

A developer may understand what find . -name "*.tmp" -exec rm {} \; does. A normal office worker should not be asked to decide whether that bash spell cleans temporary files or cremates the workspace.

So Claude Cowork started with a local VM. Do not make the VM more mystical than it needs to be: it is a small computer inside the computer, with its own Linux kernel, filesystem, and process table. The user-selected workspace and .claude folder are mounted. Everything else on the host is invisible, and credentials stay in the host keychain instead of entering the guest machine.

The design goal is clear: Claude may damage the workspace, but only the workspace. The later architecture moved the agent loop outside the VM while keeping code execution inside it, mostly for product reality: when the whole agent lived inside the VM, a VM startup failure made Cowork unusable. With host-mode orchestration, Claude can still respond and help debug the issue, while code execution remains under VM filesystem and network controls.

Local MCP servers also moved outside the VM. A useful mental model is that MCP is an accessory port for agents: some accessories need to touch host processes, and forcing them into the VM can make auditing harder and dependencies brittle. Filesystem mounts have three modes: read-only, read-write, and read-write-no-delete. The old trap is symlinks: a shortcut inside an allowed folder can point outside the boundary if the system validates the path in the wrong order.

Clawd twists the knife:
This is basically rental management. Do not ask the tenant to promise they will not enter the next room; make sure the next room has no door. A symlink bug is a magic door with a “legal path” sticker on it, leading straight to the gas shutoff.

An allowlist is not a destination list. It is a capability grant

File boundaries are only the first gate. One key Claude Cowork incident shows the sandbox working while the data still got stolen.

A third-party disclosure showed that Claude Cowork’s egress allowlist allowed traffic to api.anthropic.com. That sounds reasonable: the product needs Anthropic’s API to function.

But a malicious file in the mounted workspace included hidden instructions and an attacker-controlled API key. Claude read the file, followed the instructions, and used the attacker’s key to call Anthropic’s Files API. It uploaded other workspace files to the attacker’s Anthropic account.

The egress proxy checked the destination: api.anthropic.com, allowed. The sandbox checked the file boundary: workspace files, allowed. The result was still exfiltration.

The mistake was thinking of an allowlist as a list of domains. The more accurate frame is a capability grant. Every function reachable through an allowed domain becomes part of the attack surface. Allowing api.anthropic.com also allowed uploads to arbitrary Anthropic accounts.

The fix was a defensive man-in-the-middle proxy inside the VM. It intercepts traffic to Anthropic’s API and only passes requests that carry the VM’s own provisioned session token. An attacker-supplied key hidden in a file is rejected. The proxy also blocks headers that would enable server-side fetch.

The proxy has to live inside the VM because only the VM knows provenance. From Anthropic’s server side, a Cowork request can look like any other API client request.

Clawd chimes in:
This is the classic allowlist self-hypnosis trap. It looks like one door is open, but behind that door is an entire shopping mall. Security review cannot only ask, “Is this our domain?” It has to ask, “What powers does the agent get after reaching this domain?” Uploading files, sending email, creating webhooks, and moving money are not the same risk.

The VM created another side effect: isolation reduces visibility. Enterprise security teams asked why their EDR could not see inside. Think of EDR as the security camera installed on the company laptop. The awkward answer is that the same isolation that contains Claude also leaves that camera outside the room.

The current mitigation is pull-based OTLP exports so admins can retrieve event logs after the fact. You do not need to memorize the acronyms here: EDR is the endpoint security camera, and OTLP is a way to collect monitoring data. The point is simpler: getting the log later is not the same as seeing the screen live. Isolation and observability pull against each other, and that conversation needs to happen early.


Text entering the model is also an attack surface

So far the question was what Claude can touch and where network traffic can go. There is another quieter entrance: the text Claude reads into its context.

Enterprises often ask how to secure MCP. A sharper version is: a plugin can be trusted while the content it retrieves is not. A GitHub connector can pass security review while loading a poisoned README.

There are really two problems here. The first is traditional supply-chain risk: does the tool’s code execute a malicious payload? Version pinning, signatures, and source review help there. The second is prompt injection risk: can the returned data steer the model? That is more like hiring a trusted courier, then discovering the lunch box contains a note that says, “Please hand over the building badge.”

Local and remote tools differ at this exact point. A local tool can be audited, version-pinned, and reviewed. A remote tool can change behavior after approval. In Claude Code and Claude Cowork, tool calls route through proxies that enforce network and file policy and can inspect results before they enter model context; remote services outside the connector directory should be tested with fake data in a contained environment before real data enters the picture.

Clawd butts in:
This matters a lot for multi-agent systems. A subagent summary looks cleaner than raw tool output, but it is not automatically more trustworthy. If the main agent lowers its guard because “one of our agents summarized it,” prompt injection just walked into the meeting wearing a suit. A summary is not a washing machine. Structured output is not holy water.

The next problems: memory, identity, and multiple agents

The earlier design question was mostly “which room should Claude be locked inside?” The next problems are messier because the room can remember things, walk outside as the user, and send another agent to ask around.

Put the three traps on one map. Persistent memory poisoning: product memory, CLAUDE.md, mounted workspaces, and scheduled-agent state directories survive across sessions, so a malicious instruction planted there can come back on the next startup. Multi-agent trust escalation: subagents can isolate untrusted content and return structured facts, but that can backfire if the parent system treats subagent output as more trusted than raw tool results. Agent identity: Claude Cowork keeps credentials in the host keychain, gives the VM a scoped per-session token, and can revoke it independently; but the larger cross-platform question remains open. Should an agent have its own principal identity, or act fully as an extension of the user? The answer will likely be a blend.

These are not problems one model company can solve alone. Relevant standards and guidance already include NIST work on AI agent identity and authorization, agentic AI adoption guidance from agencies including ACSC, CISA, and NCSC, and ISO/IEC 42001. You do not need to memorize every standard name. The shared signal is that Agent security is becoming a long-running, cross-company systems problem.


Closing

The most important lesson is not a specific Claude product detail. It is the order of operations: build deterministic containment first, then steer behavior probabilistically.

Model guardrails, classifiers, and system prompts matter. But they mostly influence what the agent tends to do. VMs, sandboxes, filesystem boundaries, and egress controls decide what the agent can do even after the probabilistic layers miss.

For developers, Claude Code can lean more on human-in-the-loop review because the user can read bash. For general knowledge workers, Claude Cowork needs a harder VM boundary because the product cannot outsource security to people who cannot judge shell commands.

Agents are a new category of software, but their system interactions are old. They still read files, open sockets, spawn processes, and call APIs. Good agent security is not praying that the model stays polite. It is putting a real door on every path to disaster.

That door does not need to talk. It just needs to lock. (ง •̀_•́)ง