sig
  module Ansi :
    sig
      val is_color_tty : unit -> bool
      type style = [ `Green | `Red | `Underline ]
      val printf : style -> ('a, out_channel, unit) format -> 'a
      val eprintf : style -> ('a, out_channel, unit) format -> 'a
    end
  module Process :
    sig
      type status =
          [ `Exited of int
          | `Signaled of Core.Signal.t
          | `Stopped of Core.Signal.t
          | `Timeout of Core.Std.Time.Span.t ]
      type t = Shell.Process.t
      type result =
        Shell.Process.result = {
        command : t;
        status : status;
        stdout : string;
        stderr : string;
      }
      exception Failed of result
      val to_string : t -> string
      val status_to_string : status -> string
      val format_failed : result -> string
      val cmd : string -> string list -> t
      val shell : string -> t
      val remote : ?user:string -> host:string -> t -> t
      type 'a reader = 'Shell.Process.reader
      val content : string reader
      val discard : unit reader
      val lines : string list reader
      val head : string reader
      val run :
        ?timeout:Core.Std.Time.Span.t option ->
        ?working_dir:string ->
        ?expect:int list ->
        ?verbose:bool -> ?echo:bool -> ?input:string -> t -> 'a reader -> 'a
      val test :
        ?timeout:Core.Std.Time.Span.t option ->
        ?working_dir:string ->
        ?verbose:bool ->
        ?echo:bool ->
        ?input:string -> ?true_v:int list -> ?false_v:int list -> t -> bool
    end
  type 'a with_process_flags =
      ?timeout:Core.Std.Time.Span.t option ->
      ?working_dir:string ->
      ?verbose:bool -> ?echo:bool -> ?input:string -> 'a
  type 'a with_run_flags = (?expect:int list -> 'a) with_process_flags
  type 'a cmd = string -> string list -> 'a
  val run : unit cmd with_run_flags
  val run_lines : string list cmd with_run_flags
  val run_one : string cmd with_run_flags
  val run_full : string cmd with_run_flags
  type ('a, 'b) sh_cmd = ('a, unit, string, 'b) format4 -> 'a
  val sh : ('a, unit) sh_cmd with_run_flags
  val sh_lines : ('a, string list) sh_cmd with_run_flags
  val sh_one : ('a, string) sh_cmd with_run_flags
  val sh_full : ('a, string) sh_cmd with_run_flags
  type 'a with_test_flags =
      (?true_v:int list -> ?false_v:int list -> 'a) with_process_flags
  val test : bool cmd with_test_flags
  val sh_test : ('a, bool) sh_cmd with_test_flags
  val mkdir_p : ?perm:Core.Std.Unix.file_perm -> string -> unit
  val ls : string -> string list
  val quote : string -> string
  val is_directory : ?unlink:bool -> string -> bool
  val is_file : ?unlink:bool -> string -> bool
  val file_kind : string -> Core.Std.Unix.file_kind
  val file_exists : string -> bool
  val copy_file :
    ?overwrite:bool ->
    ?perm:Core.Std.Unix.file_perm -> src:string -> dst:string -> unit
  val rm : string -> unit
  val cp : string -> string -> unit
  val whoami : ?real:bool -> unit -> string
  val home : unit -> string
  val get_group_names : unit -> string list
  val in_group : string -> bool
  val hostname : unit -> string
  val which : string -> string option
  val get_editor : unit -> string option
  val mkdir_p : ?perm:Core.Std.Unix.file_perm -> string -> unit
  val ls : string -> string list
  val quote : string -> string
  val ( ^/ ) : string -> string -> string
  val ssh : user:string -> host:string -> string -> unit
  val scp :
    ?recurse:bool -> user:string -> host:string -> string -> string -> unit
  val echo : ('a, out_channel, unit) format -> 'a
  val warnf : ('a, unit, string, unit) format4 -> 'a
  val email :
    string -> string Core.Std.List.container -> string -> string -> unit
end