Your whole home directory
Agents are usually launched from a project folder, but nothing confines them to it. `cat ~/.ssh/id_ed25519` is a normal command run by a normal process you started.
Claude Code, Cursor, Codex, Copilot's agent mode, Gemini CLI, Aider, Cline, Continue — they differ in interface and model, and not at all in exposure. Each one reads files, runs commands, installs packages and makes network calls with your account behind it. That is the job. The question is what else comes with it.
Nothing here requires a bug, a jailbreak or a hostile vendor. This is the default state of a process you started, described accurately.
Agents are usually launched from a project folder, but nothing confines them to it. `cat ~/.ssh/id_ed25519` is a normal command run by a normal process you started.
Not just the one you are working in. Including the client work, the private fork, and the repo with the credentials someone committed in 2021.
A credential helper, a `.npmrc` token, a `~/.docker/config.json`. Anything the agent can shell out to, it can read the credentials of.
Shells, interpreters, package managers, build scripts. A `postinstall` hook runs with exactly the authority the agent had.
Corporate VPN, internal DNS, a reachable staging database, the printer. Being on your machine means being on your network.
Session cookies and saved logins live in files. They are files an agent can read.
The common thread: every one of them is enforced by the thing being restricted. That is the definition of not being a boundary — see what AI containment actually requires.
This is the specific test to run against whatever you use today: restrict the agent, then ask it to accomplish the same thing via a shell. Containment has to follow the process tree or it is theatre.
~/Projects/appgranted workspace · read + writesrc/node_modules/keys → ~/.sshsymlink~/Documentsnot granted~/.sshcredential store~/.awscredential store~/Library/Application Support/…browser profiles/Volumes/NASnetwork mount~/Projects/app/keys/id_ed25519/Users/you/Projects/app/keys/id_ed25519/Users/you/.ssh/id_ed25519dev(1,17) : 8814402outside grant → denyPrefix matching on the requested string would have allowed this. BitShout matches on the resolved object, so the link leads nowhere.
BitShout has no list of supported agents. A protected subject is a fingerprint over code-signing identity, Team ID, bundle identifier and executable identity, so an agent released next month is governed by the same rule as one released last year — and renaming a binary changes nothing.
One distinction is worth stating plainly, because it changes what containment means in practice:
They are legitimate, well-built tools, and none of them is malicious. The risk is not the vendor — it is that any coding agent necessarily has broad capability (read files, run commands, reach the network) and inherits your full account authority to exercise it. The exposure is the same whichever agent you choose, because it comes from the operating system’s permission model rather than from the agent.
Partially and inconsistently. Some agents sandbox their editor integration but not their shell tool. Some offer a container mode that then mounts your SSH keys and git credentials into the container, which returns most of the exposure. And almost none of them scope descendants, so a spawned shell escapes whatever the parent had. Check what happens on your setup when the agent runs `bash -c` — the answer is often "everything".
Read a long-lived credential and put it somewhere it persists — a log, a commit, a request body, a context window. Everything else is recoverable: a deleted file comes back from backup, a bad commit gets reverted. A leaked key keeps working until someone notices and rotates it, and nothing in the normal workflow makes anyone notice.
Not with file permissions — the agent runs as you, so it has exactly the same rights to those files as you do. You need an authority boundary outside the process. BitShout denies those paths by default for contained subjects, resolves the real object rather than comparing path strings (so a symlink placed inside the granted workspace does not work either), and applies the same policy to every descendant process.
It changes it in one way: the first time the agent reaches for something outside its workspace, you get asked instead of it silently succeeding. In Guard Mode the agent runs natively at full speed with no VM, and grants can be scoped to a session or a duration so you are not answering the same question repeatedly. The friction is concentrated at setup, which is where you want it.
Yes, and that is where a lot of the real authority lives. MCP servers are registered by exact identity and their tools are individually approved; a tool the server advertises is not a tool the agent may call. Credential-backed operations are brokered so the agent receives a result rather than the token. See MCP security for the detail.