<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.comfac.net/index.php?action=history&amp;feed=atom&amp;title=Claude_Code_Isolation_and_Burner_Workflow_260211</id>
	<title>Claude Code Isolation and Burner Workflow 260211 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.comfac.net/index.php?action=history&amp;feed=atom&amp;title=Claude_Code_Isolation_and_Burner_Workflow_260211"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.comfac.net/index.php?title=Claude_Code_Isolation_and_Burner_Workflow_260211&amp;action=history"/>
	<updated>2026-06-05T09:48:13Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://mediawiki.comfac.net/index.php?title=Claude_Code_Isolation_and_Burner_Workflow_260211&amp;diff=128&amp;oldid=prev</id>
		<title>Justinaquino: Imported from gi7b wiki</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.comfac.net/index.php?title=Claude_Code_Isolation_and_Burner_Workflow_260211&amp;diff=128&amp;oldid=prev"/>
		<updated>2026-03-06T10:07:26Z</updated>

		<summary type="html">&lt;p&gt;Imported from gi7b wiki&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Claude Code Isolation with Distrobox — Burner Workflow =&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
This guide documents how to run Claude Code in an isolated environment using Distrobox containers. The core idea:&lt;br /&gt;
&lt;br /&gt;
* Each project or task lives in its own &amp;#039;&amp;#039;&amp;#039;container&amp;#039;&amp;#039;&amp;#039; — isolated from the host system.&lt;br /&gt;
* Containers are &amp;#039;&amp;#039;&amp;#039;persistent&amp;#039;&amp;#039;&amp;#039;. You enter them, do work, and come back later.&lt;br /&gt;
* At any point you can &amp;#039;&amp;#039;&amp;#039;save the current state&amp;#039;&amp;#039;&amp;#039; as an image — a snapshot you can restore from or clone.&lt;br /&gt;
* A &amp;#039;&amp;#039;&amp;#039;golden image&amp;#039;&amp;#039;&amp;#039; (or template) is a clean, pre-configured base you clone new containers from.&lt;br /&gt;
* You delete containers and images on your own schedule, when you no longer need them.&lt;br /&gt;
&lt;br /&gt;
Think of it like save points in a game: you can keep playing from where you left off, and save whenever you want a checkpoint.&lt;br /&gt;
&lt;br /&gt;
This protects against malicious prompt injection by limiting what Claude Code can access — any damage from a bad agent run stays inside the container and does not touch the host.&lt;br /&gt;
&lt;br /&gt;
== Command Context ==&lt;br /&gt;
&lt;br /&gt;
Every command in this guide is prefixed with where it must be run:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Prefix !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;#039;&amp;#039;&amp;#039;[HOST]&amp;#039;&amp;#039;&amp;#039;&amp;lt;/code&amp;gt; || Run this in a terminal on your normal Linux desktop, outside any container&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;#039;&amp;#039;&amp;#039;[DISTROBOX]&amp;#039;&amp;#039;&amp;#039;&amp;lt;/code&amp;gt; || Run this inside the Distrobox container after entering it&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
* A Linux host (Fedora, Ubuntu, Arch, etc.)&lt;br /&gt;
* [https://github.com/89luca89/distrobox Distrobox] installed on the host&lt;br /&gt;
* Podman installed on the host&lt;br /&gt;
* A Claude Code account and API access&lt;br /&gt;
&lt;br /&gt;
== Naming Convention ==&lt;br /&gt;
&lt;br /&gt;
Containers and images are named using a short prefix and a date in &amp;lt;code&amp;gt;YYMMDD&amp;lt;/code&amp;gt; format. The date identifies when the container or save point was created, making it easy to track your working state over time.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Type !! Format !! Example&lt;br /&gt;
|-&lt;br /&gt;
| Working container || &amp;lt;code&amp;gt;PREFIX-YYMMDD&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;work-260220&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Saved image (save point) || &amp;lt;code&amp;gt;localhost/PREFIX-YYMMDD:latest&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;localhost/work-260220:latest&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Golden image (template) || &amp;lt;code&amp;gt;localhost/PREFIX-base:latest&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;localhost/work-base:latest&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Burner home directory || &amp;lt;code&amp;gt;~/sandbox-homes/PREFIX-YYMMDD&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;~/sandbox-homes/work-260220&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Choose any short prefix that makes sense for your setup. Use the same prefix consistently so your image library stays organised.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Example timeline:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* You set up a container on the 20th → &amp;lt;code&amp;gt;work-260220&amp;lt;/code&amp;gt;, saved as &amp;lt;code&amp;gt;localhost/work-260220:latest&amp;lt;/code&amp;gt;&lt;br /&gt;
* On the 22nd you want a new save point → commit the running container as &amp;lt;code&amp;gt;localhost/work-260222:latest&amp;lt;/code&amp;gt;&lt;br /&gt;
* Start a new container from that save point when needed → &amp;lt;code&amp;gt;work-260222&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;work-260220&amp;lt;/code&amp;gt; is still there — enter it again any time&lt;br /&gt;
* Delete whichever images or containers you no longer need&lt;br /&gt;
&lt;br /&gt;
== One-Time Setup: Create the Golden Image ==&lt;br /&gt;
&lt;br /&gt;
Run these steps once. The result is a golden image — a clean, pre-configured base you will clone all future work containers from.&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Install Distrobox ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[HOST]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 sudo apt install distrobox    # Debian/Ubuntu&lt;br /&gt;
 sudo dnf install distrobox    # Fedora&lt;br /&gt;
 yay -S distrobox              # Arch (AUR)&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Create and Enter the Base Container ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[HOST]&amp;#039;&amp;#039;&amp;#039; Create a home directory for the base container. Run these as two separate commands:&lt;br /&gt;
&lt;br /&gt;
 mkdir -p ~/sandbox-homes/work-base&lt;br /&gt;
&lt;br /&gt;
 distrobox create --name work-base --image ubuntu:24.04 --home ~/sandbox-homes/work-base&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[HOST]&amp;#039;&amp;#039;&amp;#039; Enter the container:&lt;br /&gt;
&lt;br /&gt;
 distrobox enter work-base&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Install Claude Code ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DISTROBOX]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -&lt;br /&gt;
 sudo apt install -y nodejs&lt;br /&gt;
 npm install -g @anthropic-ai/claude-code&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DISTROBOX]&amp;#039;&amp;#039;&amp;#039; Log in and verify:&lt;br /&gt;
