{"record":{"id":"318092671c76d5c8","repo":"pbakaus/impeccable","slug":"unknown-skills-command-other-318092","errorCode":null,"errorMessage":"Unknown skills command: {other}\n","messagePattern":"Unknown skills command: (.+?)\n","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/skills/src/commands.rs","lineNumber":59,"sourceCode":"}\n\npub fn run(args: &[String], io: &mut Io) -> R<()> {\n    let sub = args.first().map(String::as_str).unwrap_or(\"\");\n    let rest: Vec<String> = args.iter().skip(1).cloned().collect();\n    if let Some(help) = subcommand_help(sub) {\n        if rest.iter().any(|a| a == \"--help\" || a == \"-h\") {\n            out(io, help);\n            return Ok(());\n        }\n    }\n    match sub {\n        \"\" | \"help\" | \"--help\" | \"-h\" => show_help(io),\n        \"install\" => install(&rest, io),\n        \"link\" => link(&rest, io),\n        \"update\" => update(&rest, io),\n        \"check\" => check(io),\n        other => {\n            io.err(&format!(\"Unknown skills command: {other}\\n\"));\n            io.err(\"Run 'impeccable --help' for available commands.\\n\");\n            Err(Flow::Exit(1))\n        }\n    }\n}\n\nfn ctx(io: &Io) -> (Sys, Prompt) {\n    let sys = Sys::new(io.env.clone(), io.cwd.to_string_lossy().into_owned());\n    let prompt = Prompt::new(io);\n    (sys, prompt)\n}\n\nfn has_flag(flags: &[String], name: &str) -> bool {\n    flags.iter().any(|f| f == name)\n}\n\nfn out(io: &mut Io, line: &str) {\n    io.out(&format!(\"{line}\\n\"));","sourceCodeStart":41,"sourceCodeEnd":77,"githubUrl":"https://github.com/pbakaus/impeccable/blob/2bc2879276c1f321a53c4ca99d3371e411329b52/crates/skills/src/commands.rs#L41-L77","documentation":"The `skills` subcommand dispatcher (`run`) matches the first argument against known verbs (install, link, update, check, help). Any other value falls into the catch-all arm, prints this message plus a pointer to `impeccable --help`, and exits with code 1. It is pure CLI argument validation.","triggerScenarios":"Running `impeccable skills <word>` where <word> is not one of install|link|update|check|help|--help|-h — e.g. typos like `instal`, `remove`, `uninstall`, or passing a flag in the subcommand position.","commonSituations":"Typo'd subcommand; muscle memory from other CLIs (`uninstall`, `add`); older docs referencing a renamed/removed skills verb; an empty-quoted argument `impeccable skills \"\"`.","solutions":["Run `impeccable skills help` (or `impeccable --help`) to list valid verbs.","Correct the typo (e.g. `install` not `instal`).","Use the closest supported verb: `install`, `link`, `update`, or `check`.","If a verb existed in an older version, check the changelog and use its replacement."],"exampleFix":"// before\nimpeccable skills instal --provider claude\n// after\nimpeccable skills install --provider claude\n","handlingStrategy":"validation","validationCode":"impeccable skills help   # enumerate valid verbs before scripting","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Check `impeccable skills help` for the exact verb list before scripting.","Watch for typos in CI scripts — the dispatcher exits 1 on unknown verbs.","Pin the CLI version in automation so renamed verbs don't break scripts."],"tags":["cli","unknown-command","skills","usage"],"backgroundTag":"command-not-found","analyzedSha":"2bc2879276c1f321a53c4ca99d3371e411329b52","analyzedAt":"2026-09-08T04:51:14.109Z","contentChangedAt":"2026-09-08T04:51:14.109Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}