The %command.name% command generates a new command: php %command.full_name% app:do-something If the argument is missing, the command will ask for the command name interactively. The command then asks for the arguments and the options to declare, and generates the __invoke() method with the matching #[Argument] and #[Option] parameters. They can be passed on the command line instead of being asked for, which is what you want in a script or when the terminal is not interactive: php %command.full_name% app:send-report --argument=recipient --argument=cc?:array --option=dry-run --option=format:Format The format is name[:type], where the type is one of string, bool, int, float, array or a backed enum. It defaults to string for an argument and to bool for an option. The name is written the way it reads on the command line: dry-run becomes $dryRun. The short name of an enum is enough as long as it is unique within src/, which saves escaping backslashes in your shell. An argument is required unless its name ends with ?, as an optional key of a PHP array shape: cc?:array. Note that this differs from the interactive mode, whose default answer is no.