Run coding agents in isolated Docker containers
Project description
clankr
Run Claude Code in isolated Docker containers. --dangerously-skip-permissions without the danger.
install
uv tool install clankr
setup
clankr init
# prompts for: github username, bot username, PAT
Create a classic PAT on the bot account with repo scope.
per-repo setup (recommended)
clankr setup-repo user/project
# then accept the invitation (log in as bot → github.com/notifications)
This adds the bot as a collaborator and configures the repo with:
- Branch protection: PRs required for main, owner bypasses
- Squash merge only, auto-delete branch on merge
This step is optional — agents work without it, but branch protection prevents them from pushing directly to main.
usage
clankr launch user/project # interactive, bare profile
clankr launch -p gsd user/project # GSD workflow
clankr launch -d -p gsd user/project # detached (tmux)
clankr launch -d -p gsd -s auth-fix user/project # named slot
clankr launch /path/to/local/repo # local repo
clankr run user/project -- -p "prompt" # non-interactive, stdout capture
clankr run /path/to/repo -p ./profile -- -p "prompt" # local repo, custom profile path
clankr sync user/project /path/to/host/repo # register session sync mapping
clankr sync # list sync mappings
clankr resume project-1 # relaunch a stopped slot
clankr attach project-1 # reattach to detached agent
clankr save project-1 /path/to/host/repo # export sessions to host ~/.claude/
clankr ls # list slots
clankr rm project-1 # remove (warns if unpushed)
clankr clean # remove all stopped clean slots
$ clankr ls
SLOT PROFILE STATUS SYNC REPO
hello-world-1 gsd detached yes /home/max/.local/share/clankr/repos/hello-world-1
project-2 gsd running - /home/max/.local/share/clankr/repos/project-2
project-1 bare stopped - /home/max/.local/share/clankr/repos/project-1
profiles
Each profile is an isolated claude code config — system prompt, settings, hooks, extensions.
bare— claude code, skip permissions, no extrasgsd— get shit done workflow framework
-p takes a profile name (looked up in ~/.config/clankr/profiles/) or a path to a profile directory. Each profile is a directory with any of:
CLAUDE.md— system promptsettings.json— claude code settingsinit— executable script that runs inside the container before claude starts (install plugins, extensions, etc.)
clankr profiles # list available profiles
cp -r ~/.config/clankr/profiles/gsd ~/.config/clankr/profiles/my-custom
vim ~/.config/clankr/profiles/my-custom/CLAUDE.md
how it works
- each slot gets its own repo clone and claude config
- session sync: local repos auto-sync sessions to host
~/.claude/; for remote repos,clankr sync user/project /host/pathregisters a mapping — sessions are bind-mounted and write directly to the host - session preservation:
rm/cleanauto-archive sessions before deleting (--purgeto skip) - credentials copied fresh from host
~/.claude/.credentials.jsonon each launch (tokens expire ~8h) --dangerously-skip-permissionsbaked into the container-dwraps the container in a tmux session — survives SSH disconnects- git identity: configurable bot account with scoped PAT
- branch protection via
setup-repo: require PR + approval for main, owner bypasses, squash-only merges
commands
| Command | Description |
|---|---|
clankr init |
First-time setup: config + default profiles |
clankr launch |
Launch an agent (-p profile, -s slot, -d detach) |
clankr run |
Run claude non-interactively (-p profile, -s slot, -- claude args) |
clankr ls |
List all slots |
clankr resume <slot> |
Relaunch a stopped slot (keeps repo, profile, sync) |
clankr attach <slot> |
Attach to detached agent's tmux session |
clankr sync [repo] [path] |
Manage session sync mappings (list / add / --remove) |
clankr save <slot> <path> |
Export sessions to host ~/.claude/ for claude --resume |
clankr rm <slot> |
Remove slot, auto-archives sessions (--purge to skip) |
clankr clean |
Remove all stopped clean slots, auto-archives (--purge to skip) |
clankr logs <slot> |
Show container logs |
clankr setup-repo <repo> |
Add bot collaborator + branch protection + squash merge |
clankr profiles |
List available profiles |
clankr version |
Print clankr version |
paths
| What | Where |
|---|---|
| Config | ~/.config/clankr/config.toml |
| Sync mappings | ~/.config/clankr/sync_map.json |
| Profiles | ~/.config/clankr/profiles/ |
| Dockerfile override | ~/.config/clankr/Dockerfile |
| Repo clones | ~/.local/share/clankr/repos/ |
| Slot state | ~/.local/share/clankr/run/ |
| Archived sessions | ~/.local/share/clankr/sessions/ |
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file clankr-1.3.1.tar.gz.
File metadata
- Download URL: clankr-1.3.1.tar.gz
- Upload date:
- Size: 11.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
13c58fefe4991a4b1757b8ff250eeca6f70e9731bab4a907afaea75c541dad0a
|
|
| MD5 |
81459d0ec3b5aea2040b0a24bb9f79d9
|
|
| BLAKE2b-256 |
e06416eab6de79dae7dd1682c8b8ee96a8dfa8af903df2354cb0a98dcaa743b7
|
File details
Details for the file clankr-1.3.1-py3-none-any.whl.
File metadata
- Download URL: clankr-1.3.1-py3-none-any.whl
- Upload date:
- Size: 16.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
925fef0466b4de616ee5a194a2344b587ab5b5c488b0d787d2a1273d0c470953
|
|
| MD5 |
137cae0ceb8de6bd55a81f2d0a75e690
|
|
| BLAKE2b-256 |
1010147019dba6692a296598047019262d6e6a6ffec5303ddca938a0790f3ee6
|