This is the index for a series of posts about running AI coding agents inside Docker containers. It started with Claude Code and a clean-machine obsession, then grew into something more general: a portable, tool-agnostic setup that works for any AI coding agent.
If you’re new here, start at the top and work your way down. Each post builds on the previous one.
The series
1. Running Claude Code in Docker
The foundation. A Dockerfile with every tool you might need, launcher scripts that let you type cc from any project folder, and volume mounts that make it all work.
2. Worktrees and configuration
Teaching an AI agent your conventions. Cross-platform git worktrees with git-wtadd, parallel agents on different branches, plugin path fixes, and an AGENTS.md file that works like onboarding documentation.
3. Adding OpenCode to the Docker toolbox
The setup wasn't as portable as I thought. Extracting shared launcher infrastructure, making the entrypoint tool-agnostic, and working around OpenCode's terminal quirks.
Read post →4. From Claude-specific to agent-agnostic
Ergonomic fixes, smarter worktrees, terminal key conflicts, and the design principle behind all of it: build infrastructure for the category, not a single tool.
Read post →5. Sticking with Claude Code
A week of daily use later: what OpenCode got right, what didn't work in practice, and why I'm back to Claude Code.
Read post →6. Autonomous mode and a git push I almost missed
Two post-series fixes: letting Claude run without interruptions inside Docker using --risk and IS_SANDBOX=1, and a git-wtadd bug that was silently pushing commits to main.
The repository
All scripts, the Dockerfile, and the documentation live in a single repository: dvdstelt/ai-agents. Each post references specific files and commits from it, so you can follow along or just grab what you need.





