Skip to main content
Quick-lookup reference for environment.yaml syntax and behavior. For concepts and guides, see Environment Configuration.

Field reference

Top-level fields

FieldTypeRequiredExecuted duringDescription
initializestring or listNoBuild onlyOne-time setup commands. Results are saved in the machine image. Should be idempotent.
maintenancestring or listNoBuild + session startRecurring dependency commands. Keep fast and incremental.
knowledgelist of objectsNoNever (reference only)Information loaded into Devin’s context at session start.

Step fields (expanded form)

FieldTypeRequiredDescription
namestringNoHuman-readable label shown in build logs. Makes failures easier to identify.
runstringNoShell command(s) to execute. Multi-line strings are supported. Steps without run are skipped.

Knowledge entry fields

FieldTypeRequiredDescription
namestringYesIdentifier (e.g., test, lint, startup, architecture, notes).
contentsstringYesThe reference content. Not executed as commands.

Execution details

  • Commands run in bash with set -e enabled — if any line fails, the step stops immediately.
  • Repo-specific commands run from the repo root (~/repos/<repo-name>). Enterprise and org-wide commands run from the home directory (~).
  • Each step in the expanded form runs in its own shell context.
ScopeTimeout
Individual command1 hour
Total build2 hours
Best practices:
  • Use subshells for subdirectory commands: (cd packages/frontend && npm install).
  • Prefer incremental installs in maintenance (e.g., npm install instead of npm ci).
  • Avoid build commands (npm run build, make) in maintenance — they run every session.
  • Add -y flags to prevent interactive prompts: sudo DEBIAN_FRONTEND=noninteractive apt-get install -y.
  • Commands should be safe to run multiple timesmaintenance runs every session.

Pre-installed tools

Devin’s base image (Ubuntu 22.04, x86_64) includes these tools. You don’t need to install them.
CategoryIncluded
LanguagesNode.js (via nvm), Python 3.12 (via pyenv, with 3.9–3.11 also available), Rust (via rustup), Java (OpenJDK 17), Scala, Go
Package managersnpm, yarn, pnpm, pip, cargo
Version controlgit, gh (GitHub CLI), git-lfs
ContainersDocker (with Compose plugin — use docker compose, not docker-compose)
Build toolsmake, build-essential (gcc, g++)
Utilitiescurl, wget, jq, ripgrep, direnv, awscli, ffmpeg, Homebrew, OpenVPN
BrowsersChrome (for browser-based testing)
This list may not be exhaustive. Run which <tool> or <tool> --version in a Devin session to check. If something is missing, install it in your initialize section.

Glossary

TermDefinition
ConfigurationA saved environment setup (the YAML content). Each repo/org/enterprise has its own.
Configuration versionA specific revision of a configuration. Each save creates a new version.
BuildThe process of executing your configuration to create a machine image.
Machine imageThe saved environment created by a successful build. Sessions boot from the latest successful image.
ConfiguredA repository with explicit YAML configuration (initialize/maintenance/knowledge).
IncludedA repository cloned into the machine image but with no custom configuration.
AvailableA repository accessible to the org but not added to the environment.
$ENVRCA special file for setting environment variables. Similar to GitHub Actions’ $GITHUB_ENV.
Partial successA build where the core succeeded but some repository-level setups failed.

Next steps