Giving cloud coding agents their environment
Cloud agents wake up in empty sandboxes: no GITHUB_TOKEN, no
DATABASE_URL, no registry credentials, no provider auth. They write code
they can't run, test, or ship. One envo up in the sandbox's setup hook
fixes that — the pack decrypts inside the sandbox; Envo's servers only
ever see ciphertext.
For every surface below you need two values, stored in that platform's secret store:
ENVO_TOKEN— a pull-only agent token scoped to one environment (dashboard → Tokens)ENVO_KEY— the pack's encryption key. Use a dedicated key per exposure surface (e.g. one for CI), never your personal master key.
GitHub Actions
- uses: Envo-sh/setup-envo@v1
env:
ENVO_TOKEN: ${{ secrets.ENVO_TOKEN }}
ENVO_KEY: ${{ secrets.ENVO_KEY }}
with:
ref: myproject/ci
# later steps have every env var (masked in logs), skills on disk,
# and provider credentials in place
Live example: credential-bridge-proof.yml
runs daily in this repo.
Codex Cloud (OpenAI)
Codex removes its secrets before the agent phase starts — they exist
only during the setup script. That is exactly where envo up runs: it
materializes the environment to disk, which persists into the agent phase.
Environment settings → Secrets: add ENVO_TOKEN, ENVO_KEY.
Setup script:
curl -fsSL https://envo.sh/install | sh
export PATH="$HOME/.local/bin:$PATH"
envo up myproject/agents --dir "$PWD" --harness codex
# env vars for the agent phase: append to ~/.bashrc (setup runs in a
# separate shell session)
sed 's/^/export /' .env.d/*.local >> ~/.bashrc
The agent phase then has env vars (via .bashrc), skills in
.agents/skills/, provider auth files, and AGENTS.md context.
Cursor cloud agents
Dashboard → Secrets: add ENVO_TOKEN, ENVO_KEY.
.cursor/environment.json (committed — contains no secrets):
{
"install": "curl -fsSL https://envo.sh/install | sh && ~/.local/bin/envo up myproject/agents --dir . --harness cursor"
}
Skills land in .cursor/rules/envo.md + .envo/skills/; env vars in
.env.d/, ready for the agent's shell.
Devin / any VM you can shell into
Devin's machine setup is an interactive VM snapshot — run the same two lines once during "Set up machine" and snapshot:
curl -fsSL https://envo.sh/install | sh
ENVO_TOKEN=... ENVO_KEY=... envo up myproject/agents
Or from your laptop, for anything with SSH: envo ssh host myproject/agents.
MCP — let the agent provision itself
Any MCP-capable harness (Claude Code, Cursor, Codex, ...) can pull its own environment mid-session. One entry in your MCP config:
{ "mcpServers": { "envo": { "command": "envo", "args": ["mcp"] } } }
The agent gets three tools: envo_up (materialize an environment),
envo_doctor (what's missing and how to fix it), envo_auth_status
(provider credential expiry). An agent that discovers it lacks credentials
can now fix that itself instead of failing the task.
Homebrew
brew install envo-sh/tap/envo
Docker / any container
docker run -e ENVO_TOKEN -e ENVO_KEY your-image \
sh -c "curl -fsSL https://envo.sh/install | sh && envo up myproject/agents --run 'your-agent-command'"
Rotation & revocation
Rotate a leaked surface in seconds: revoke that surface's token in the
dashboard (audit log shows every pull it ever made), rotate the dedicated
key, envo push re-encrypted packs. Blast radius = one environment on one
surface — because each surface got its own scoped token and key.