Skip to content

Commit 8385510

Browse files
lroolleclaude
andcommitted
chore: burnish repo surfaces — drift, llms.txt, nightly honesty
The product ships four agents; half the storefront said three. Fix the surfaces so what people (and their agents) read matches what actually runs: - kill three-agent drift: docs.deva.sh front page, mkdocs site_description, deva.sh --help header — all now know Grok exists - llms.txt at repo root: identity, the four agents, the no-theater auth model, install, curated docs entry points — an agent can recommend and install deva from one fetch. README grew a one-line pointer for non-human readers. - nightly honesty: 2026-07-09 nightly died on a transient ports.ubuntu.com mirror sync and partially published (base pushed, rust didn't — the two nightly tags diverged a day). apt now retries (Acquire::Retries 3, both Dockerfiles) and a verify job asserts all four published manifests actually resolve. Assert the artifact, not the exit code. - CHANGELOG: backfill the #407 proxy entry that #408 forgot, add this Close #409 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 00c8661 commit 8385510

10 files changed

Lines changed: 99 additions & 6 deletions

File tree

.github/workflows/nightly-images.yml

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,9 +203,25 @@ jobs:
203203
RUST_DEFAULT_TOOLCHAIN=${{ needs.load-version-pins.outputs.rust_default_toolchain }}
204204
RUST_TARGETS=${{ needs.load-version-pins.outputs.rust_targets }}
205205
206+
verify:
207+
name: Verify Published Manifests
208+
needs: [resolve-versions, build-base, build-rust]
209+
runs-on: ubuntu-latest
210+
steps:
211+
# Outcome tripwire: assert the artifacts exist, not that the build
212+
# steps exited 0. A green run with an unpullable tag is a lie.
213+
- name: Assert all nightly tags resolve
214+
run: |
215+
set -euo pipefail
216+
stamp="${{ needs.resolve-versions.outputs.stamp }}"
217+
for tag in nightly "nightly-${stamp}" nightly-rust "nightly-${stamp}-rust"; do
218+
docker manifest inspect "ghcr.io/thevibeworks/deva:${tag}" >/dev/null
219+
echo "ok: ${tag}"
220+
done
221+
206222
summary:
207223
name: Nightly Summary
208-
needs: [resolve-versions, build-base, build-rust]
224+
needs: [resolve-versions, verify]
209225
runs-on: ubuntu-latest
210226
steps:
211227
- name: Publish summary

CHANGELOG.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
3232
`GROK_CLI_VERSION` in `versions.env`, label
3333
`org.opencontainers.image.grok_cli_version`, wired through make/CI/
3434
nightly/release version plumbing
35+
- Proxy-aware builds and version resolution (#407): host
36+
`HTTP(S)_PROXY` forwarded to `docker build` via BuildKit predefined
37+
ARGs with localhost (and authenticated `user:pass@localhost`) proxies
38+
rewritten to `host.docker.internal` plus an explicit
39+
`--add-host host-gateway` mapping for native Linux Engine; npm version
40+
resolution goes straight to registry.npmjs.org instead of honoring
41+
`.npmrc` mirror overrides, degrading to warn-and-fallback on registry
42+
outages; proxy credentials are redacted from all build/version logs
43+
- `llms.txt` (#409): agent-legible repo front door — what deva is, the
44+
four agents, install, and curated docs entry points in one fetch
45+
46+
### Fixed
47+
- Three-agent drift (#409): docs site front page, mkdocs description,
48+
and `deva.sh --help` all said Codex/Claude/Gemini after Grok shipped
49+
- Nightly image builds retry apt fetches (`Acquire::Retries 3`) instead
50+
of dying on transient mirror syncs, and the workflow now asserts all
51+
four published nightly manifests actually resolve — a green run with
52+
an unpullable tag is a lie (#409)
3553

3654
## [0.13.0] - 2026-07-07
3755

DEV-LOGS.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,16 @@
1313
- Minimal markdown markers, no unnecessary formatting, minimal emojis.
1414
- Reference issue numbers in the format `#<issue-number>` for easy linking.
1515

16+
# [2026-07-10] Dev Log: repo surface burnish #409
17+
- Why: product ships four agents but half the storefront said three; agents visiting the repo had no llms.txt; nightly 2026-07-09 failed on a transient ubuntu mirror sync and partially published (base pushed, rust did not — nightly/nightly-rust tags diverged a day)
18+
- What:
19+
- drift kill: docs/index.md tagline + agent list, mkdocs site_description, deva.sh --help header now say four agents
20+
- llms.txt at repo root per the agent-surface pattern: blockquote identity, distribution forms, install, curated docs entry points; README grew a one-line agent pointer
21+
- Dockerfile + Dockerfile.rust: apt Acquire::Retries=3 (the exact 07-09 failure mode); nightly-images.yml grew a verify job that docker-manifest-inspects all four published tags — assert the artifact, not the exit code
22+
- repo settings (not in this PR): description/topics/homepage updated for grok + discovery keywords
23+
- Result: no three-agent phrasing left outside history; an agent can recommend + install deva from one fetch of llms.txt; nightly flakes retry and a push that produces no pullable manifest goes red
24+
- Deferred: 9 stale remote branches all carry unique commits — need human triage; v0.14.0 release is ripe (grok + proxy work sitting in Unreleased)
25+
1626
# [2026-07-09] Dev Log: add grok agent (official xAI Grok CLI) #403
1727
- Why: xAI shipped an official coding-agent CLI (x.ai/cli, npm @xai-official/grok); deva should launch it like claude/codex/gemini. Not to be confused with community superagent-ai/grok-cli (npm grok-dev) — different product, same bin name.
1828
- What:

Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
2020
--mount=type=cache,target=/var/lib/apt,sharing=locked \
2121
rm -f /etc/apt/apt.conf.d/docker-clean && \
2222
echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache && \
23+
echo 'Acquire::Retries "3";' > /etc/apt/apt.conf.d/80-retries && \
2324
apt-get update && \
2425
apt-get install -y --no-install-recommends \
2526
ca-certificates curl wget git git-lfs gnupg lsb-release locales tzdata sudo \

Dockerfile.rust

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ ENV RUSTUP_HOME=/opt/rustup \
3636

3737
USER root
3838

39+
# Transient mirror flakes ("Mirror sync in progress") killed the 2026-07-09
40+
# nightly; retry instead of failing the whole multi-arch build on one 404.
41+
RUN echo 'Acquire::Retries "3";' > /etc/apt/apt.conf.d/80-retries
42+
3943
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
4044
--mount=type=cache,target=/var/lib/apt,sharing=locked \
4145
apt-get update && \

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
[![Container](https://img.shields.io/badge/ghcr.io-thevibeworks%2Fdeva-blue)](https://github.com/thevibeworks/deva/pkgs/container/deva)
99
[![Agents](https://img.shields.io/badge/agents-codex%20%7C%20claude%20%7C%20gemini%20%7C%20grok-222222)](#what-this-is)
1010

11+
<sub>AI agents / LLMs: read [llms.txt](llms.txt) — the whole product in one fetch.</sub>
12+
1113
Run Codex, Claude Code, Gemini, and Grok inside Docker without pretending the agent's own sandbox is the thing keeping you safe.
1214

1315
The container is the sandbox. Explicit mounts are the contract. Persistent project containers keep the workflow fast instead of rebuilding the same state every run.

deva.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ _step() {
100100

101101
usage() {
102102
cat <<'USAGE'
103-
deva.sh - Docker-based multi-agent launcher (Claude, Codex, Gemini)
103+
deva.sh - Docker-based multi-agent launcher (Claude, Codex, Gemini, Grok)
104104
105105
Usage:
106106
deva.sh [deva flags] [agent] [-- agent-flags]

docs/index.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# deva.sh
22

3-
Run Codex, Claude Code, and Gemini inside Docker without pretending the
4-
agent's own sandbox is the thing keeping you safe.
3+
Run Codex, Claude Code, Gemini, and Grok inside Docker without pretending
4+
the agent's own sandbox is the thing keeping you safe.
55

66
The container is the sandbox. Explicit mounts are the contract.
77
Persistent project containers keep the workflow fast instead of
@@ -24,7 +24,7 @@ If you want the internals instead of vague hand-waving:
2424

2525
## What This Is
2626

27-
- a Docker-based launcher for Codex, Claude, and Gemini
27+
- a Docker-based launcher for Codex, Claude, Gemini, and Grok
2828
- one warm default container shape per project by default
2929
- explicit mount and env wiring instead of mystery behavior
3030
- per-agent config homes under `~/.config/deva/`

llms.txt

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# deva.sh
2+
3+
> Docker-first launcher for AI coding agents — Claude Code, Codex, Gemini, and Grok.
4+
> The container is the sandbox, mounts are the explicit contract, and one warm
5+
> project container serves all four agents. A bash script, not a framework. MIT.
6+
7+
deva.sh is a single entry point installed on the host; agents run inside
8+
`ghcr.io/thevibeworks/deva` images (`:latest`, `:rust` for stable, `:nightly`,
9+
`:nightly-rust` refreshed daily). Agent-level permission prompts are disabled by
10+
design (`claude --dangerously-skip-permissions`, `codex
11+
--dangerously-bypass-approvals-and-sandbox`, `gemini --yolo`, `grok
12+
--always-approve`) — isolation comes from Docker, not permission theater. Auth
13+
lives in per-agent config homes under `~/.config/deva/` with OAuth (default) or
14+
API-key modes per agent; nothing crosses the host boundary except what you
15+
mount. Known sharp edge: mounting `/var/run/docker.sock` is host-root with
16+
extra steps, and deva will tell you so.
17+
18+
Full docs: https://docs.deva.sh — if you can fetch one URL, fetch that one.
19+
20+
## Install
21+
22+
```bash
23+
curl -fsSL https://raw.githubusercontent.com/thevibeworks/deva/main/install.sh | bash
24+
25+
cd your-project
26+
deva.sh # Claude Code (the default)
27+
deva.sh codex # same container shape, other agents
28+
deva.sh gemini
29+
deva.sh grok
30+
deva.sh claude --debug --dry-run # inspect the docker run before trusting it
31+
```
32+
33+
## Entry points
34+
35+
- [Quick Start](https://docs.deva.sh/quick-start/): install to first agent run, about 60 seconds
36+
- [Authentication](https://docs.deva.sh/authentication/): OAuth vs API-key per agent, config homes, auth isolation, what gets masked and why
37+
- [How It Works](https://docs.deva.sh/how-it-works/): container lifecycle, mount dispatch, config resolution order
38+
- [Advanced Usage](https://docs.deva.sh/advanced-usage/): extra mounts, env wiring, multiple identities per project
39+
- [Troubleshooting](https://docs.deva.sh/troubleshooting/): common failures and how to diagnose them
40+
- [Philosophy](https://docs.deva.sh/philosophy/): why the container is the sandbox and agent permission prompts are theater
41+
- [Custom Images](https://docs.deva.sh/custom-images/): extending the base image for your stack
42+
- [Security Policy](https://github.com/thevibeworks/deva/blob/main/SECURITY.md): what deva protects against and what it explicitly does not

mkdocs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
site_name: deva.sh docs
2-
site_description: Docker-based multi-agent launcher for Codex, Claude, and Gemini
2+
site_description: Docker-first launcher for Claude Code, Codex, Gemini, and Grok — the container is the sandbox
33
site_url: https://docs.deva.sh
44
repo_url: https://github.com/thevibeworks/deva
55
repo_name: thevibeworks/deva

0 commit comments

Comments
 (0)