anchor.diff:  === What's Next in this Article
   In the rest of this article we will take a quick tour of picocli's capabilities.
   
  -First we will take a look at picocli's "entry points": there are methods for just parsing command line parameters and there are "convenience methods" that parse the user input and automatically invoke the business logic of your application.
  -
  -Next, we will go into some detail of defining options and positional parameters, how picocli converts argument Strings to strongly typed option values, how to define options that can be specified multiple times, including map options like `-Dkey=value`.
  +First we will go into some detail of defining commands with options and positional parameters, how picocli converts argument Strings to strongly typed option values, how to define options that can be specified multiple times, including map options like `-Dkey=value`.
   
   Next, we will show how to customize the usage help and version help, and liven things up with ANSI colors.
   
   Many larger command line applications have subcommands, `git` being a famous example. We will show how picocli makes it very easy to create commands with subcommands, and how you can use mixins to reuse common options or common command configurations.
   
  +After that, we will take a look at picocli's "entry points": there are methods for just parsing command line parameters and there are "convenience methods" that parse the user input and automatically invoke the business logic of your application.
  +
   Furthermore this article will explain how picocli can give your application autocompletion in bash and zsh, how Groovy scripts can use the picocli annotations, and how to build command line applications that integrate with Dependency Injection containers like Spring Boot and Micronaut.
   
   Finally, we will briefly touch on how picocli can be used to create interactive shell applications with the `JLine` library, and wrap up with a small tutorial for creating native executables with GraalVM to make amazingly fast command line tools.
   
  -== Defining and Running a Picocli Application
  -
  -The general outline of any command line application is:
  -
  -* define the top-level command and its subcommands
  -* define options and positional parameters
  -* parse the user input
  -* inspect the result
  -
  -Picocli offers an annotations API and a programmatic API (the "model"). In this article we will focus on the annotations API.
  -
  -.Classes and Interfaces for Defining a CommandSpec Model
  -image:images/class-diagram-definition.png[Classes and Interfaces for Defining a CommandSpec Model, pdfwidth=95%]
  +== Defining a Picocli Command
  +
  +Picocli offers an annotations API and a programmatic API. The programmatic API is useful for dynamically creating commands and command line options on the fly. Typical use cases are domain-specific languages. For example, Groovy's CliBuilder is implemented using picocli's programmatic API. Details of the programmatic API are out of scope of this article, but are documented on the project GitHub site. In this article we will focus on the annotations API.
   
   To define a command or a subcommand, annotate a class or a method with `@Command`. The `@Command` annotation can be omitted, but is a convenient way to set the command name, description, and other elements of the usage help message. Subcommands can be specified in the `@Command` annotation but can also be added to a command programmatically.
   
  
positive.code: // the options defined in ReusableOptions have been added to the zip command
  assert zip.myMixin.verbosity.length == 3;
  ----
  
  
  == Autocompletion
  
negative.code: }
  ----
  
  There is a separate section on subcommands below, but first we will discuss options and positional parameters.
  
  == Options and Positional Parameters
  Command line arguments can be separated into _options_  and _positional parameters_. Options have a name, positional parameters are values without a name. Positional parameters often follow the options, but they may be mixed.
  