&lt;br /&gt;
 claude&lt;br /&gt;
&lt;br /&gt;
Complete the authentication flow. Your credentials are stored inside the container.&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Add the Launcher Script ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DISTROBOX]&amp;#039;&amp;#039;&amp;#039; Create a project directory and the launcher script:&lt;br /&gt;
&lt;br /&gt;
 mkdir -p ~/project&lt;br /&gt;
 nano ~/project/claude_isolation.sh&lt;br /&gt;
&lt;br /&gt;
Contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# =============================================================================&lt;br /&gt;
# claude_isolation.sh&lt;br /&gt;
# Launcher script for Claude Code inside a Distrobox container.&lt;br /&gt;
#&lt;br /&gt;
# Place this script in your project directory inside the container.&lt;br /&gt;
# Run it from there to start a Claude Code session scoped to that directory.&lt;br /&gt;
#&lt;br /&gt;
# Usage:&lt;br /&gt;
#   ./claude_isolation.sh&lt;br /&gt;
#   ./claude_isolation.sh --dangerously-skip-permissions&lt;br /&gt;
# =============================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# -----------------------------------------------------------------------------&lt;br /&gt;
# WORK_DIR — the directory Claude Code will run in.&lt;br /&gt;
#&lt;br /&gt;
# The default below auto-detects the directory this script lives in.&lt;br /&gt;
# This works for most setups and requires no changes.&lt;br /&gt;
#&lt;br /&gt;
# If you need a fixed path regardless of where the script is called from,&lt;br /&gt;
# comment out the auto-detect line and set WORK_DIR manually instead.&lt;br /&gt;
#&lt;br /&gt;
# Examples:&lt;br /&gt;
#   John building a chatbot:  WORK_DIR=&amp;quot;/home/john/projects/chatbot&amp;quot;&lt;br /&gt;
#   Mary running experiments: WORK_DIR=&amp;quot;/home/mary/ai-lab/experiment-3&amp;quot;&lt;br /&gt;
# -----------------------------------------------------------------------------&lt;br /&gt;
WORK_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
# WORK_DIR=&amp;quot;/home/USER/your-project-directory&amp;quot;   # uncomment to hardcode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# -----------------------------------------------------------------------------&lt;br /&gt;
# Move into the work directory.&lt;br /&gt;
# Claude Code will treat this as its root — all file reads and writes&lt;br /&gt;
# happen relative to here.&lt;br /&gt;
# -----------------------------------------------------------------------------&lt;br /&gt;
cd &amp;quot;$WORK_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# -----------------------------------------------------------------------------&lt;br /&gt;
# Optional: override the Claude config directory.&lt;br /&gt;
#&lt;br /&gt;
# By default Claude stores its config (login tokens, settings) in $HOME/.claude&lt;br /&gt;
# Inside a --home container, $HOME points to the burner directory, so a brand&lt;br /&gt;
# new container will not have credentials and you will need to log in once.&lt;br /&gt;
#&lt;br /&gt;
# If you want to reuse credentials from your host&amp;#039;s real home directory,&lt;br /&gt;
# uncomment the export line and set the absolute path to your .claude folder.&lt;br /&gt;
#&lt;br /&gt;
# Examples:&lt;br /&gt;
#   John:  export CLAUDE_CONFIG_HOME=&amp;quot;/home/john/.claude&amp;quot;&lt;br /&gt;
#   Mary:  export CLAUDE_CONFIG_HOME=&amp;quot;/home/mary/.claude&amp;quot;&lt;br /&gt;
#&lt;br /&gt;
# Leave commented out to keep full isolation (recommended).&lt;br /&gt;
# Each new container will prompt you to log in once, then store credentials&lt;br /&gt;
# in its own burner home.&lt;br /&gt;
# -----------------------------------------------------------------------------&lt;br /&gt;
# export CLAUDE_CONFIG_HOME=&amp;quot;/home/USER/.claude&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Starting Claude Code...&amp;quot;&lt;br /&gt;
echo &amp;quot;  Working directory: $WORK_DIR&amp;quot;&lt;br /&gt;
echo &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# -----------------------------------------------------------------------------&lt;br /&gt;
# Launch Claude Code.&lt;br /&gt;
#&lt;br /&gt;
# &amp;#039;exec&amp;#039; replaces this shell process with claude — keeps the process tree clean.&lt;br /&gt;
# &amp;#039;$@&amp;#039; passes any arguments you gave this script directly through to claude.&lt;br /&gt;
#&lt;br /&gt;
# Common arguments:&lt;br /&gt;
#   --dangerously-skip-permissions   auto-approve all actions (use inside&lt;br /&gt;
#                                    a container only — never on bare host)&lt;br /&gt;
# -----------------------------------------------------------------------------&lt;br /&gt;
exec claude &amp;quot;$@&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DISTROBOX]&amp;#039;&amp;#039;&amp;#039; Make it executable:&lt;br /&gt;
&lt;br /&gt;
 chmod +x ~/project/claude_isolation.sh&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Save as the Golden Image ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[HOST]&amp;#039;&amp;#039;&amp;#039; Exit the container, then stop and commit it:&lt;br /&gt;
