# Usage Usage is a spec and CLI for defining CLI tools. Arguments, flags, environment variables, and config files can all be defined in a Usage spec. It can be thought of like [OpenAPI (swagger)](https://www.openapis.org/) for CLIs. Here are some potential reasons for defining your CLI with a Usage spec: - Generate autocompletion scripts - Generate markdown documentation - Generate man pages - Use an advanced arg parser in any language - Scaffold one spec into different CLI frameworks—even different languages - [coming soon] Host your CLI documentation on usage.sh See more at [usage.jdx.dev](https://usage.jdx.dev/).