Example home page: https://taude.xyz/ Example AI Slop post: https://taude.xyz/posts/the-tool-stack-behind-this-blog/
Not trying to self-promote, but honsetly trying to leverage AI when appropriate, and to also not take away from my hand-written articles that are typically my thoughts and opinions....
https://simonshine.dk/articles/vendoring-hugo-themes-with-ni...
Of course, if you're that lazy, you're going to surround yourself and industry with AI-generated websites and UI, and you're going to recognize it, so...
We 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
the better alternative is using sandboxes, for TRUE isolation.
but most people skip them because it's harder to set up a dev environment in a sandbox, for this I built agentbox [1], a tool to teleport your files, skills, settings, claude/codex subscriptions etc in any of the popular sandboxes. eg:
agentbox e2b claude
or:
agentbox hetzner codex
each session is persistent, with a full VM, with a browser, webVNC screen sharing and local https tunnel for easy preview on *.localhost domains.
Also git credentials never leave your pc: when a box needs access it passes through the agentbox service running on your machine, which allows PR creations, comments but only on the box branch, no deletion etc.
Worth calling out that this doesn't close all of these types of attacks, just the ones that are invisible (claude could very well write ./hack.sh and tie that in to your main.go, but at least it would be a diffable change, instead of invisible like a git hook)
The parallel trees could have different ownership and access privileges, so that the editable working copy does not require the same filesystem access rights as the metadata tree. The git CLI actions would be performed with the more privileged filesystem role, and it would also have to be audited to make sure it treats all the working copy content as untrusted payload.
[0] jai.scs.stanford.edu/
Unless someone is building their harness from scratch like you this is a 30sec configuration and you could just save your list of blocked commands with wildcards in a file, and copy paste from one harness to the other.
Disclosure: I'm building AQ (aq.dev) a multiplayer coding harness.
So if all you want is to work on index.ts in a separate dir from api.ts then worktrees might work well
If you want to be able to rm -rf one of the dirs without wondering about dependencies then yeah multiple clones makes sense
Either way is a way to avoid using more fragile/finicky workflows like stash and stash pop
The only problem I ran into was when Codex or Claude Code were configured to create the worktrees nested into the parent repository.
Then grep would yield results from a worktree and the agent would happily start to work in the wrong worktree.
https://code.claude.com/docs/en/worktrees#copy-gitignored-fi...
An agent in a worktree can reach your hooks, your config, another worktree's stash. Probably not a common problem. But when it does happen you're not debugging your code, you're debugging git, and it's not obvious where to even start looking.
The one that actually bothers me is prompt injection. The agent reads an issue, or a dependency's README, or a web page, and what it's told to do is drop a file in the .git it can already write to. Next time you commit, that runs on your machine as you.
Separate thing - worktrees just get annoying to manage. Can't check out the same branch twice, so you're making up branch names to keep git happy. Every one is another directory to keep track of. Then something goes stale and you're back in git worktree prune.
So has any of it got to you? Or do you hit the annoying parts, shrug, and carry on?
We have had the tech for isolated, snapshottable, copy-on-write and commit-after-review filesystem workflows around for decades now. How long will it take for AI bros to discover it?
Local agents use worktrees. If you do not trust those (or your own input), then what are you doing?