sig
  type cli_parsing_t = (Arg.key * Arg.spec * Arg.doc) list * Arg.anon_fun
  type 'a cli_parsing_post_t = unit -> 'a
  type 'a main_t = ctxt:OASISContext.t -> 'a
  type 'a run_t =
      unit -> CLISubCommand.cli_parsing_t * 'CLISubCommand.main_t
  type t = {
    scmd_name : OASISTypes.name;
    scmd_synopsis : string;
    scmd_help : string;
    scmd_usage : string;
    scmd_deprecated : bool;
    scmd_run : unit CLISubCommand.run_t;
  }
  val default_anon : Arg.anon_fun
  val default_fspecs :
    unit ->
    CLISubCommand.cli_parsing_t * unit CLISubCommand.cli_parsing_post_t
  val make_run :
    (unit ->
     CLISubCommand.cli_parsing_t * 'CLISubCommand.cli_parsing_post_t) ->
    ('-> 'b) CLISubCommand.main_t -> 'CLISubCommand.run_t
  val register :
    ?usage:string ->
    ?deprecated:bool ->
    OASISTypes.name ->
    synopsis:string -> help:string -> unit CLISubCommand.run_t -> unit
  val find : OASISTypes.name -> CLISubCommand.t
  val list_plugin : ?deprecated:bool -> unit -> PluginLoader.entry list
  val list_builtin : ?deprecated:bool -> unit -> CLISubCommand.t list
end