sig
  type tags = Tags.t
  type pathname = Pathname.t
  type t = Seq of t list | Cmd of spec | Echo of string list * pathname | Nop
  and spec =
      N
    | S of spec list
    | A of string
    | P of pathname
    | Px of pathname
    | Sh of string
    | T of tags
    | V of string
    | Quote of spec
  val atomize : string list -> spec
  val atomize_paths : string list -> spec
  val execute : ?quiet:bool -> ?pretend:bool -> t -> unit
  val execute_many :
    ?quiet:bool -> ?pretend:bool -> t list -> (bool list * exn) option
  val setup_virtual_command_solver : string -> (unit -> spec) -> unit
  val search_in_path : string -> string
  val reduce : spec -> spec
  val print : Format.formatter -> t -> unit
  val to_string : t -> string
  val string_of_command_spec : spec -> string
end