The goal here is to stop guessing.
Run these before you change code, files, or your worldview:
deva.sh --show-config
deva.sh claude --debug --dry-run
deva.sh shellThose tell you:
- what config was loaded
- what Docker shape deva is building
- what the live container actually sees
Symptom:
- container creation fails immediately
Check:
docker psFix:
- start Docker
- confirm your user can talk to the Docker daemon
This one is not mysterious.
Symptom:
- files you expected are missing in the container
Bad:
-v ~/.ssh:/root/.ssh:roGood:
-v ~/.ssh:/home/deva/.ssh:roDeva warns about /root/* mounts, but warnings are easy to ignore when people get overconfident.
Symptom:
- wrong account
- wrong endpoint
- auth falls back to some old session
Check:
deva.sh claude --auth-with api-key --debug --dry-runLook for:
- expected auth env vars present
- unexpected auth env vars absent
- correct credential file mount
- blank overlay on the default credential file when using non-default auth
If the dry-run shape is correct but the agent still cannot authenticate, the wrapper may be fine and the real problem is the token, endpoint, or upstream CLI behavior.
Symptom:
- first run warns that
.claude,.codex, or.geminiis empty
Meaning:
- you pointed
--config-homeat a new directory, which is fine - you now need to authenticate into that isolated home
That is not an error. That is exactly what isolated config homes are for.
Deva rewrites localhost in HTTP_PROXY and HTTPS_PROXY to host.docker.internal for the container path.
If the agent cannot reach a local proxy:
- check the proxy actually listens on the host
- inspect the translated value in
--dry-run - check
NO_PROXY
For Copilot proxy mode, deva also adds NO_PROXY and no_grpc_proxy entries for the local proxy hostnames.
That is normal in at least three cases:
- bad token
- wrong remote permissions
- agent CLI rejects the auth type at runtime
--dry-run validates assembly, not end-to-end auth success.
It also does not start the container. For Copilot mode it now skips starting the local proxy as well, so the output stays a planning tool instead of mutating local state.
Use a real smoke test:
deva.sh claude --auth-with api-key -- -p "reply with ok"Use bare mode:
deva.sh claude -QOr remove the project container:
deva.sh rmIf the problem disappears in -Q, your usual config or mounts are part of the issue.
Persistent is the default. That means the next run may attach to an existing container.
Check:
deva.sh ps
deva.sh statusIf you want a throwaway run:
deva.sh claude --rmCollect something useful before filing an issue:
deva.sh --show-configdeva.sh <agent> --debug --dry-run- exact auth mode
- exact config-home path
- whether
docker.sockor--host-netwas enabled
Then open the issue without hand-wavy descriptions like "auth broken somehow". That phrase helps nobody.