Automations

Islo automations are repeatable workloads that run in managed sandboxes. Use them when work should survive disconnects, run on a schedule, react to an external event, or be started by another system.

For AI agents, start with islo-labs/skills. The skills repo is the maintained, agent-readable reference for Islo automations, sandbox lifecycle, gateway integrations, SDK usage, and templates. It is the best way to teach Cursor, Claude Code, Codex, and other agents how to use Islo correctly.

Automation building blocks

Building blockUse when
Durable jobsYou need a named, repeatable unit of work with parameters, versions, runs, status, and logs.
Scheduled jobsThe work should run on a recurring cron schedule.
Manual job runsA human, script, or integration should start a known job on demand.
Webhook-triggered jobsAn external HTTP event should start a deployed job run, with optional params mapped from the payload.
Webhook sandbox actionsAn external HTTP event should ensure, resume, pause, delete, or deliver traffic to a sandbox.

Durable jobs

A job defines what to run and which sandbox it needs. A deployment creates a versioned job definition, and a run executes that version with parameters.

The standard manifest path is:

jobs/<name>/job.toml

Discover the full schema

Do not hand-write job.toml from memory. Use:

$islo schema job # Full job.toml schema (JSON) + job CLI surface
$islo job init <name> # Scaffold with the platform default image
$islo job deploy <name> --dry-run

islo schema job returns the machine-readable manifest schema under job_toml. The control-plane OpenAPI JobManifest type is the API source of truth for deploy/validate bodies.

Manifest sections

SectionRequiredPurpose
[job]yesName, version, description
[job.params.*]noTyped run parameters ({name} substitution)
[run]yesFanout, concurrency, region, teardown / resume policy
[run.sandbox]noDefault sandbox (image, resources, snapshot, gateway)
[run.sandbox.lifecycle]noAuto-pause / auto-delete policy
[[run.tasks]]yes (≥1)Fan-out unit; optional per-task sandbox override
[[run.tasks.steps]]yesOrdered compute ops (exec, snapshot, pause, …)
[schedule]noCron schedule created/updated on deploy
[verification]noOptional evaluation layer

[run] fields

FieldDefaultMeaning
fail_fasttrueStop remaining tasks on first step failure
fanoutfalseOne shared sandbox vs one sandbox per task
concurrency1Max parallel tasks when fanout = true
workdir"."Default workdir for steps
timeoutnoneMax wall-clock run duration
regionnoneCompute region; falls back to ISLO_REGION
teardown_on_completetrue for provision; false for ensure/reuseDelete sandbox after run
resume_on_starttrue for ensure; false otherwiseResume paused sandbox before steps

[run.sandbox] fields

FieldDefaultMeaning
modeprovisionprovision (fresh), ensure (create-if-missing), or reuse (attach existing)
namenoneRequired for ensure / reuse. Supports {param} substitution.
imagenoneRequired for provision / ensure. Use ghcr.io/islo-labs/islo-runner:latest (do not use islo/default).
vcpus2Virtual CPUs
memory_mb2048Memory in MB
disk_gb10Disk in GB
snapshot_namenoneRestore from a named snapshot on create
gateway_profilenoneGateway profile for credential injection
initnoneTagged object: { type = "full" }, { type = "minimal" }, or { type = "custom", capabilities = [...] }
internet_enabledtrueAllow outbound internet
workdirnoneSandbox working directory
cache_keynoneOptional cache key
envnoneEnvironment variables table
1[run.sandbox]
2mode = "provision"
3image = "ghcr.io/islo-labs/islo-runner:latest"
4vcpus = 4
5memory_mb = 8192
6disk_gb = 40
7snapshot_name = "baseline-v1"
8gateway_profile = "default"
9init = { type = "full" }
10
11[run.sandbox.lifecycle]
12pause_after_idle = 3600

Step actions

Each step must define exactly one action:

Step fieldBehavior
exec = ["cmd", "arg"]Run a command in the sandbox
snapshot = { name = "…" }Create a snapshot
pause = truePause the sandbox
resume = trueResume the sandbox
delete = trueDelete the sandbox

upload / download are not available yet.

Use a gateway profile when an automation needs provider access. This keeps GitHub, Slack, model provider, and other secrets out of the sandbox environment by default.

Scheduled jobs

Use [schedule] in job.toml for recurring runs:

1[schedule]
2cron = "0 * * * *"
3timezone = "UTC"
4enabled = true

Deploying the job creates or updates its schedule:

$islo job deploy <name>

Every param a scheduled run needs must have a default. Keep scheduled job tasks idempotent — retries and repeated runs are part of the automation model.

Webhooks

Webhooks connect external HTTP events to Islo automations. They are not only for sandbox lifecycle work — a common pattern is to trigger a deployed job when GitHub, Linear, Stripe, Slack, or your own service sends an event.

Webhook-triggered jobs

Add a trigger_job action to a webhook rule to start a job run:

$islo webhook create linear-to-slack \
> --target-sandbox-name linear-to-slack-events \
> --action trigger-job \
> --job-name linear-to-slack \
> --job-param ticket_id=json_path:$.data.identifier

Webhooks still require a target (fixed name or event-derived) for ingress routing, even when the only action is trigger_job. The job provisions its own sandbox at run time.

The action runs against the latest deployed version unless you pin version_id or override region. Map job params from the webhook request with params entries (json_path, header, query, header_param, raw_body, method, or path).

Typical flow:

  1. Deploy the job with islo job deploy <name>.
  2. Create a webhook whose rule includes trigger_job for that job name.
  3. Paste the webhook receiver_url into the external provider.

Use this for event-driven automations such as Linear issue updates, GitHub PR events, or custom app callbacks that should run your job.toml workload instead of managing a long-lived sandbox directly.

Webhook sandbox actions

Webhooks can also drive sandbox lifecycle without starting a job:

  • ensure a sandbox exists
  • resume a paused sandbox
  • pause or delete a sandbox
  • deliver the request to a port inside a sandbox

For auth, targets, rules, idempotency, and full action reference, see Incoming Webhooks.

Agent guidance

When you want an agent to build or maintain Islo automations, point it at islo-labs/skills. The repository includes an Islo skill and plugin metadata that explain the current automation model, recommended CLI discovery commands, gateway credential patterns, and runnable-template pointers.

Recipes and examples are useful for humans looking at a specific pattern, but the skills repo should be the first link for agent setup and agent-authored automation work. Always have agents run islo schema job before editing [run.sandbox], and islo schema webhook before editing ensure-sandbox templates.