sig
  type slot =
    Service_command.slot = {
    lock_file : string;
    name : string;
    redirect_stdout : Core.Std.Daemon.Fd_redirection.t;
    redirect_stderr : Core.Std.Daemon.Fd_redirection.t;
  }
  module type T =
    sig
      val slot_spec : unit -> (slot -> 'm, 'm) Core.Std.Command.Spec.t
      type main
      val main_spec :
        (foreground:bool -> main, unit -> unit) Core.Std.Command.Spec.t
      val main : slot -> main
    end
  type t = (module T)
  val start : t -> Core.Std.Command.t
  val stop : t -> Core.Std.Command.t
  val status : t -> Core.Std.Command.t
  val restart : t -> Core.Std.Command.t
  val group : t -> summary:string -> Core.Std.Command.t
end