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:


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.