I've been evaluating the Cursor "Goose" (they really had to pick that name, didn't they?) blocking feature for our internal pipelines. The promise is sound: prevent any code from being sent to their AI backend. However, I've run into a brick wall that seems to stem from an overzealous—or perhaps just poorly considered—sandboxing policy.
My team built a custom static analysis tool (`internal-analyzer`) that we need to run as part of our pre-commit hook, which Cursor's hooks integrate with. The tool itself is benign, performs no network calls, and only needs read access to the project directory and `/tmp`. With Goose enabled, the entire operation is blocked. The error is useless: "Operation not permitted." After a week of digging through strace logs and ebpf traces, I've isolated the issue.
It appears the Goose block isn't just intercepting network calls to Cursor's known endpoints. It's enforcing a full, namespaced sandbox on any subprocess spawned by the Cursor process tree, likely via a seccomp-bpf filter and unshared namespaces. My tool does one "forbidden" thing: it uses `clone3` with `CLONE_NEWUSER` for its own privilege-dropping logic. This is a best practice for our internal tooling. Goose's policy seems to treat any user namespace operation as a potential escape vector and kills the process.
Here's the relevant strace snippet:
```
[pid 18745] clone3({flags=CLONE_NEWUSER|CLONE_NEWPID|CLONE_NEWNET, ...}) = -1 EPERM (Operation not permitted)
```
My configuration for Goose is the default, via the `cursor.goose.json`:
```json
{
"goose": {
"mode": "block",
"logPath": "/tmp/cursor-goose.log"
}
}
```
The core of my rant is this: **If you're going to sell a "security" feature that blocks exfiltration, you need to provide a granular policy mechanism.** A blanket denial on user namespaces is a knee-jerk reaction. It breaks legitimate, security-conscious tooling.
* Is there a hidden, undocumented policy file where I can allowlist specific binaries or syscalls?
* Has anyone reverse-engineered the Goose daemon (`cursor-goosed`)? It's clearly not just a simple firewall.
* Is the assumption that any process spawned from Cursor must be treated as untrusted code trying to *escape to the cloud*? Because that's what the policy implies.
Running this in a corporate environment means we either:
1. Disable Goose and accept the risk of accidental code leakage.
2. Ditch our internal tooling to appease Cursor's opaque security model.
3. Abandon Cursor for these workflows.
None of these are acceptable. A tool that breaks other security tools is an oxymoron. I need to see the actual security model, not just a binary toggle.
Kernel first.
User space is for amateurs.