&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
 distrobox stop work-base&lt;br /&gt;
 podman container commit work-base localhost/work-base:latest&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[HOST]&amp;#039;&amp;#039;&amp;#039; Verify:&lt;br /&gt;
&lt;br /&gt;
 podman image ls&lt;br /&gt;
&lt;br /&gt;
You now have a golden image. The base container can be kept or deleted — the image is self-contained.&lt;br /&gt;
&lt;br /&gt;
== Daily Workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Starting a New Container ===&lt;br /&gt;
&lt;br /&gt;
When starting fresh work, clone a container from the golden image (or any saved image). Use today&amp;#039;s date in the name.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[HOST]&amp;#039;&amp;#039;&amp;#039; Run these as two separate commands:&lt;br /&gt;
&lt;br /&gt;
 mkdir -p ~/sandbox-homes/work-260220&lt;br /&gt;
&lt;br /&gt;
 distrobox create --name work-260220 --image localhost/work-base:latest --home ~/sandbox-homes/work-260220&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[HOST]&amp;#039;&amp;#039;&amp;#039; Enter it:&lt;br /&gt;
&lt;br /&gt;
 distrobox enter work-260220&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DISTROBOX]&amp;#039;&amp;#039;&amp;#039; Launch Claude Code:&lt;br /&gt;
