<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="https://illuminatedcomputing.com/">
  <id>https://illuminatedcomputing.com/</id>
  <title>Illuminated Computing</title>
  <updated>2026-06-12T00:00:00Z</updated>
  <link rel="alternate" href="https://illuminatedcomputing.com/" type="text/html"/>
  <link rel="self" href="https://illuminatedcomputing.com/tags/claude/atom.xml" type="application/atom+xml"/>
  <author>
    <name>Paul A. Jungwirth</name>
    <uri>https://illuminatedcommputing.com/</uri>
  </author>
  <entry>
    <id>tag:illuminatedcomputing.com,2026-06-12:/posts/2026/06/my-claude-code-setup/</id>
    <title type="html">My Claude Code Setup</title>
    <published>2026-06-12T00:00:00Z</published>
    <updated>2026-06-12T00:00:00Z</updated>
    <link rel="alternate" href="https://illuminatedcomputing.com/posts/2026/06/my-claude-code-setup/" type="text/html"/>
    <content type="html">
&lt;p&gt;I seem to have an unusual way of running Claude Code, but I find it a good trade-off between convenience and security.&lt;/p&gt;

&lt;p&gt;I was explaining it &lt;a href="https://news.ycombinator.com/item?id=48500852"&gt;on HN&lt;/a&gt;, but I wanted to write it down here too:&lt;/p&gt;

&lt;p&gt;I always run with &lt;code&gt;--dangerously-skip-permissions&lt;/code&gt; (or whatever it’s called; there’s a global flag I set a long time ago). I assume everyone does. It’s too tedious otherwise. But how can I do that with tolerable risk?&lt;/p&gt;

&lt;p&gt;In fact in &lt;em&gt;any&lt;/em&gt; mode, I wouldn’t want to run Claude without restrictions. My account has AWS creds, k8s creds, ssh keys, Github access, &lt;code&gt;.env&lt;/code&gt; files from dozens of customers with who-knows-what. . . . I can run &lt;code&gt;sudo&lt;/code&gt; and &lt;code&gt;pass&lt;/code&gt; unchallenged, if I recently gave the password. There are scripts in &lt;code&gt;~/bin&lt;/code&gt; to join VPNs and log in to databases. My browser is signed in everywhere. Thunderbird can send/receive email. And even if Claude never forgets a boundary, aren’t I sending Anthropic at least the &lt;code&gt;.env&lt;/code&gt; files?&lt;/p&gt;

&lt;p&gt;So my solution was to give Claude its own OS user.&lt;/p&gt;

&lt;p&gt;People say the LLM is like another co-worker, so I’m treating it that way. He has similar dotfiles to mine, but no secrets. My own home directory is 0700. He has his own ssh key that I added to my github profile, but it’s password-protected, and I push/pull for him. He has his own Postgres (non-superuser!) {development,test} {users,databases}. If he needs something run with sudo, he asks me. Often we can both work on something in parallel. I’m on Debian 13 with xfce, but I think this would work well elsewhere. Unix was supposed to be a multi-user system after all.&lt;/p&gt;

&lt;p&gt;When I want Claude to do something, I open another terminal tab and &lt;code&gt;su&lt;/code&gt; to his account. He has a &lt;code&gt;~/src&lt;/code&gt; folder for projects, just like me. I go to one of those and start a tmux session. His &lt;code&gt;~/.tmux.conf&lt;/code&gt; gives every session a yellow status bar, so they’re easy to recognize. Then new shells are just &lt;code&gt;Ctrl-a c&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Usually I keep the first tmux window in bash, so I can push/pull, read commits/diffs, run extra tests, and do whatever else. I run the claude session in the second window. If I need to do more things, I start more windows. Frequently window 3 is psql. More for vim, etc. (I’m speaking of &lt;em&gt;tmux’s&lt;/em&gt; windows here.)&lt;/p&gt;

&lt;p&gt;A trick I use a lot is that many of his git repos have an extra remote, like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;paul  ssh://paul@localhost/~/src/example (fetch)
paul  ssh://paul@localhost/~/src/example (push)&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That makes it easy to collaborate on things I’m not ready to share. I also set up a &lt;code style="white-space:nowrap"&gt;/pub/paul&lt;/code&gt; folder where I can put non-repo things outside of &lt;code&gt;~paul&lt;/code&gt;, but I’ve hardly used it.&lt;/p&gt;

&lt;p&gt;I like that I’m not mucking with VMs. Everything is on the host. Everything is set up once. Claude’s environment is as comfortable as mine. And some of Claude’s assignments require &lt;em&gt;him&lt;/em&gt; running VMs, so there is no extra nesting.&lt;/p&gt;

&lt;p&gt;I’ve been using this setup for months, and I really like it.&lt;/p&gt;

&lt;p&gt;I do worry about Linux privilege escalation bugs. I don’t trust an AI to understand that exploiting vulns is not acceptable. (I can’t help but recall that at my first job I may have misused vim’s &lt;code&gt;:!&lt;/code&gt; feature to broaden my sudo powers, which were officially limited to editing &lt;code&gt;httpd.conf&lt;/code&gt;, when I needed something in a hurry. . . .) I find myself manually upgrading packages more often these days, despite automatic security updates. I don’t think Opus would go to the trouble of looking up security vulns, but maybe Fable would, and there have been a lot lately. Maybe some future model will just take it upon itself to find new ones. Or install a keylogger to learn the ssh key password. I’m sure they would be polite about it.&lt;/p&gt;

&lt;p&gt;Would a VM be more secure? I don’t have an intuition there. There are hypervisor escape vulns too, and I’m anxious about shared folders. For instance in vagrant the guest gets &lt;code&gt;/vagrant&lt;/code&gt; to read/write the host folder. You’d have to be very careful what you put where.&lt;/p&gt;

&lt;p&gt;Come to think of it, since the guest can edit &lt;code&gt;/vagrant/Vagrantfile&lt;/code&gt; and reboot, it must not be very confined, right? At minimum it can leave a surprise there for the next time you run a vagrant command.&lt;/p&gt;

&lt;p&gt;The biggest annoyance so far is running docker containers. I don’t want to add &lt;code&gt;claude&lt;/code&gt; to the &lt;code&gt;docker&lt;/code&gt; group or give it sudo privileges. I’ve read that you can set up rootless docker for a user, and even that you can run it side-by-side with a normal system-wide docker, but I haven’t tried doing that yet. If that doesn’t work, I will probably give Claude his own machine. I have plenty of spare boxes/laptops lying around.&lt;/p&gt;

&lt;p&gt;What do you think? Are there security problems with my approach? I think it’s a good way to be efficient but responsible.&lt;/p&gt;
</content>
  </entry>
</feed>

