Running Claude Code dangerously (safely)
100 points by emilburzo 3 hours ago | 80 comments
  • ompogUe 7 days ago |
    Keeping in mind with Vagrant: if you are using a synced_folder in your host as a source folder in the VM, those files in the synced_folder will be modified on the host.
    • emilburzo 6 days ago |
      Good point. For me, that was intentional, since all my projects are in git I don't care if it messes something up. Then you get the benefit of being able to use your regular git tooling/flows/whatever, without having to add credentials to the VM.

      But if you need something more strict, 'config.vm.synced_folder' also supports 'type rsync', which will copy the source folder at startup to the VM, but then it's on you to sync it back or whatever.

      • ompogUe 6 days ago |
        I like this workflow a lot, actually. Docker is great and all, but depending on the project, Vagrant helps "keep it simple".

        Thanks

    • gregoriol 2 hours ago |
      If the folder is versioned and commited regularly there is no problem. It also allows you to open the files in your IDE, do some other tasks or fixes for claude. It prevents claude from accessing any other folder, which is the idea of the post.
      • gcr an hour ago |
        I’ve seen Claude rm .git in rare occasions to “fix rebase hiccups”

        Version control ain’t a match for a good backup

        • gregoriol an hour ago |
          So? if it removes .git, just clone the project again and you are ok
  • tobyhinloopen 2 hours ago |
    How about running Claude as a different user with very limited permissions?
    • gregoriol 2 hours ago |
      This breaks the non-interactive mode the post want to achieve. Claude will not be able to install some things and will require user action, which is not desired here.
      • progval 2 hours ago |
        Like what? It can already use npm/pip/etc. And if it needs a new APT package or config in /etc/ then you would want to know because you need to document it.
        • gregoriol an hour ago |
          If you make claude work with c/c++, it may need apt for libraries or build tools.

          Even with npm/pip, these may not be available on a base linux box.

          Even then, some complex projects may need other tools that are not part of a base system (command line tools, redis, ...).

    • delaminator 2 hours ago |
      I run it with sudo enabled - true story

      just give it its own machine and let it check out any code

      I PXE boot it from a known image when I feel the need

      • tobyhinloopen 2 hours ago |
        Running it remotely on a VM seems like a very sensible option. Just don't give it permission to nuke the remote repository hah (EG don't allow force-push, use protected branches, only allow write access to branches it created)
    • emilburzo 2 hours ago |
      I tried this approach for a while, but I really wanted it to be able to do anything (install system packages, build/run Docker containers, the works).

      With these powers there's a lot less back-and-forth with me running commands, copying the output, pasting it to Claude, etc.

      I'm sure you've had the case where you had to instruct someone to do something (e.g. playing tech support with family, helping another engineer, etc). While it helps the other person learn, it feels soooo slow vs just doing it yourself :) And since I don't have to teach the agent, I think this approach makes sense.

  • skybrian 2 hours ago |
    I'm doing this with a remote VM on exe.dev and it's quite nice. Well, actually with their own coding agent but they have Claude Code preinstalled too.

    Syncthing works well for getting a local copy of a directory from the VM.

  • letmetweakit 2 hours ago |
    I run Claude in a Proxmox VM, generally the experience has been great. In my experience it also behaves better than gemini cli, that likes to create files all over the place if set loose (lesson learned to add that requirement to the relevant .md files)
    • vidarh 2 hours ago |
      Something that contains Claude even more in this respect is if you explicitly gives it a directory that you tell it is entirely under its control, and tells it to write md files and other intermediate work products there (and this seems to work better than telling it where it isn't allowed to leave things).
      • onionisafruit 18 minutes ago |
        That sounds like a good idea. When I have a one-off need for misc files I tell it to put them in the project’s ./tmp because that’s already in my global gitignore. That generally works, but I still run into surprise files it leaves in source dirs like a puppy leaves turds on a rug. I’ll try adding that to my instructions instead of doing it one-off.
      • jermaustin1 14 minutes ago |
        I've often found that LLMs don't listen to "Don't do" commands with anywhere near the same gusto as "Do" commands.
    • emilburzo 2 hours ago |
      This was also the direction I was initially headed, but then I realized I wanted one-VM-per-project so it can really do anything it wants on the complete VM. So the blast-from-the-past-Vagrant won because of the Vagrantfile + `vagrant up` easiness.
      • letmetweakit 2 hours ago |
        I use Proxmox snapshots to get back to a clean state. I’ll take a look at Vagrant too though.
    • scalemaxx 2 hours ago |
      In installed Gemini as an extension in VS Code and it kept wanting to index all my files. Still trying to figure out what it was doing outside of the VS Code folder I had set it to work on.
  • loloquwowndueo 2 hours ago |
    Shellbox.dev and sprites.dev were discussed recently on hacker news, they give you a sandbox machine where it’s likely safe to run coding agents in dangerous mode. Filesystem checkpoint and restore make it easy to recover from even catastrophic mistakes.
    • gcr an hour ago |
      What about API calls? What about GitHub trusted CI deploys?

      One frustrating thing about these solutions is that they’re great to prevent Claude from breaking a machine, but there’s no pervasive sandbox for third party services

      • loloquwowndueo 43 minutes ago |
        What about them?
      • jermaustin1 15 minutes ago |
        Rollback? Its the same as all dev work. Use a dev endpoint for APIs, and thankfully git is a great tool to undo fuckups.
  • clbrmbr 2 hours ago |
    I have been running two or three Claude’s bare metal with dangerously skip permissions all day every day for two months now. It’s absolutely liberating.
    • Gazoche an hour ago |
      Until it decides to delete your home directory:https://old.reddit.com/r/ClaudeAI/comments/1pgxckk/claude_cl...
      • esperent an hour ago |
        You can use the /hookify plugin to add hooks for preventing dangerous commands like this.
        • Gazoche 41 minutes ago |
          https://github.com/anthropics/claude-code/tree/main/plugins/...

          So it's basically adding "don't delete my files pretty please" to the prompt?

          EDIT: I misread, the natural language description of the rule is just a shortcut to generate the actual rule which is based on regexp patterns.

          Still, it only protects you against very specific commands. Won't help you if the LLM decides to fill your disk with `cat /dev/urandom > foo` for example.

          • simianwords 12 minutes ago |
            it may not protect against an adversarial llm
      • pixl97 an hour ago |
        You're not running it on a filesystem that takes snapshots and is easily reversible?
        • coldtea an hour ago |
          All 1 of them?
    • sixhobbits an hour ago |
      same, it's made a couple of damaging mistakes but so far it has a better track record than me in terms of fat-fingering `rm` commands or what have you
    • coldtea an hour ago |
      And that's as a dev. Then we expect uses to know better than e.g. to trust links to .sh style installers some FOSS suggests...
    • croes an hour ago |
      I have been driving without seat belt for two month now. It’s absolutely liberating.
  • crabmusket an hour ago |
    What is the consensus on Claude Code's built-in sandboxing?

    https://code.claude.com/docs/en/sandboxing#sandboxing

    > Claude Code includes an intentional escape hatch mechanism that allows commands to run outside the sandbox when necessary. When a command fails due to sandbox restrictions (such as network connectivity issues or incompatible tools), Claude is prompted to analyze the failure and may retry the command with the dangerouslyDisableSandbox parameter.

    The ability for the agent itself to decide to disable the sandbox seems like a flaw. But do I understand correctly that this would cause a pause to ask for the user's approval?

  • tradziej an hour ago |
  • firasd an hour ago |
    I noticed something in Claude across all product surfaces

    There's a bug in that it can't output smart quotes “like this”

    Sonnet, Opus et al think they output it but something in the pipeline is rewriting it

    https://github.com/firasd/vibesbench/blob/main/docs/2026/A/t...

    Try it in Claude Code and you'll see what I mean! Very weird

  • samlinnfer an hour ago |
    Here is what I do: run a container in a folder that has my entire dev environment installed. No VMs needed.

    The only access the container has are the folders that are bind mounted from the host’s filesystem. The container gets network access from a transparent proxy.

    https://github.com/dogestreet/dev-container

    Much more usable than setting up a VM and you can share the same desktop environment as the host.

    • sampullman an hour ago |
      I did this for a while, it's pretty good but I occasionally came across dependencies that were difficult to install in containers, and other minor inconveniences.

      I ended up getting a mini-PC solely dedicated toward running agents in dangerous mode, it's refreshing to not have to think too much about sandboxing.

      • laborcontract 41 minutes ago |
        I totally agree with you. Running a cheapo mac mini with full permissions with fully tracked code and no other files of importance is so liberating. Pair that with tailscale, and being able to ssh/screen control at any time, as well as access my dev deployments remotely. :chefs kiss:
    • phrotoma an hour ago |
      This works great for naked code, but it kinda becomes a PITA if you want to develop a containerized application. As soon as you ask your agent to start hacking on a dockerfile or some compose files you start needing a bunch of cockeyed hacks to do containers-in-containers. I found it to be much less complicated to just stuff the agent in a full fledged VM with nerdctl and let it rip.
  • denysvitali an hour ago |
    Here's what I do (shameless plug): https://blog.denv.it/posts/im-happy-engineer-now/

    This allows you to use Claude Code from your mobile device, in a safe environment (restricted Kubernetes pod)

    • jeffrallen an hour ago |
      Here's what I do (shameless plug, not an employee, just a satisfied user): https://exe.dev
      • denysvitali an hour ago |
        Yes, this approach also looked nice! Maybe you can pair both (happy + exe.dev) for best results
  • riadsila an hour ago |
    Koyeb has great resources about running Claude Code in sandboxes: https://www.koyeb.com/tutorials/use-claude-agent-sdk-with-ko...
    • mavam 27 minutes ago |
      What's the startup latency? How long do I have to wait until Claude is operational?
  • athrowaway3z an hour ago |
    `useradd claude`
  • RobinL an hour ago |
    Does anyone have direct experience with Claude making damaging mistakes in dangerously skip permissions mode? It'd be great to have a sense of what the real world risk is.
    • azuanrb an hour ago |
      One recent example. For some reason, recently Claude prefer to write scripts in root /tmp folder. I don't like this behavior at all. It's nothing destructive, but it should be out of scope by default. I notice they keep adding more safeguards which is great, eg asking for permissions, but it seems to be case by case.
      • giancarlostoro 11 minutes ago |
        If you're not using .claude/instructions.md yet, I highly recommend it, for moments like this one you can tell it where to shove scripts. Trickery with the instructions file is Claude only reads it during a new prompt, so any time you update it, or Claude "forgets" instructions, ask it to re-read it, usually does the trick for me.
    • coldtea an hour ago |
    • MattGaiser an hour ago |
      Claude has twice now thought that deleting the database is the right thing to do. It didn't matter as it was local and one created with fixtures in the Docker container (in anticipation of such a scenario), but it was an inappropriate way of handling Django migration issues.
    • ra120271 an hour ago |
      When approving actions "for this project" I actively monitor .claude\settings.local.json

      as

      "Bash(az resource:)",

      is much more permissive than

      "Bash(az resource show:)",

      It mostly gets it right but I instantly fix the file with the "readonly" version when it gets it too open.

    • prodigycorp an hour ago |
      Claude is very happy to wipe remote dbs, particularly if you're using something like supabase's mcp server. Sometimes it goes down rabbitholes and tries to clean itself up with `rm -rf`.

      There is definitely a real world risk. You should browse the ai coding subreddits, the regularity of `rm -rf` disasters is, sadly, a great source of entertainment for me.

      • gregoriol 44 minutes ago |
        Why in the hell would it be able to access a _remote_ database?! In no acceptable dev environment would someone be able to access that.
  • frankc an hour ago |
    I think this makes sense but I wonder if firecracker would work better than vagrant for this? I haven't used it before, though. I guess it might if you are trying to run gas town level orchestration.
    • raesene9 an hour ago |
      Firecracker can solve the kind of problems where you want more isolation than Docker provides, and it's pretty performant.

      There's not a tonne of tooling for that use case now, although it's not too hard to put together I vibe-coded something that works for my use case fairly quickly (CC + Opus 4.5 seemed to understand what's needed)

  • mavam an hour ago |
    For deploying Claude Code as agent, Cloudflare is also an interesting option.

    I needed a way to run Claude marketplace agents via Discord. Problem: agents can execute code, hit APIs, touch the filesystem—the dangerous stuff. Can't do that in a Worker's 30s timeout.

    Solution: Worker handles Discord protocol (signature verification, deferred response) and queues the task. Cloudflare Sandbox picks it up with a 15min timeout and runs claude --agent plugin:agent in an isolated container. Discord threads store history, so everything stays stateless. Hono for routing.

    This was surprisingly little glue. And the Cloudflare MCP made it a breeze do debug (instead of headbanging against the dashboard). Still working on getting E2E latency down.

  • Retr0id an hour ago |
    > VirtualBox 7.2.4 shipped with a regression that causes high CPU usage on idle guests. What are the odds.

    I have such a love/hate relationship with VirtualBox. It's so useful but so buggy. My current installation has a bug that causes high network latency, but I'm afraid to upgrade in case it introduces new, worse bugs.

    VMware is a million times better, but it is also Proprietary™

    • intrasight 38 minutes ago |
      As VMWare Workstation is now free on Linux and Windows, and allows you to create and rollback snapshots. Why not use it even if proprietary?
      • Retr0id 31 minutes ago |
        It's a good question and I'm pretty on the fence about it, and next time I'm reinstalling things I might switch.

        I do believe in the whole RMS "respects the user's freedoms" spiel, so all things being equal I prefer FOSS, even if it's worse - but there are limits.

  • raesene9 44 minutes ago |
    Of course it depends on exactly what you're using Claude Code for, but if your use-case involves cloning repos and then running Claude Code on that repo. I would definitely recommend isolating it (same with other similar tools).

    There's a load of ways that a repository owner can get an LLM agent to execute code on user's machines so not a good plan to let them run on your main laptop/desktop.

    Personally my approach has been put all my agents in a dedicated VM and then provide them a scratch test server with nothing on it, when they need to do something that requires bare metal.

    • intrasight 37 minutes ago |
      In what situations where it require bare metal?
      • raesene9 27 minutes ago |
        In my case I was using Claude Code to build a PoC of a firecracker backed virtualization solution, so bare metal was needed for nested virtualization support.
  • replete 36 minutes ago |
    It's a practical approach, I used vagrant many years ago mostly successfully. I also explored the docker-in-docker situation recently while working on my own agentic devcontainer[0]- the tradeoffs are quite serious if you are building a secure sandbox! Data exfil is what worries me most, so I spent quite some time figuring out a decent self-contained interactive firewall. From a DX perspective, devcontainer-integrated IDEs are quite a convenient workflow, though docker has its frustrating behaviours

    [0]: https://github.com/replete/agentic-devcontainer

  • azuanrb 34 minutes ago |
    I just learned that you can run `claude setup-token` to generate a long-lived token. Then you can set it via `CLAUDE_CODE_OAUTH_TOKEN` as a reusable token. Pretty useful when I'm running it in isolated environment.
  • smallerfish 31 minutes ago |
    I've been working on a TUI to make bubblewrap more convenient to use: https://github.com/reubenfirmin/bubblewrap-tui

    I'm working on targeting both the curl|bash pattern and coding agents with this (via smart out of the box profiles). Early stages but functional. Feedback and bug reports would be appreciated.

  • supermatt 18 minutes ago |
    > now you need Docker-in-Docker

    Or you can just mount the socket and call docker from within docker.

  • corv 18 minutes ago |
    I'm pursuing a different approach: instead of isolating where Claude runs, intercept what it wants to do.

    Shannot[0] captures intent before execution. Scripts run in a PyPy sandbox that intercepts all system calls - commands and file writes get logged but don't happen. You review in a TUI, approve what's safe, then it actually executes.

    The trade-off vs VMs: VMs let Claude do anything in isolation, Shannot lets Claude propose changes to your real system with human approval. Different use cases - VMs for agentic coding, whereas this is for "fix my server" tasks where you want the changes applied but reviewed first.

    There's MCP integration for Claude, remote execution via SSH, checkpoint/rollback for undoing mistakes.

    Feedback greatly appreciated!

    [0] https://github.com/corv89/shannot

    • Retr0id 9 minutes ago |
      Very clever name!
  • mhb 13 minutes ago |
    Forgive a naive question, but why not run it on an AWS (or equivalent) instance?
  • csantini 11 minutes ago |
    Just create a new user and setup pip/npm to install locally.

    And setup an .env for the project with user/password to access only a dev database.

  • bob1029 9 minutes ago |
    My approach to safety at the moment is to mostly lean on alignment of the base model. At some point I hope we realize that the effectiveness of an agent is roughly proportional to how much damage it could cause.

    I currently apply the same strategy we use in case of the senior developer or CTO going off the deep end. Snapshots of VMs, PITR for databases and file shares, locked down master branches, etc.

    I wouldn't spend a bunch of energy inventing an entirely new kind of prison for these agents. I would focus on the same mitigation strategies that could address a malicious human developer. Virtual box on a sensitive host another human is using is not how you'd go about it. Giving the developer a cheap cloud VM or physical host they can completely own is more typical. Locking down at the network is one of the simplest and most effective methods.

  • szmarczak 7 minutes ago |
    What about Docker rootless?
  • cyberpunk 3 minutes ago |
    docker sandbox run claude? seems to work for me…