&lt;br /&gt;
 cd ~/project&lt;br /&gt;
 ./claude_isolation.sh&lt;br /&gt;
&lt;br /&gt;
=== Continuing an Existing Container ===&lt;br /&gt;
&lt;br /&gt;
If the container already exists, just enter it again — it retains its full state:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[HOST]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 distrobox enter work-260220&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DISTROBOX]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 cd ~/project&lt;br /&gt;
 ./claude_isolation.sh&lt;br /&gt;
&lt;br /&gt;
=== Saving a Save Point ===&lt;br /&gt;
&lt;br /&gt;
At any point — before a risky change, after a milestone, or at the end of a working day — commit the container state as a named image.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[HOST]&amp;#039;&amp;#039;&amp;#039; Stop the container:&lt;br /&gt;
&lt;br /&gt;
 distrobox stop work-260220&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[HOST]&amp;#039;&amp;#039;&amp;#039; Commit to a dated image:&lt;br /&gt;
&lt;br /&gt;
 podman container commit work-260220 localhost/work-260222:latest&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[HOST]&amp;#039;&amp;#039;&amp;#039; Start the container again:&lt;br /&gt;
&lt;br /&gt;
 distrobox enter work-260220&lt;br /&gt;
&lt;br /&gt;
The save point &amp;lt;code&amp;gt;localhost/work-260222:latest&amp;lt;/code&amp;gt; is now available. Your original container &amp;lt;code&amp;gt;work-260220&amp;lt;/code&amp;gt; is unchanged and still usable.&lt;br /&gt;
&lt;br /&gt;
=== Switching Between Save Points ===&lt;br /&gt;
&lt;br /&gt;
You can branch off from any saved image. Both lines of work remain independent.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Example:&amp;#039;&amp;#039;&amp;#039; You have been using &amp;lt;code&amp;gt;work-260220&amp;lt;/code&amp;gt;. You save a point as &amp;lt;code&amp;gt;localhost/work-260222:latest&amp;lt;/code&amp;gt;. Now you can:&lt;br /&gt;
&lt;br /&gt;
* Keep using &amp;lt;code&amp;gt;work-260220&amp;lt;/code&amp;gt; as-is&lt;br /&gt;
* Start a new container from the 260222 save point:&lt;br /&gt;
&lt;br /&gt;
 mkdir -p ~/sandbox-homes/work-260222&lt;br /&gt;
 distrobox create --name work-260222 --image localhost/work-260222:latest --home ~/sandbox-homes/work-260222&lt;br /&gt;
 distrobox enter work-260222&lt;br /&gt;
&lt;br /&gt;
* Go back to &amp;lt;code&amp;gt;work-260220&amp;lt;/code&amp;gt; at any time:&lt;br /&gt;
&lt;br /&gt;
 distrobox enter work-260220&lt;br /&gt;
&lt;br /&gt;
=== Restoring from a Save Point ===&lt;br /&gt;
&lt;br /&gt;
If a container is broken or you want a clean start from a previous state:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[HOST]&amp;#039;&amp;#039;&amp;#039; Delete the current container:&lt;br /&gt;
&lt;br /&gt;
 distrobox rm work-260222&lt;br /&gt;
 rm -rf ~/sandbox-homes/work-260222&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[HOST]&amp;#039;&amp;#039;&amp;#039; Re-create it from the save point image:&lt;br /&gt;
