image_pdfimage_print

We’ve been using Claude Code for U-Boot development and it’s genuinely useful — writing tests, debugging driver issues, working through refactoring. But running an AI with full access to my dev machine makes one…nervous. So we added a cc subcommand to uman, a tool for managing common U-Boot development tasks, that runs Claude Code inside an LXC container.

Note: uman is someone ‘opinionated’, if you are familiar that term. It expects directories to be in certain places and is so far aimed at Debian-based distributions, particularly Ubuntu.

Why bother?

Claude Code works best with --dangerously-skip-permissions so you don’t have to approve every file read. On a bare host that means the AI can poke around anywhere: SSH keys, other projects, whatever. Inside a container it only sees what you give it.

If things go sideways, uman cc -d mybox and start over.

Getting started

You need LXD:

sudo snap install lxd
lxd init --minimal
sudo usermod -aG lxd $

Then just:

cd ~/dev/u-boot
uman cc

First run takes a couple of minutes – it creates an Ubuntu container, installs build tools and Claude Code, mounts your project, and drops you in. The container sticks around, so next time it’s instant. Use uman cc -c to continue where you left off.

What’s inside

The container gets your project directory, git config, Claude credentials, U-Boot tools, and patman. Each container has its own Claude project scope so --continue works per-container. Build output in /tmp/b can be shared with -o

You can mount extra directories with -m :

uman cc -m /opt/test-data
uman cc -M              # list mounts
uman cc -u data         # remove one

Talking to the host

A container isn’t much use if you’re completely cut off. A few things are wired through:

Clipboard — X11 is forwarded, so Ctrl-V pastes images from the host. Handy for showing Claude a screenshot of a test failure or a logic analyser trace.

Editor — Ctrl-G opens your host $EDITOR. An editor proxy maps container paths back to host paths, so you edit the real file in your normal editor.

Voice — PulseAudio is forwarded. /voice in Claude Code picks up your host microphone so you can talk instead of type.

gh / glab — Both CLI tools are pre-installed for managing PRs and CI without leaving the container.

Other bits

Shell access – uman cc -s gives you a plain shell in the same container. Useful for poking around or running builds manually.

Privileged mode – LUKS tests need device-mapper, which needs uman cc -p. Use -P to go back to normal. This turned out to be more trouble than it’s worth, so please send a PR if you can improve it.

Ephemeral containers – uman cc -e creates a throwaway container with a random name, deleted on exit. Good for experiments.

Session logging – Every session is recorded with script(1) to a timestamped log under ~/files/dev/uman-logs/<name>/ – useful for reviewing what the AI actually did.

Try it

Grab uman from GitHub, cd to your U-Boot tree, and run uman cc. The container handles the rest. If you like it, please add a comment. If you hate it, please send a PR!

Author

  • Simon Glass is a primary author of U-Boot, with around 10K commits. He is maintainer of driver model and various other subsystems in U-Boot.

Leave a Reply

Your email address will not be published. Required fields are marked *