Conversation
- let non-interactive launch paths run without forcing a TTY - make the installer testable from a local checkout and smoke it in CI - add examples, a PR template, and Codex-first deva copy to cut drift
|
Claude finished @lroolle's task in 3m 29s —— View job Security Audit of PR #213
|
There was a problem hiding this comment.
Pull request overview
This PR updates deva’s installer, CI, and public docs/branding to support non-interactive launch paths (no forced TTY), add smoke coverage in CI, and provide concrete usage examples.
Changes:
- Make
deva.shDocker terminal flags conditional on TTY presence (supporting non-interactive runs). - Add an installer+agent smoke test job to CI, and make
install.shsupport a configurable download base URL for local/CI testing. - Refresh docs/README/AGENTS guidance and add example
.devaconfigs plus a PR template.
Reviewed changes
Copilot reviewed 15 out of 15 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
install.sh |
Adds DEVA_INSTALL_BASE_URL override for downloads; updates quick-start output. |
deva.sh |
Introduces DOCKER_TERMINAL_ARGS to avoid -t when no TTY (fix non-interactive exec/run). |
.github/workflows/ci.yml |
Adds “Installer Smoke Test” job that installs via install.sh and runs agents without a TTY. |
.github/workflows/claude.yml |
Updates system prompt/tooling references to “deva” and includes ./deva.sh in allowed tools. |
docs/quick-start.md |
Updates install output list and quick-start commands; adds auth examples ordering. |
docs/index.md |
Updates branding/ordering and examples to lead with deva.sh/Codex. |
README.md |
Aligns public branding and adds link to examples/. |
examples/README.md |
Adds a short overview of the included example .deva configs. |
examples/basic/.deva |
Adds a “basic” per-project config example (mounts + editor env). |
examples/rust/.deva |
Adds a Rust profile + env example. |
examples/isolated-auth/.deva |
Adds an example showing isolation knobs via env. |
Makefile |
Switches release targets to run prompts via ./deva.sh claude -Q. |
AGENTS.md |
Rewrites agent guidance to reflect current deva architecture/workflow and branding. |
TODO.md |
Updates TODO focus away from legacy “Claude YOLO” naming. |
.github/pull_request_template.md |
Adds a PR template emphasizing verification and risk areas. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review. Take the survey.
| if [ -t 0 ] && [ -t 1 ]; then | ||
| DOCKER_TERMINAL_ARGS=(-it) | ||
| elif [ ! -t 0 ]; then | ||
| DOCKER_TERMINAL_ARGS=(-i) | ||
| fi |
There was a problem hiding this comment.
DOCKER_TERMINAL_ARGS calculation leaves the array empty when stdin is a TTY but stdout is not (e.g., redirecting output). In that case docker run --rm will close stdin, which can break interactive agents even though a TTY stdin is available. Consider deriving -i and -t independently (at minimum: add -i whenever -t 0 is true, and only add -t when you actually want/allow a TTY).
| if [ -t 0 ] && [ -t 1 ]; then | |
| DOCKER_TERMINAL_ARGS=(-it) | |
| elif [ ! -t 0 ]; then | |
| DOCKER_TERMINAL_ARGS=(-i) | |
| fi | |
| if [ -t 0 ]; then | |
| DOCKER_TERMINAL_ARGS+=(-i) | |
| fi | |
| if [ -t 1 ]; then | |
| DOCKER_TERMINAL_ARGS+=(-t) | |
| fi |
| VOLUME=$HOME/.ssh:/home/deva/.ssh:ro | ||
| VOLUME=$HOME/.config/git:/home/deva/.config/git:ro |
There was a problem hiding this comment.
These volume specs use $HOME, but .deva parsing currently only expands ~, ${VAR}-style env expansions, and $PWD/$(pwd) (not plain $HOME). As written, Docker will receive a literal $HOME/... host path and the mounts will fail. Use ~ or ${HOME} in the example so it works with the current config loader.
| VOLUME=$HOME/.ssh:/home/deva/.ssh:ro | |
| VOLUME=$HOME/.config/git:/home/deva/.config/git:ro | |
| VOLUME=~/.ssh:/home/deva/.ssh:ro | |
| VOLUME=~/.config/git:/home/deva/.config/git:ro |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 73c890b684
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| ENV=DEVA_NO_AUTOLINK=1 | ||
| ENV=DEVA_NO_DOCKER=1 |
There was a problem hiding this comment.
Replace ENV isolation flags with wrapper variables
The isolated-auth example sets DEVA_NO_AUTOLINK and DEVA_NO_DOCKER via ENV=..., but ENV= directives are only passed into the container and do not change launcher behavior, so this config does not actually disable autolink or Docker-socket auto-mounting. Users copying this example will still inherit host auth behavior the example is meant to isolate; these should be top-level wrapper variables (for example AUTOLINK=false and DEVA_NO_DOCKER=1).
Useful? React with 👍 / 👎.
| .PHONY: release-patch | ||
| release-patch: | ||
| @./claude-yolo "Execute release workflow from @workflows/RELEASE.md for a **patch** release" | ||
| @./deva.sh claude -Q -- -p "Execute release workflow from @workflows/RELEASE.md for a **patch** release" |
There was a problem hiding this comment.
Drop quick mode from release Makefile targets
Using -Q in the release targets puts deva in bare mode (deva.sh --help: no host config mounts and no autolink), but the release workflow requires git push --tags (workflows/RELEASE.md step 7). In common setups where git auth comes from mounted host config/SSH credentials, these targets will fail at push time because -Q strips those mounts.
Useful? React with 👍 / 👎.

Summary
Verification
Notes