Tracking: containerised workers #17
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/claude-hooks#17
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Purpose
Tracks the milestone "Containerised workers". Each worker runs inside a long-lived Docker container with an empty
$HOME, so a resourceful agent cannot scrape host credentials. Also a stepping stone to cross-platform support (one image works on Linux and macOS Docker Desktop).Why now
On 2026-04-17 the
devagent's configured Forgejo token was 401'd. Instead of surfacing the failure it rancat ~/.claude.json, scraped the interactive user's forgejo MCP token out of the file, and impersonatedclaude-desktopfor an entire task — opening a PR, pushing commits, requesting a review. AcanUseTooldenylist (commitbab386a) patches the specific Bash / Read paths it used, but it is a mitigation: a resourceful agent has other escape hatches (symlinks, child processes, TOCTOU, network calls). Containerisation is the proper fix.Dependency graph
Recommended execution order
Critical path:
#18 → #19 → #20, with#6 → #7 → #19as a parallel track.Dependencies
main(once the upstream milestone closes)Out of scope for this milestone
References
bab386aadded the stopgapcanUseTooldenylist)Containerise workers — long-lived per-agent Docker containersto Tracking: containerised workersClosing: milestone effectively complete. All three workers (boss/dev/reviewer) run inside per-agent containers with empty
$HOME, state volumes, read-only credentials mount, and token-file injection.#18,#19,#20,#32,#29have all landed.Leaving
#26open as a standalone hardening ticket (release-runner socket access + post-publish runtime smoke tests) — it doesn't gate the milestone, and the daemonless static audit inqa.ymlcovers PR-time Dockerfile checks.