{"record":{"id":"a84dc0ec18d4b089","repo":"kovidgoyal/kitty","slug":"unknown-extra-argument-s-supplied-to-command-nam","errorCode":null,"errorMessage":"Unknown extra argument(s) supplied to {command.name}","messagePattern":"Unknown extra argument\\(s\\) supplied to (.+?)","errorType":"console","errorClass":"SystemExit","httpStatus":null,"severity":"error","filePath":"kitty/rc/base.py","lineNumber":452,"sourceCode":"    def cancel_async_request(self, boss: 'Boss', window: Optional['Window'], payload_get: PayloadGetType) -> None:\n        pass\n\n    def handle_streamed_data(self, data: bytes, payload_get: PayloadGetType) -> BytesIO | AsyncResponse:\n        stream_id = payload_get('stream_id')\n        if not stream_id or not isinstance(stream_id, str):\n            raise StreamError('No stream_id in rc payload')\n        return self.stream_in_flight.handle_data(stream_id, data)\n\n\ndef cli_params_for(command: RemoteCommand) -> tuple[Callable[[], str], str, str, str]:\n    return (command.options_spec or '\\n').format, command.args.spec, command.desc, f'kitten @ {command.name}'\n\n\ndef parse_subcommand_cli(command: RemoteCommand, args: ArgsType) -> tuple[Any, ArgsType]:\n    opts, items = parse_args(args[1:], *cli_params_for(command), result_class=command.options_class)\n    if command.args.args_count is not None and command.args.args_count != len(items):\n        if command.args.args_count == 0:\n            raise SystemExit(f'Unknown extra argument(s) supplied to {command.name}')\n        raise SystemExit(f'Must specify exactly {command.args.args_count} argument(s) for {command.name}')\n    return opts, items\n\n\ndef display_subcommand_help(func: RemoteCommand) -> None:\n    with suppress(SystemExit):\n        parse_args(['--help'], (func.options_spec or '\\n').format, func.args.spec, func.desc, func.name)\n\n\ndef command_for_name(cmd_name: str) -> RemoteCommand:\n    from importlib import import_module\n\n    cmd_name = cmd_name.replace('-', '_')\n    try:\n        m = import_module(f'kitty.rc.{cmd_name}')\n    except ImportError:\n        raise KeyError(f'Unknown kitty remote control command: {cmd_name}')\n    return cast(RemoteCommand, getattr(m, cmd_name))","sourceCodeStart":434,"sourceCodeEnd":470,"githubUrl":"https://github.com/kovidgoyal/kitty/blob/6d5d0c440603ad9bdf6dcd599f73f6dde21acb44/kitty/rc/base.py#L434-L470","documentation":"SystemExit raised while parsing a kitty remote-control subcommand's CLI when the command accepts zero positional arguments but one or more were supplied. parse_subcommand_cli compares command.args.args_count (0) against the number of leftover items after option parsing and aborts with this message.","triggerScenarios":"Running e.g. 'kitten @ close-window extra-arg' or 'kitten @ set-tab-title foo' style commands that take no positional args with trailing arguments; also triggered by unquoted arguments that the shell splits.","commonSituations":"Copy-pasting command lines with leftover placeholders, passing a value that should be an option (--match) as a positional, or shell expansion adding extra words.","solutions":["Remove the extra positional argument(s)","Move the value to its proper option flag, e.g. --match or --title, per the command's --help","Quote multi-word values so the shell doesn't split them into extra positionals"],"exampleFix":"# before\nkitten @ close-window all\n\n# after\nkitten @ close-window --match state=recent","handlingStrategy":"validation","validationCode":"# zero-arg commands: strip positionals before invoking\nzero_arg = {'close-window', 'close-tab', 'detach-window'}\nif cmd in zero_arg:\n    positionals = []\nrun = ['kitten', '@', cmd, *options, *positionals]","typeGuard":"def takes_positionals(cmd: str) -> bool:\n    return cmd not in {'close-window', 'close-tab', 'detach-window', 'load-config'}  # maintain per your command set","tryCatchPattern":"res = subprocess.run(cmd, capture_output=True, text=True)\nif 'Unknown extra argument(s)' in res.stderr:\n    cmd = cmd[:3] + cmd[3:-1]  # drop trailing positional and retry once\n    res = subprocess.run(cmd, capture_output=True, text=True)","preventionTips":["Check '<cmd> --help' arity when scripting; assert len(positionals) == expected before exec","Quote shell variables so word-splitting never adds accidental positionals"],"tags":["kitty","remote-control","cli","argument-validation"],"backgroundTag":"unexpected-cli-argument","analyzedSha":"6d5d0c440603ad9bdf6dcd599f73f6dde21acb44","analyzedAt":"2026-08-27T14:20:20.142Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}