sig
  type 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 -> (Service_command.slot -> 'm, 'm) Core.Std.Command.Spec.t
      type main
      val main_spec :
        (foreground:bool -> Service_command.T.main, unit -> unit)
        Core.Std.Command.Spec.t
      val main : Service_command.slot -> Service_command.T.main
    end
  type t = (module Service_command.T)
  val start : Service_command.t -> Core.Std.Command.t
  val stop : Service_command.t -> Core.Std.Command.t
  val status : Service_command.t -> Core.Std.Command.t
  val restart : Service_command.t -> Core.Std.Command.t
  val group : Service_command.t -> summary:string -> Core.Std.Command.t
end