sig
  module Ansi :
    sig
      val is_color_tty : unit -> bool
      type style = [ `Green | `Red | `Underline ]
      val printf :
        Shell.Ansi.style ->
        ('a, Pervasives.out_channel, unit) Pervasives.format -> 'a
      val eprintf :
        Shell.Ansi.style ->
        ('a, Pervasives.out_channel, unit) Pervasives.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
      type result = {
        command : Shell.Process.t;
        status : Shell.Process.status;
        stdout : string;
        stderr : string;
      }
      exception Failed of Shell.Process.result
      val to_string : Shell.Process.t -> string
      val status_to_string : Shell.Process.status -> string
      val format_failed : Shell.Process.result -> string
      val cmd : string -> string list -> Shell.Process.t
      val shell : string -> Shell.Process.t
      val remote :
        ?user:string -> host:string -> Shell.Process.t -> Shell.Process.t
      type 'a reader
      val content : string Shell.Process.reader
      val discard : unit Shell.Process.reader
      val lines : string list Shell.Process.reader
      val head : string Shell.Process.reader
      val run :
        ?timeout:Core.Std.Time.Span.t option ->
        ?working_dir:string ->
        ?expect:int list ->
        ?verbose:bool ->
        ?echo:bool ->
        ?input:string -> Shell.Process.t -> 'Shell.Process.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 -> Shell.Process.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) Shell.with_process_flags
  type 'a cmd = string -> string list -> 'a
  val run : unit Shell.cmd Shell.with_run_flags
  val run_lines : string list Shell.cmd Shell.with_run_flags
  val run_one : string Shell.cmd Shell.with_run_flags
  val run_full : string Shell.cmd Shell.with_run_flags
  type ('a, 'b) sh_cmd = ('a, unit, string, 'b) Pervasives.format4 -> 'a
  val sh : ('a, unit) Shell.sh_cmd Shell.with_run_flags
  val sh_lines : ('a, string list) Shell.sh_cmd Shell.with_run_flags
  val sh_one : ('a, string) Shell.sh_cmd Shell.with_run_flags
  val sh_full : ('a, string) Shell.sh_cmd Shell.with_run_flags
  type 'a with_test_flags =
      (?true_v:int list -> ?false_v:int list -> 'a) Shell.with_process_flags
  val test : bool Shell.cmd Shell.with_test_flags
  val sh_test : ('a, bool) Shell.sh_cmd Shell.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, Pervasives.out_channel, unit) Pervasives.format -> 'a
  val warnf : ('a, unit, string, unit) Pervasives.format4 -> 'a
  val email :
    string -> string Core.Std.List.container -> string -> string -> unit
end