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