A simple CLI tool for running autonomous Claude Code agents in isolated Docker containers.
This is alpha version software developed for private use! Avoid using it for critical tasks or production setup.
- Go 1.25+
- Docker
- Start Docker daemon
- Build example images (see /docker folder)
- Export
CLAUDE_CODE_OAUTH_TOKENfromclaude setup-token - Build the binary and run
make build
./dwoe fire --repo=/path/to/src --do="create a new package to format time"The fire command launches a container, mounts the input folder, and runs an agentic loop to implement the requirements
in the prompt. There is a --work flag to define a prompt file. See other sections for more commands. Check out
the examples folder to see more use-cases.
There are multiple commands to run and inspect workers.
dwoe <version>
Usage:
dwoe [flags] <command> [args]
Flags:
--datadir <dir> Data directory (default: ~/.dwoe)
--logfile <path> Write JSON logs to file
--loglevel <level> Log level: debug, info, warn, error (default: warn)
--logfmt <format> Log format: text, json (default: json)
--noproxy Disable proxy container
Commands:
batch <dir> Run all task files in parallel
collect <name|id> [--batch ID] Collect commits into a repo branch
create <task.yaml> Create workspace from config
destroy <name|id> Remove workspace
fire --repo <url|path> [flags] Quick-start workspace from repo
inspect <name|id> Show detailed workspace info
list [--format FMT] List workspaces
logs <name|id> Show workspace logs
patches <name|id> --dir <dir> Export patches to directory
run <task.yaml> Create and start workspace
start <name|id> Start existing workspace
status <name|id> Show workspace status
stop <name|id> Stop running workspace
version Show version
web [--addr ADDR] Start web dashboard
The default location for workspace data, including logs, code artifacts, and task config, is ~/.dwoe.
Use dwoe list to show the list of running and finished workers.
Use dwoe inspect <name|id> to get information about the worker.
Each dwoe fire|run starts two containers:
- The one with agentic loop implementing the task, and
- The proxy container that prevents arbitrary web requests.
There are a few Docker files to build default agent containers. A custom container can be used instead.
See examples and default config. Use YAML files and run command to redefine the
image, or build example images with dwoe-agent:latest and dwoe-proxy:latest names.
Each spawned worker looks for CLAUDE_CODE_OAUTH_TOKEN to authenticate claude binary requests.
Build a custom image to modify the entry point and provide the authentication credentials differently.
Running a worker from a task file:
dwoe run task.yamlThe file format:
name: my-task
source:
local_path: ./repo
prompt_file: ./prompt.md
agent:
image: dwoe-agent:go
model: claude-sonnet-4-6
max_turns: 10
env_vars:
CLAUDE_CODE_OAUTH_TOKEN: ${CLAUDE_CODE_OAUTH_TOKEN}
git:
user_name: "dwoe-agent"
user_email: "agent@dwoe.dev"
resources:
cpu: "2"
memory: "4G"Use dwoe web to start a dashboard for monitoring workers, streaming logs, and viewing workspace status in the browser.
dwoe web --addr :9090See examples/ for complete walkthroughs covering quick start, single tasks, Python projects, batch parallel runs, patch collection, batch-and-merge workflows, and custom prompt configuration.
make test
make lint
make allNote that the project includes .air.toml and make dev allows hot reloading upon changes.