&lt;br /&gt;
 mkdir -p ~/sandbox-homes/work-260222&lt;br /&gt;
 distrobox create --name work-260222 --image localhost/work-260222:latest --home ~/sandbox-homes/work-260222&lt;br /&gt;
&lt;br /&gt;
=== Promoting to the Golden Image ===&lt;br /&gt;
&lt;br /&gt;
If a container has reached a state you want all future containers to start from, promote it:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[HOST]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 distrobox stop work-260222&lt;br /&gt;
 podman container commit work-260222 localhost/work-base:latest&lt;br /&gt;
&lt;br /&gt;
New containers cloned from &amp;lt;code&amp;gt;localhost/work-base:latest&amp;lt;/code&amp;gt; will now include those changes.&lt;br /&gt;
&lt;br /&gt;
=== Managing Your Image Library ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[HOST]&amp;#039;&amp;#039;&amp;#039; List all images:&lt;br /&gt;
&lt;br /&gt;
 podman image ls&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[HOST]&amp;#039;&amp;#039;&amp;#039; Delete an image you no longer need:&lt;br /&gt;
&lt;br /&gt;
 podman image rm localhost/work-260220:latest&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[HOST]&amp;#039;&amp;#039;&amp;#039; List all containers:&lt;br /&gt;
&lt;br /&gt;
 podman ps -a&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[HOST]&amp;#039;&amp;#039;&amp;#039; Delete a container and its home when you are done:&lt;br /&gt;
&lt;br /&gt;
 distrobox rm work-260220&lt;br /&gt;
 rm -rf ~/sandbox-homes/work-260220&lt;br /&gt;
