This is the shortest path from zero to a working deva.sh container.
You need:
- Docker
- a project directory you trust
- one agent auth path that actually works
If your plan is "mount my whole laptop and see what happens", that is not a prerequisite. That is a mistake.
curl -fsSL https://raw.githubusercontent.com/thevibeworks/deva/main/install.sh | bashThat installs:
deva.shclaude.sh(legacy compatibility wrapper)claude-yolo(legacy compatibility wrapper)agents/claude.shagents/codex.shagents/gemini.shagents/shared_auth.sh
It also pulls ghcr.io/thevibeworks/deva:latest, with Docker Hub as fallback.
cd ~/work/my-project
deva.sh codexBy default, deva:
- mounts the current project at the same absolute path inside the container
- creates or reuses one persistent container for that project
- uses the per-agent config home under
~/.config/deva/ - auto-links legacy local auth homes into that config root unless you disable autolink
If you already have local agent auth, first run is usually boring. Good. Boring is the point.
# See the container for this project
deva.sh ps
# Open a shell inside it
deva.sh shell
# Show the resolved wrapper config
deva.sh --show-config
# Show the docker command without running it
deva.sh claude --debug --dry-run
# Stop or remove the project container
deva.sh stop
deva.sh rmSame project, same default container shape:
deva.sh claude
deva.sh geminiThat is one of the main reasons this wrapper exists. You do not need a separate pet workflow for every vendor.
If you change mounts, explicit config-home, or auth mode, deva will split into a different persistent container shape instead of pretending those runs are equivalent.
Codex with OpenAI API key:
export OPENAI_API_KEY=sk-...
deva.sh codex --auth-with api-keyClaude with a direct Anthropic-style key or token:
export ANTHROPIC_API_KEY=sk-ant-...
deva.sh claude --auth-with api-keyClaude with a custom endpoint:
export ANTHROPIC_BASE_URL=https://example.net/api
export ANTHROPIC_AUTH_TOKEN=token
deva.sh claude --auth-with api-keyGemini with API key:
export GEMINI_API_KEY=...
deva.sh gemini --auth-with api-keyMore auth details live in Authentication Guide.
Throwaway container:
deva.sh claude --rmBare mode with no config loading or host auth mounts:
deva.sh claude -QIsolated auth home:
deva.sh claude -c ~/auth-homes/workUse these before you start editing code out of frustration:
deva.sh --show-config
deva.sh claude --debug --dry-run
deva.sh shellThen read Troubleshooting.