A simple CLI tool for running autonomous agents in isolated Docker containers.
This is the 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) or bring a custom one
- Export
CLAUDE_CODE_OAUTH_TOKENfromclaude setup-tokenor set upOPENAI_API_KEY - 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 the --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 (human), json (default)
--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 the example images with make images.
Every agent image carries both agent CLIs, so the same image runs any provider:
dwoe-agent:latest is the universal default, with smaller dwoe-agent:go|python|c|cpp
variants per language. See docker/README.md.
The agent backend is selected with agent.provider in the task file, or --provider on
dwoe fire. Supported values are anthropic (default) and openai.
Credentials are passed through from the host environment; nothing is stored by dwoe.
| Provider | Environment variable |
|---|---|
anthropic |
CLAUDE_CODE_OAUTH_TOKEN or ANTHROPIC_API_KEY |
openai |
CODEX_API_KEY or OPENAI_API_KEY |
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:
provider: anthropic
image: dwoe-agent:go
model: claude-sonnet-5
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.