<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>codex &#8211; webmatze.de</title>
	<atom:link href="https://webmatze.de/tag/codex/feed/" rel="self" type="application/rss+xml" />
	<link>https://webmatze.de</link>
	<description>Profi Tipps für einen erfolgreichen Internetauftritt</description>
	<lastBuildDate>Wed, 11 Feb 2026 19:18:31 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>
	<item>
		<title>AI Coding-Agents sicher ausführen mit sandbox-shell (sx)</title>
		<link>https://webmatze.de/ai-coding-agents-sicher-ausfuehren-mit-sandbox-shell-sx/</link>
					<comments>https://webmatze.de/ai-coding-agents-sicher-ausfuehren-mit-sandbox-shell-sx/#respond</comments>
		
		<dc:creator><![CDATA[Mathias Karstädt]]></dc:creator>
		<pubDate>Wed, 11 Feb 2026 19:18:31 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Allgemeines]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[claude]]></category>
		<category><![CDATA[codex]]></category>
		<category><![CDATA[sandbox]]></category>
		<guid isPermaLink="false">https://webmatze.de/?p=1142</guid>

					<description><![CDATA[Tools wie Claude Code oder Codex sind unglaublich produktiv. Sie schreiben Code, führen Tests aus, installieren Dependencies und arbeiten eigenständig an Features. Aber: Dafür brauchen sie Zugriff auf dein Terminal. Und genau da wird es spannend. Denn ein AI-Agent mit Shell-Zugriff kann im Prinzip alles, was du auch kannst. Deine SSH-Keys lesen, AWS-Credentials zugreifen, Dateien [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Tools wie Claude Code oder Codex sind unglaublich produktiv. Sie schreiben Code, führen Tests aus, installieren Dependencies und arbeiten eigenständig an Features. Aber: Dafür brauchen sie Zugriff auf dein Terminal. Und genau da wird es spannend.</p>
<p>Denn ein AI-Agent mit Shell-Zugriff kann im Prinzip alles, was du auch kannst. Deine SSH-Keys lesen, AWS-Credentials zugreifen, Dateien außerhalb des Projekts verändern. Nicht weil die Tools bösartig sind, sondern weil ein <code>npm install</code> mit einem manipulierten Paket oder ein falsch interpretierter Prompt reichen kann.</p>
<p>Die Frage ist also: Wie gibst du einem AI-Agent genug Rechte zum Arbeiten, ohne ihm gleich die Schlüssel zu deinem ganzen System zu geben?</p>
<h2>sandbox-shell (sx): macOS Seatbelt für Entwickler</h2>
<p>macOS hat mit Seatbelt ein mächtiges Sandboxing-System eingebaut. Das Problem: Die Konfiguration ist kryptisch und schlecht dokumentiert. Genau hier setzt <code>sx</code> an. Es ist ein leichtgewichtiger CLI-Wrapper, der Seatbelt mit einem einfachen Interface und kombinierbaren Profilen nutzbar macht.</p>
<p>Das Prinzip ist Deny-by-Default:</p>
<ul>
<li>Dateisystem: Nur das Projektverzeichnis + <code>/tmp</code> sind beschreibbar</li>
<li>Netzwerk: Standardmäßig komplett blockiert</li>
<li>Sensible Pfade: <code>~/.ssh</code>, <code>~/.aws</code>, <code>~/Documents</code> usw. sind gesperrt</li>
</ul>
<h3>Installation</h3>
<pre><code class="language-bash">brew tap agentic-dev3o/sx
brew install sx</code></pre>
<p>Optional: Shell-Integration für Prompt-Indikatoren und Aliases:</p>
<pre><code class="language-bash"># In ~/.zshrc einfügen
source $(brew --prefix)/share/sx/sx.zsh</code></pre>
<p>Damit bekommt ihr im Terminal einen Indikator, ob ihr gerade in einer Sandbox arbeitet (<code>[sx:offline]</code>, <code>[sx:localhost]</code>, <code>[sx:online]</code>), und praktische Aliases wie <code>sxo</code> (online) und <code>sxl</code> (localhost).</p>
<h2>Globale Konfiguration</h2>
<p>In <code>~/.config/sx/config.toml</code> definiert ihr, welche Pfade eure Tools generell lesen und schreiben dürfen. Das hängt davon ab, welchen Ruby-Version-Manager ihr nutzt. Hier ein Beispiel für <code>mise</code>:</p>
<pre><code class="language-toml">[filesystem]
allow_read = [
    &quot;~/.gitconfig&quot;,
    &quot;~/.config/git/&quot;,
    &quot;~/.bundle/&quot;,
    &quot;~/.gem/&quot;,
    &quot;~/.local/share/mise/&quot;,
    &quot;~/.config/mise/&quot;,
]

allow_write = [
    &quot;~/.bundle/&quot;,
    &quot;~/.gem/&quot;,
    &quot;~/.cache/&quot;,
]</code></pre>
<p>Nutzt ihr <code>rbenv</code>, ersetzt die <code>mise</code>-Pfade durch <code>~/.rbenv/</code>. Bei <code>asdf</code> entsprechend <code>~/.asdf/</code>.</p>
<h2>Projekt-Konfiguration</h2>
<p>Im Projektverzeichnis könnt ihr mit <code>sx --init</code> eine <code>.sandbox.toml</code> anlegen:</p>
<pre><code class="language-bash">cd mein-projekt
sx --init</code></pre>
<p>Für ein typisches Rails-Projekt mit MySQL, Redis und Memcache in Docker sieht die Konfiguration so aus:</p>
<pre><code class="language-toml">[sandbox]
inherit_global = true

# Localhost für Datenbankzugriff über Docker
network = &quot;localhost&quot;

[shell]
pass_env = [&quot;RUBY_DEBUG_ENABLE&quot;]</code></pre>
<p>Die <code>pass_env</code>-Einstellung ist wichtig: Der Ruby-Debugger (<code>rdbg</code>) versucht beim Start automatisch einen Unix-Socket zu öffnen, was Seatbelt im Localhost-Modus blockiert. Mit <code>RUBY_DEBUG_ENABLE=0</code> als Environment-Variable umgeht ihr das Problem.</p>
<h2>Was blockiert die Sandbox konkret?</h2>
<p>Ein <code>sx --explain</code> zeigt euch genau, was erlaubt und was gesperrt ist:</p>
<pre><code class="language-bash">=== Sandbox Configuration ===

Network Mode: Localhost

Working Directory (full access):
  /Users/mathias/Workspace/mein-projekt

Denied Read Paths:
  - ~/.ssh
  - ~/.aws
  - ~/.docker/config.json
  - ~/Documents
  - ~/Desktop
  - ~/Downloads</code></pre>
<p>Und das könnt ihr leicht verifizieren:</p>
<pre><code class="language-bash"># Funktioniert – Projektdateien sind lesbar
sx -- cat README.md

# Blockiert – SSH-Keys sind geschützt
sx -- cat ~/.ssh/id_rsa
# =&gt; No such file or directory

# Blockiert – kein Schreibzugriff außerhalb des Projekts
sx -- touch ~/Desktop/test
# =&gt; Operation not permitted</code></pre>
<p>Seatbelt macht die gesperrten Dateien quasi unsichtbar. Ein Prozess in der Sandbox weiß nicht einmal, dass <code>~/.ssh/id_rsa</code> existiert.</p>
<h2>Netzwerk-Modi</h2>
<p><code>sx</code> bietet drei Netzwerk-Modi, die ihr je nach Aufgabe kombiniert:</p>
<table>
<thead>
<tr>
<th>Modus</th>
<th>Befehl</th>
<th>Erlaubt</th>
</tr>
</thead>
<tbody>
<tr>
<td>Offline</td>
<td><code>sx --</code></td>
<td>Kein Netzwerk</td>
</tr>
<tr>
<td>Localhost</td>
<td><code>sx localhost --</code></td>
<td>Nur 127.0.0.1 (Docker-Services)</td>
</tr>
<tr>
<td>Online</td>
<td><code>sx online --</code></td>
<td>Voller Netzwerkzugriff</td>
</tr>
</tbody>
</table>
<p>In der Praxis heißt das:</p>
<pre><code class="language-bash"># Linting braucht kein Netzwerk
sx -- bundle exec rubocop

# Tests brauchen die lokale Datenbank
RUBY_DEBUG_ENABLE=0 sx localhost -- bundle exec rspec

# Gems installieren braucht Internet
sx online -- bundle install</code></pre>
<h2>Einsatz mit AI Coding-Agents</h2>
<p>Jetzt zum eigentlichen Punkt: Warum das Ganze besonders relevant für AI-Tools ist.</p>
<h3>Claude Code</h3>
<p>Claude Code hat einen eingebauten <code>--dangerously-skip-permissions</code>-Modus, der alle Bestätigungsdialoge überspringt. Praktisch, aber riskant. Mit <code>sx</code> könnt ihr diesen Modus nutzen und trotzdem sicher bleiben:</p>
<pre><code class="language-bash">sx claude -- claude --dangerously-skip-permissions</code></pre>
<p>Das <code>claude</code>-Profil gibt Claude Zugriff auf <code>~/.claude</code>, während alles andere gesperrt bleibt. Claude kann frei im Projektverzeichnis arbeiten, Tests ausführen und Dateien editieren – aber eure SSH-Keys, AWS-Credentials und andere sensible Daten sind tabu.</p>
<h3>OpenAI Codex</h3>
<p>Für Codex gilt das gleiche Prinzip:</p>
<pre><code class="language-bash">sx localhost -- codex</code></pre>
<h3>Warum nicht einfach Docker?</h3>
<p>Docker ist natürlich auch eine Option, aber <code>sx</code> hat ein paar Vorteile für den täglichen Einsatz:</p>
<ul>
<li><strong>Kein Overhead</strong>: Kein Container-Build, kein Volume-Mounting, keine Port-Forwards</li>
<li><strong>Native Performance</strong>: Läuft direkt auf dem Host, keine Virtualisierung</li>
<li><strong>Einfache Integration</strong>: Ein Prefix vor dem Befehl, fertig</li>
<li><strong>Zugriff auf lokale Tools</strong>: Eure installierte Ruby-Version, eure Shell-Config – alles da</li>
</ul>
<h2>Mein Alltags-Setup</h2>
<p>So sieht mein typischer Workflow aus:</p>
<table>
<thead>
<tr>
<th>Aufgabe</th>
<th>Befehl</th>
</tr>
</thead>
<tbody>
<tr>
<td>Tests ausführen</td>
<td><code>RUBY_DEBUG_ENABLE=0 sx localhost -- bundle exec rspec</code></td>
</tr>
<tr>
<td>Einzelnen Test</td>
<td><code>RUBY_DEBUG_ENABLE=0 sx localhost -- bundle exec rspec spec/models/user_spec.rb</code></td>
</tr>
<tr>
<td>Linting</td>
<td><code>sx -- bundle exec rubocop</code></td>
</tr>
<tr>
<td>Gems installieren</td>
<td><code>sx online -- bundle install</code></td>
</tr>
<tr>
<td>Rails Server</td>
<td><code>RUBY_DEBUG_ENABLE=0 sx localhost -- bin/rails server</code></td>
</tr>
<tr>
<td>Rails Console</td>
<td><code>RUBY_DEBUG_ENABLE=0 sx localhost -- bin/rails console</code></td>
</tr>
<tr>
<td>AI-Agent starten</td>
<td><code>sx claude -- claude</code></td>
</tr>
<tr>
<td>Git Push</td>
<td>Außerhalb der Sandbox (SSH-Keys blockiert)</td>
</tr>
</tbody>
</table>
<h2>Fazit</h2>
<p>AI Coding-Agents sind gekommen, um zu bleiben. Die Produktivitätsgewinne sind real. Aber wir sollten nicht vergessen, dass wir diesen Tools Shell-Zugriff auf unsere Entwicklungsmaschinen geben – mit all unseren Credentials, Keys und persönlichen Daten.</p>
<p><code>sx</code> löst das elegant: Ein Befehlsprefix, ein paar Zeilen Config, und eure AI-Agents arbeiten in einer Sandbox, die sie alles tun lässt, was sie für die Entwicklung brauchen – und nichts darüber hinaus.</p>
<p>Viel Spaß beim Ausprobieren!</p>
<p><strong>Links:</strong></p>
<ul>
<li><a href="https://github.com/agentic-dev3o/sandbox-shell">sandbox-shell auf GitHub</a></li>
<li><a href="https://claude.ai/claude-code">Claude Code</a></li>
<li><a href="https://developer.apple.com/documentation/security">macOS Seatbelt Dokumentation</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://webmatze.de/ai-coding-agents-sicher-ausfuehren-mit-sandbox-shell-sx/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
