Tools Lifecycle
Islo automatically detects and installs development tools when creating a sandbox. This page explains the detection process, installation phases, and how to customize tool configuration.
Tool Detection
When you run islo use, Islo scans your project to detect which tools you need. Detection happens in layers, with higher-priority sources overriding lower ones:
Tools defined in islo.yaml always take precedence, allowing you to override auto-detected versions.
Installation Phases
Tool installation happens in distinct phases during sandbox creation:
Phase Details
Phase 0: Setup Mise
Writes mise.islo.toml to the sandbox with your tool configuration. This file tells mise which tools to install and how.
Phase 1: Runtime Installation
Runs mise install to install language runtimes and tools. This includes:
- Node.js, Python, Ruby, Go, Rust
- CLI tools available via mise (ripgrep, jq, etc.)
Phase 3: Install Tasks
Runs custom installation scripts defined in install_tasks. Use this for:
- Downloading pre-built binaries
- Building tools from source
- Running
npm installorpip install
Phase 4: Setup Tasks
Runs post-install configuration defined in setup_tasks. Examples:
poetry install- Install Python dependenciesbundle install- Install Ruby gemsuv sync- Sync Python environment
Phase 5: Start Tasks
Runs service startup scripts defined in start_tasks. Examples:
pg_ctl start- Start PostgreSQLredis-server --daemonize yes- Start Redismongod --fork- Start MongoDB
Task Configuration
Each tool can define custom tasks in islo.yaml:
Task Types
Failure Handling
If a phase fails, you’ll see a yellow warning message but can still use the sandbox. You can re-run failed phases manually:
Adding Tools to Existing Sandboxes
Important: Adding tools to islo.yaml does not automatically update existing sandboxes.
When you run islo use <name> and the sandbox already exists, it simply connects to it without re-provisioning.
Options for Adding Tools
Option 1: Recreate the sandbox
Option 2: Install manually inside the sandbox
islo add vs Editing islo.yaml
Both methods add tools to your configuration, but they work differently:
islo add
- Applies sensible defaults from Islo’s built-in registry
- Automatically adds common setup_tasks (e.g.,
poetry installfor Python) - Safer for beginners
Manual Editing
- Full control over all settings
- Required for tools not in the registry
- Must specify
backendorinstall_tasksfor unknown tools
When user config is provided, it fully replaces registry defaults - there’s no partial merge. If you override a tool, you need to include all the tasks you want.
Version Management
Islo uses mise as the runtime version manager inside sandboxes.
Version Sources
Versions are resolved from (highest to lowest priority):
islo.yaml- Explicitversionfield- Mise/asdf config -
.mise.toml,.tool-versions - Project files -
.nvmrc,pyproject.toml[tool.poetry.dependencies] - Registry defaults - Built-in sensible defaults
Supported Formats
.tool-versions Support
If your project uses asdf-style .tool-versions, Islo respects it:
Tool Registry
Islo includes a built-in registry of common tools with sensible defaults:
For the full list, run islo status in a project directory to see detected tools.
Caching
Islo caches installed tools to speed up sandbox creation. When you create a sandbox:
- Islo computes a cache key from your image + mise.toml content
- If a cached VM with matching tools exists, it’s cloned (fast)
- If not, tools are installed from scratch and the result is cached
This means second sandbox creation with the same tools is much faster.