Git worktrees are not an isolation boundary for coding agents
11–20 of 43 posts
Re: Git worktrees are not an isolation boundary for coding agents
#12Re: Git worktrees are not an isolation boundary for coding agents
#13Re: Git worktrees are not an isolation boundary for coding agents
#14I haven’t hit these issues when using worktrees. But what’s a pain is having to compile from scratch every time, and not carrying over gitignored files.
Re: Git worktrees are not an isolation boundary for coding agents
#15Do people not know how to write blogs without AI anymore? I enjoy hearing a human's unique voice and miss hearing it when it's abscent.
Re: Git worktrees are not an isolation boundary for coding agents
#16For me the most pragmatic way to solve this is in the agent harness layer simply prohibiting commands like git force and others in the settings configuration of your harness of choice with pre tool hooks, its quite easy to setup, obvious ones are prohibiting pushes to main, among others. Unless someone is building their harness from scratch like you this is a 30sec configuration and you could just save your list of b…
Disclosure: I'm building AQ (aq.dev) a multiplayer coding harness.
Re: Git worktrees are not an isolation boundary for coding agents
#17If you want to properly isolate things, use containers. That's not what worktrees are for.
Re: Git worktrees are not an isolation boundary for coding agents
#18I haven’t hit these issues when using worktrees. But what’s a pain is having to compile from scratch every time, and not carrying over gitignored files.
Re: Git worktrees are not an isolation boundary for coding agents
#19We use nono [1] for this internally, essentially blocking any actions we don't want agents to be able to do without human approval. Our developers can just run `task claude` or whatever their harness is) and it pre-wraps it with our profile that enforces:
- Filesystem: read/write only the worktree plus dev-tooling dirs (Go, Doppler, Graphite caches, git common dir); explicitly no Docker socket and it can't edit its own Claude settings files (so it can't loosen its own permissions).
- Network: outbound only to an allowlist - Anthropic, Doppler, Go module proxies, our dev environments while still allowing binding local dev-server ports.
- GitHub: read anything in the org, and create/edit PRs and push branches - but it cannot merge, close, review, or comment on PRs, delete branches, touch repo settings/secrets, manage auth, or use raw gh api. Those are all "human-only". GitHub tokens are never exposed to the agent; they're injected by a proxy so it can't read or exfiltrate them.
This is great because it is harness agnostic - any developer can use whatever harness they want as long as they port the nono profile to it, as it will enforce all of the above in a way that is not tied to a specific harness implementation