&lt;br /&gt;
== What Distrobox Isolation Provides ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Surface !! Isolated? !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Host home directory || ✅ Yes || Container uses its own burner home via &amp;lt;code&amp;gt;--home&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;/home/USER&amp;lt;/code&amp;gt; is never touched&lt;br /&gt;
|-&lt;br /&gt;
| Host filesystem via &amp;lt;code&amp;gt;/run/host&amp;lt;/code&amp;gt; || ⚠️ Partial || Mounted read-write by default. Add &amp;lt;code&amp;gt;--additional-flags &amp;quot;--mount type=bind,source=/,target=/run/host,ro&amp;quot;&amp;lt;/code&amp;gt; at container creation to make it read-only&lt;br /&gt;
|-&lt;br /&gt;
| System packages || ✅ Yes || Container uses its own overlay filesystem&lt;br /&gt;
|-&lt;br /&gt;
| Network || ❌ No || Container shares the host network namespace. Claude Code requires network access to reach the Anthropic API&lt;br /&gt;
|-&lt;br /&gt;
| Linux kernel || ❌ No || Rootless containers share the host kernel (acceptable for most threat models)&lt;br /&gt;
|-&lt;br /&gt;
| X11/Wayland display || ❌ No || GUI apps render on the host desktop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Why the Burner Concept ==&lt;br /&gt;
&lt;br /&gt;
The Burner Workflow is designed to give Claude Code extensive permissions — auto-allow mode, running system commands, installing packages — without risking your actual computer.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Safety with high permissions:&amp;#039;&amp;#039;&amp;#039; If Claude Code runs &amp;lt;code&amp;gt;rm -rf&amp;lt;/code&amp;gt; or installs 50 packages, your main system is untouched. The damage stays inside the container.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Dependency hygiene:&amp;#039;&amp;#039;&amp;#039; Agents often install tools to complete tasks. Distrobox keeps this inside the box. Delete the container when you are done with the project.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Save points for risky work:&amp;#039;&amp;#039;&amp;#039; Before letting an agent attempt something uncertain, commit a save point. If it breaks the container, restore from the save point and try a different approach.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Better integration than Docker:&amp;#039;&amp;#039;&amp;#039; Unlike raw Docker, Distrobox integrates naturally with your terminal environment while still keeping the execution environment separate.&lt;br /&gt;
&lt;br /&gt;
=== Can You Skip Distrobox? ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Yes, if:&amp;#039;&amp;#039;&amp;#039; You are just testing Claude Code and will manually approve every command (the default safe mode).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;No, if:&amp;#039;&amp;#039;&amp;#039; You want to use autonomous mode — skipping permission prompts or letting the agent freely install tools. In that case, skipping Distrobox is dangerous and defeats the purpose of this guide.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/89luca89/distrobox Distrobox]&lt;br /&gt;
* [https://claude.ai/code Claude Code]&lt;br /&gt;
&lt;br /&gt;
== Session Notes 260222 — Testing &amp;amp; Fixes ==&lt;br /&gt;
&lt;br /&gt;
=== 1. &amp;lt;code&amp;gt;mkdir -p&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;distrobox create&amp;lt;/code&amp;gt; must be run as separate commands ===&lt;br /&gt;
Pasting them as a single line fails silently. Always run them separately on the host.&lt;br /&gt;
&lt;br /&gt;
=== 2. &amp;lt;code&amp;gt;$HOME&amp;lt;/code&amp;gt; resolves incorrectly inside &amp;lt;code&amp;gt;--home&amp;lt;/code&amp;gt; containers ===&lt;br /&gt;
When distrobox is created with &amp;lt;code&amp;gt;--home&amp;lt;/code&amp;gt; pointing to a burner directory, the container&amp;#039;s &amp;lt;code&amp;gt;$HOME&amp;lt;/code&amp;gt; becomes that directory — not the real user home. Any launcher script variables using &amp;lt;code&amp;gt;$HOME&amp;lt;/code&amp;gt; (like &amp;lt;code&amp;gt;CLAUDE_DIR&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NVM_DIR&amp;lt;/code&amp;gt;) will resolve to wrong paths.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Fix:&amp;#039;&amp;#039;&amp;#039; Hardcode absolute paths in the launcher script if needed.&lt;br /&gt;
&lt;br /&gt;
=== 3. Firejail is incompatible with distrobox &amp;lt;code&amp;gt;--home&amp;lt;/code&amp;gt; workflow ===&lt;br /&gt;
Firejail fails with &amp;lt;code&amp;gt;no suitable ...bin/claude executable found&amp;lt;/code&amp;gt; inside distrobox when using a custom &amp;lt;code&amp;gt;--home&amp;lt;/code&amp;gt; directory. The cause is firejail&amp;#039;s whitelist mode blocking Node.js runtime dependencies that Claude Code requires.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Fix:&amp;#039;&amp;#039;&amp;#039; Drop firejail. Distrobox with &amp;lt;code&amp;gt;--home&amp;lt;/code&amp;gt; provides sufficient filesystem isolation for the burner workflow. The &amp;lt;code&amp;gt;claude_isolation.sh&amp;lt;/code&amp;gt; script above is the current recommended launcher.&lt;br /&gt;
&lt;br /&gt;
=== 4. Backup script may produce duplicate image files ===&lt;br /&gt;
Manual &amp;lt;code&amp;gt;podman save&amp;lt;/code&amp;gt; and a skip-duplicates backup script may use different filename conventions (e.g. &amp;lt;code&amp;gt;imagename_latest.tar.gz&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;localhost_imagename_latest.tar.gz&amp;lt;/code&amp;gt;), resulting in duplicate files on the backup destination. Check for and remove duplicates after any manual save.&lt;br /&gt;
&lt;br /&gt;
=== 5. &amp;lt;code&amp;gt;@reboot&amp;lt;/code&amp;gt; cron needs &amp;lt;code&amp;gt;sleep 30&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Network filesystem mounts (e.g. GVFS SMB) are not ready immediately on boot. Without a sleep delay, backup scripts triggered via &amp;lt;code&amp;gt;@reboot&amp;lt;/code&amp;gt; cron will fail silently with a &amp;quot;destination not mounted&amp;quot; error. Add &amp;lt;code&amp;gt;sleep 30&amp;lt;/code&amp;gt; before the backup command.&lt;/div&gt;</summary>
		<author><name>Justinaquino</name></author>
	</entry>
</feed>