sig
  module Process :
    sig
      type t = Core_extended.Shell.Process.t
      type status =
          [ `Exited of int
          | `Signaled of Async.Std.Signal.t
          | `Timeout of Core_extended.Std.Time.Span.t ]
      type result =
        Core_extended.Shell.Process.result = {
        command : Async_shell.Process.t;
        status : Async_shell.Process.status;
        stdout : string;
        stderr : string;
      }
      exception Failed of Async_shell.Process.result
      val status_to_string : Async_shell.Process.status -> string
      val format_failed : Async_shell.Process.result -> string
    end
  type 'a with_process_flags = 'Core_extended.Shell.with_process_flags
  type 'a with_run_flags = 'Core_extended.Shell.with_run_flags
  type 'a with_test_flags = 'Core_extended.Shell.with_test_flags
  type 'a with_ssh_flags = 'Core_extended.Shell.with_ssh_flags
  type 'a cmd = 'Core_extended.Shell.cmd
  type ('a, 'ret) sh_cmd = ('a, 'ret) Core_extended.Shell.sh_cmd
  val test :
    bool Async.Std.Deferred.t Async_shell.cmd Async_shell.with_test_flags
  val sh_test :
    ('a, bool Async.Std.Deferred.t) Async_shell.sh_cmd
    Async_shell.with_test_flags
  val ssh_test :
    ('a, bool Async.Std.Deferred.t) Async_shell.sh_cmd
    Async_shell.with_test_flags Async_shell.with_ssh_flags
  val run :
    unit Async.Std.Deferred.t Async_shell.cmd Async_shell.with_run_flags
  val run_lines :
    ?eol:char ->
    string list Async.Std.Deferred.t Async_shell.cmd
    Async_shell.with_run_flags
  val run_one :
    ?eol:char ->
    string option Async.Std.Deferred.t Async_shell.cmd
    Async_shell.with_run_flags
  val run_one_exn :
    ?eol:char ->
    string Async.Std.Deferred.t Async_shell.cmd Async_shell.with_run_flags
  val run_full :
    string Async.Std.Deferred.t Async_shell.cmd Async_shell.with_run_flags
  val run_full_and_error :
    (string * string) Async.Std.Deferred.t Async_shell.cmd
    Async_shell.with_run_flags
  val run_lines_stream :
    string Async.Std.Stream.t Async_shell.cmd Async_shell.with_run_flags
  val sh :
    ('a, unit Async.Std.Deferred.t) Async_shell.sh_cmd
    Async_shell.with_run_flags
  val sh_lines :
    ('a, string list Async.Std.Deferred.t) Async_shell.sh_cmd
    Async_shell.with_run_flags
  val sh_one :
    ('a, string option Async.Std.Deferred.t) Async_shell.sh_cmd
    Async_shell.with_run_flags
  val sh_one_exn :
    ('a, string Async.Std.Deferred.t) Async_shell.sh_cmd
    Async_shell.with_run_flags
  val sh_full :
    ('a, string Async.Std.Deferred.t) Async_shell.sh_cmd
    Async_shell.with_run_flags
  val sh_lines_stream :
    ('a, string Async.Std.Stream.t) Async_shell.sh_cmd
    Async_shell.with_run_flags
  val ssh :
    ('a, unit Async.Std.Deferred.t) Async_shell.sh_cmd
    Async_shell.with_run_flags Async_shell.with_ssh_flags
  val ssh_lines :
    ('a, string list Async.Std.Deferred.t) Async_shell.sh_cmd
    Async_shell.with_run_flags Async_shell.with_ssh_flags
  val ssh_full :
    ('a, string Async.Std.Deferred.t) Async_shell.sh_cmd
    Async_shell.with_run_flags Async_shell.with_ssh_flags
  val ssh_one :
    ('a, string option Async.Std.Deferred.t) Async_shell.sh_cmd
    Async_shell.with_run_flags Async_shell.with_ssh_flags
  val ssh_one_exn :
    ('a, string Async.Std.Deferred.t) Async_shell.sh_cmd
    Async_shell.with_run_flags Async_shell.with_ssh_flags
  val ssh_lines_stream :
    ('a, string Async.Std.Stream.t) Async_shell.sh_cmd
    Async_shell.with_run_flags Async_shell.with_ssh_flags
  val mkdir : ?p:unit -> ?perm:int -> string -> unit Async.Std.Deferred.t
  val scp :
    ?compress:bool ->
    ?recurse:bool ->
    ?user:string ->
    host:string -> string -> string -> unit Async.Std.Deferred.t
end