Repository F# setup
open System
open System.IO
open System.Threading
open System.Threading.Tasks
open Axial
open Axial.Console
open Axial.FileSystem
open Axial.PlatformService
open Axial.ProcessProcess.command safely tokenizes an interpolated command template and returns a runnable ProcessSpec. Each
interpolation hole becomes one native argument:
let status =
Process.command $"git status --short"
|> Process.workingDirectory repository
|> Process.environment "CI" "true"
|> Process.timeout (TimeSpan.FromSeconds 15)Apply command-specific configuration before connecting stages. Process.arg, Process.secretArg, Process.workingDirectory, Process.environment, Process.removeEnvironment, Process.encoding, and Process.successCodes require a one-command specification.
Connect stdout to the next stage with Process.pipe:
let countErrors =
Process.command $"journalctl --priority=err"
|> Process.pipe (Process.command $"wc -l")
|> Process.toFlowThe DSL offers the same model with shorter names:
open Axial.Process.DSL
let result =
cmd $"printf %s {value}"
=> cmd $"tr '[:lower:]' '[:upper:]'"
|> timeout (TimeSpan.FromSeconds 5)
|> captureEach interpolation hole becomes one argument. Use secret when plans, failures, and transcripts must show *** instead of the real value. Use cmdText only for fixed command text.
Use Process.commandArgs when arguments already exist as a list. It has the same immutable
specification result, without command-line parsing.
Process.plan returns a redacted, serializable description without executing anything. Process.render returns a redacted shell-like diagnostic string; it is not a shell command generator.

