v0.4.38
Signedpublished September 10, 2026What changed
-
A secret can now be a file in one of your workspaces. Plenty of credentials already live as files inside a container — a
~/.netrc, a service-account JSON, a PEM key some tool wrote. Copying one into DevGrail made a second copy that went stale the moment the original was rotated. A secret can now point at a workspace and a path instead, and the file's contents are its value.It is read fresh every time, not copied: rotate the file and the next script run picks up the new value, with nothing to update in DevGrail. Trailing newlines are trimmed, because almost every token file ends with one and almost no program wants it; nothing else about the file is touched, so a PEM key or a
.envblock keeps its shape. The workspace does not have to be running. The file is read once when you save, so a mistyped path is refused in the editor rather than surfacing days later as a failed run — and if the workspace is later deleted or the file moved, the run says which, by name.Everything else about a secret is unchanged. It is still referenced as
@in a script, still injected server-side, still redacted from the run output, and still fills the same reference slots an official script names. Pick a file with the new Browse button on the secret editor, which walks the workspace's filesystem.Agents can manage these too, and still cannot read one:
create_secretandupdate_secrettake a container and a path,list_secretsandget_secretreport which file a secret points at, and no tool returns the contents — reading that file still takesread_fileand a grant on the container it lives in. Naming a workspace as a secret's source requires the same read grant, so a key cannot use a secret to reach a container it was never given. -
A second getting-started guide, for Codex. It builds the same thing the OpenCode guide does — a project, a workspace container, and an API key scoped to just those two — and then points Codex at DevGrail using the official "All agents: connect to DevGrail (MCP)" script, downloaded from the registry as part of the run. Codex still needs a sign-in of its own, which happens in a terminal rather than in DevGrail, so the guide says so, names the option that finishes from a container ("Sign in with Device Code", against a ChatGPT subscription you already have) and hands you a button that opens a full-screen terminal in a new tab with
codexalready starting in the new workspace. Both guides sit under "Get started with your favorite coding agent" on the Guides page, which now lists sections rather than individual guides. The original guide is called "Get started for free with OpenCode", and says outright that OpenCode is open source and can be pointed at models that cost nothing — so a first workspace need not cost you anything either. -
Automations can install from the official registry. A new "Download an official script" step fetches a script by its slug, installs it into your library and publishes its id, so the next step can run it — which is how the Codex automation gets its setup script without the binary carrying a copy. A script you already have is wired to rather than copied again, and nothing you hold is quietly moved to a newer version unless the step asks for it.
-
The built-in "Get started with OpenCode" automation now issues a key the agent can actually build with. Alongside the new project and workspace it was always scoped to, the key reads every skill and script in your account — the ones you have now and the ones you add later — and the official registry, so the agent can install a ready-made skill or script instead of writing one from scratch. It can also list your secrets and API keys by name, which is how it references them from a script; a secret's value and a key's plaintext stay unreadable, and it can neither create, change nor delete either. Keys minted by earlier runs are untouched — re-run the automation, or widen the key on its own page.
-
Automations of your own can grant the same. A "Create an API key" step now has Scripts and Official registry fields beside Skills, so a key an automation mints can reach your script library and download from the official catalog. Both grant nothing unless you ask, so every automation you already have mints exactly the key it minted before.
-
An agent can now pass on its access to the official registry. The key-creation tools accepted every kind of grant except that one, so an agent holding the registry could browse and download from it but could not hand a helper key the same reach — and a key that held it could not be renamed, disabled or deleted over MCP by anyone. Both work now, under the rule the other grants already followed: an agent can only pass on what it holds, and read (browse) does not become write (download).
-
The get-started guide tells you when your workspace is ready. The automation runs on the server, so it used to finish in silence — four checkmarks filling themselves in while you were reading the step below. Now the end of a run is announced, the browser tab says so if you have looked away, and step 1 keeps a note naming the workspace it built and linking to it, so the page still tells you where things stand when you come back to it.
-
The guide's second step no longer points at a workspace that is not there. "Open OpenCode" now says what it is waiting for while step 1 has not run, and when the run finishes the page scrolls to that button rather than leaving you to notice it. Reopening the guide after deleting the workspace it built offers to build a new one instead of opening a container that is gone.
Container images
Installer files
Signature
One signature covers every artifact above. It is made off this host, and neither this site nor the registry behind it can check it — that is the point, and it is why verifying it catches things a checksum from the same server cannot. How to verify it.
curl -fsSL https://web-dev.trixibot.com/api/registry/releases/v0.4.38 -o release.json
# -j, not -r: -r appends a newline the signer never saw, and the check fails.
jq -j '.signature.payload' release.json > payload
jq -r '.signature.signature' release.json | base64 -d > payload.sig
openssl dgst -sha256 -verify devgrail-release.pem -signature payload.sig payload
# -> Verified OK
# The payload must name this release, so an older signed one cannot be replayed.
head -2 payload
# ...and it must name this exact file. -qxF: whole line, literal.
grep -qxF 'image devgrail-container 31 amd64 50957d8a646719d6500b11a832f43f296dec4b6e39d2e5e86950ee34677bea69' payload && echo "digest is covered by the signature"The signed payload — shown for reading, not for verifying
Copy this from the manifest with jq -j, never from this page: the signature covers exact bytes, and rendering here drops the trailing newline the signer included.
devgrail-release-signature-v1
release v0.4.38
asset docker-compose.yml 46 9435825d98455a4d03e0d82c72afac4e64b14faa0d087312147e4b1c3714e8bd
asset install.sh 46 ee5052c1552dd5c34c2d33716aa92f6384ca7464b59ff224785ab986a102f466
asset traefik-dynamic-http.yml 45 e344c8efd13c7d84996e2ebfbc75dcee2d995d8538c8a245c89c0e44fad0089b
asset traefik-dynamic.yml 46 d18fa561b8eb7d53b015284e0246b2d05953bf281b65269c1fae3d6883530db6
asset uninstall.sh 46 abe80c2eaab7a8dd0c23073939f58487a4a0bca5a6aef303e489b2ecb2ceca40
image devgrail-container 31 amd64 50957d8a646719d6500b11a832f43f296dec4b6e39d2e5e86950ee34677bea69
image devgrail-container 31 arm64 f82a7cccd564e3eccfea4cb320bcc318fbf46419b68968873459a3d4d2148dc5
image devgrail-server 58 amd64 0588e6c385556abd3e359b6c5e60d44feec038f9168f42293e0b7794b487c383
image devgrail-server 58 arm64 2e0b9ac7450b1e8930e08b8654aea2d5f6abf9f37e1f71ab51361462b0e60b7f