Repository F# setup
open System
open System.IO
open System.Threading
open System.Threading.Tasks
open Axial
open Axial.Layers
open Axial.Console
open Axial.FileSystem
open Axial.Hosting
open Axial.Hosting.Browser
open Axial.Hosting.Node
open Axial.HttpClient
open Axial.PlatformService
open Axial.Process
open Axial.State
open Axial.Telemetry
open Axial.Telemetry.JavaScript

Axial.Process represents external work as an immutable ProcessSpec. Building a specification performs no I/O. Process.run asks the IProcess service to interpret it in the current Flow runtime.

open Axial.Process

let version =
    Process.command "dotnet" [ "--version" ]
    |> Process.timeout (TimeSpan.FromSeconds 10)
    |> Process.run
`Process.command` creates a runnable one-stage specification. Configuration functions return updated values, and `Process.pipe` connects specifications through real standard streams. `Process.run` returns `Flow<#IHasProcess, ProcessError, ProcessResult>`; `Process.stream` returns output and completion events with backpressure.

The live interpreter receives its operational dependencies explicitly:

let process = Process.live clock fileSystem console
Supply it by implementing `IHasProcess` on the environment given to the workflow:
type AppEnv =
    { Processes: IProcess }
    interface IHasProcess with member this.Process = this.Processes
Flow owns scheduling, cancellation, timeout racing, and scope cleanup. The live interpreter translates interruption into process-tree termination and cleans up every stage that started, including partial startup.

Guides