Skip to main content
info

This specification is for now just a proposal.
Input and feedback is VERY MUCH welcome!

OpenCLI Specification

Version 0.1

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14, RFC2119, and RFC8174 when, and only when, they appear in all capitals, as shown here.

This document is licensed under the MIT license

Change log
DateAuthorDescription
2025-07-15Patrik SvenssonAdded interactive to root command and commands
2025-07-16Patrik SvenssonAdded Metadata Object
2025-07-16Patrik SvenssonChanged maps to arrays
2025-07-18Patrik Svenssonname property in License Object is no longer required
2025-08-06Patrik SvenssonRemove ordinal property from Argument Object
2025-08-06Patrik SvenssonAdd recursive property to Option Object
2025-08-06Patrik SvenssonAdd summary property to CliInfo Object
2025-10-04Patrik SvenssonAdd default values to schema

Introduction

The OpenCLI specification (OCS) defines a standard, platform and language agnostic interface to CLI applications which allows both humans and computers to understand how a CLI tool should be invoked without access to source code or documentation.

An OpenCLI Description can be used by documentation software to display usage of a tool, or code generation tools to create clients for interoping with a CLI tool.

In short, an OpenCLI description can be used for the following:

  • Create documentation for CLI tools
  • Generate clients for interacting with CLI tools
  • Automate external tools such as MCP servers
  • Detect changes in CLI APIs
  • Generate auto-completion scripts

This specification is heavily influenced by the OpenAPI specification.

Definitions

OpenCLI Description

An OpenCLI Description is a single JSON or YAML document that conforms to the OpenCLI Specification.

CLI

Command Line Application. A text based interface to an appliction.

Schema

A "schema" is a formal description of syntax and structure.

Object

When capitalized, the word "Object" refers to any of the Objects that are named by section headings in this document.

Case sensitivity

All field names in the OpenCLI specification is case sensitive unless otherwise stated.

Arity

The number of argument values an option expect.

Specification

Versions

The OpenCLI Specification is versioned using a major.minor.patch versioning scheme. The major.minor portion of the version string (for example 1.1) SHALL designate the OCS feature set. .patch versions address errors in, or provide clarifications to, this document, not the feature set. Tooling which supports OCS 1.1 SHOULD be compatible with all OCS 1.1.* versions. The patch version SHOULD NOT be considered by tooling, making no distinction between 1.1.0 and 1.1.1 for example.

Ordering

The ordering of items within arrays MUST be considered normative.

Schema

This section describes the structure of the OpenCLI Description format. This text is the only normative description of the format.

Document Object

This is the root object of the OpenCLI Description.

Field NameTypeDefault ValueDescription
openclistring-REQUIRED The OpenCLI version number
infoCliInfo Object-REQUIRED Information about the CLI
conventionsConventions Object-The conventions used by the CLI
arguments[Argument Object]-Root command arguments
options[Option Object]-Root command options
commands[Command Object]-Root command sub commands
exitCodes[ExitCode Object]-Root command exit codes
examples[string]-Examples of how to use the CLI
interactiveboolfalseIndicates whether or not the command requires interactive input
metadata[Metadata Object]-Custom metadata

CliInfo Object

Field NameTypeDefault ValueDescription
titlestring-REQUIRED The application title
summarystring-A short summary of the application
descriptionstring-A description of the application
contactContact Object-The contact information
licenseLicense Object-The application license
versionstring-REQUIRED The application version

Conventions Object

Field NameTypeDefault ValueDescription
groupOptionsbooltrueWhether or not grouping of short options are allowed
optionArgumentSeparatorstringU+0020 (space)The option argument separator

Contact Object

Field NameFormatDefault ValueDescription
namestring-The identifying name of the contact person/organization
urlstring-The URI for the contact information. This MUST be in the form of a URI
emailstring-The email address of the contact person/organization. This MUST be in the form of an email address

License Object

Field NameTypeDefault ValueDescription
namestring-The license name
identifierstring-The SPDX license identifier

Command Object

Field NameTypeDefault ValueDescription
namestring-REQUIRED The command name
aliases[string]-The command aliases
options[Option Object]-The command's options
arguments[Argument Object]-The command's arguments
commands[Command Object]-The command's sub commands
exitCodes[ExitCode Object]-The command's exit codes
descriptionstring-The command description
hiddenboolfalseWhether or not the command is hidden
examples[string]-Examples of how to use the command
interactiveboolfalseIndicates whether or not the command requires interactive input
metadata[Metadata Object]-Custom metadata

Argument Object

Field NameTypeDefault ValueDescription
namestring-REQUIRED The argument name
requiredboolfalseWhether or not the argument is required
arityArity Object-The argument arity. Arity defines the minimum and maximum number of argument values
acceptedValues[string]-A list of accepted values
groupstring-The argument group
decriptionstring-The argument description
hiddenboolfalseWhether or not the argument is hidden
metadata[Metadata Object]-Custom metadata

Option Object

Field NameTypeDefault ValueDescription
namestring-REQUIRED The option name
requiredboolfalseWhether or not the option is required
aliases[string]-The option's aliases
arguments[Argument]-The option's arguments
groupstring-The option group
descriptionstring-The option description
recursiveboolfalseSpecifies whether the option is accessible from the immediate parent command and, recursively, from its subcommands
hiddenboolfalseWhether or not the option is hidden
metadata[Metadata Object]-Custom metadata

Arity Object

Field NameTypeDefault ValueDescription
minimumint1The minimum number of values allowed
maximumint1The maximum number of values allowed. If not specified (nil), unlimited number of items are allowed

ExitCode Object

Field NameTypeDefault ValueDescription
codeint-REQUIRED The exit code
descriptionstring-The exit code description

Metadata Object

Field NameTypeDefault ValueDescription
namestring-REQUIRED The metadata name
valueobject-The metadata value