Reference

Task Launch

How to model process start truthfully, especially for long-running services.

referenceautomation buildersintermediatestable2026-05-30

Purpose

Use this page when you need to decide whether a task should use run, script, or launch.

The strong default for long-running service processes is launch.kind: command.

  • launch owns process start
  • runtime owns what becomes reachable and how readiness is proved
  • run stays the simple shell shorthand for finite tasks
  • script stays the multiline shell escape hatch

Governance rule

Use launch.kind: command for long-running app servers, docs previews, workers, and similar service processes.

Use run for finite shell tasks, pipelines, or cases where a structured executable shape would be misleading.

Preferred service shape

Long-running service taskyaml
tasks:  dev:    launch:      kind: command      exe: bundle      args: [exec, rails, server, -b, 0.0.0.0, -p, "3000"]    runtime:      kind: service      surfaces:        - api

Why this is stronger

  • the executable and arguments stay structured instead of disappearing into one shell string
  • ota can reason about launch separately from the endpoint contract
  • service surfaces, listeners, and readiness stay canonical under runtime, not duplicated in shell glue
  • examples and generated docs can teach one stable service-launch shape

Use run when shell is the truth

Finite shell taskyaml
tasks:  test:    run: pnpm test -- --runInBand