{"record":{"id":"928a3fe5159187e8","repo":"pbakaus/impeccable","slug":"unknown-skills-command-other","errorCode":null,"errorMessage":"Unknown skills command: {other}\n","messagePattern":"Unknown skills command: (.+?)\n","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/detect/src/skills.rs","lineNumber":18,"sourceCode":"//! `impeccable help|install|link|update|check` and the legacy\n//! `impeccable skills <verb>` namespace (`cli/bin/commands/skills.mjs`).\n//!\n//! Only the dispatch surface is ported for now: the contract's exact\n//! unknown-command text, and a clear not-implemented message for the verbs\n//! that need the network or a bundle (help fetches the command list from\n//! impeccable.style; install/update/link/check read or download bundles).\n\nuse impeccable_common::Io;\n\n/// JS: skills.mjs#run\npub fn run(args: &[String], io: &mut Io) -> i32 {\n    let sub = args.first().map(String::as_str).unwrap_or(\"\");\n    match sub {\n        \"\" | \"help\" | \"--help\" | \"-h\" => not_implemented(\"help\", io),\n        \"install\" | \"link\" | \"update\" | \"check\" => not_implemented(sub, io),\n        other => {\n            io.err(&format!(\"Unknown skills command: {other}\\n\"));\n            io.err(\"Run 'impeccable --help' for available commands.\\n\");\n            1\n        }\n    }\n}\n\nfn not_implemented(verb: &str, io: &mut Io) -> i32 {\n    io.err(&format!(\n        \"impeccable {verb}: not implemented yet in this build. Use `npx impeccable {verb}` (the Node CLI) for now.\\n\"\n    ));\n    1\n}\n","sourceCodeStart":1,"sourceCodeEnd":31,"githubUrl":"https://github.com/pbakaus/impeccable/blob/2bc2879276c1f321a53c4ca99d3371e411329b52/crates/detect/src/skills.rs#L1-L31","documentation":"The `impeccable skills` subcommand only accepts no argument, help/--help/-h, or the stub verbs install/link/update/check (which print a not-implemented notice). Any other first argument falls into the catch-all arm, which prints \"Unknown skills command: <arg>\" plus a pointer to `impeccable --help`, and exits 1.","triggerScenarios":"Running `impeccable skills <anything>` where <anything> is not install, link, update, check, help, --help, or -h — e.g. `impeccable skills list`, `impeccable skills uninstall`, or a stray flag like `--verbose`.","commonSituations":"Assuming the skills subcommand has a full surface (list/remove) when only install/link/update/check stubs exist; passing flags intended for the top-level command after `skills`; typo'd subcommand names in scripts.","solutions":["Run `impeccable --help` to see the actual top-level command surface","Use only install, link, update, or check with `impeccable skills` — other verbs are not implemented in this build","Use `npx impeccable <verb>` (Node CLI) for skills operations not yet ported to this binary"],"exampleFix":"// before\n$ impeccable skills list\nUnknown skills command: list\n\n// after\n$ impeccable skills check","handlingStrategy":"validation","validationCode":"const SKILLS_VERBS = ['install','link','update','check','help','--help','-h'];\nif (sub && !SKILLS_VERBS.includes(sub)) {\n  throw new Error(`unknown skills command: ${sub}`);\n}","typeGuard":null,"tryCatchPattern":"const res = spawnSync('impeccable', ['skills', sub]);\nif (res.status !== 0 && res.stderr.toString().startsWith('Unknown skills command')) {\n  console.error('unsupported skills verb — use install/link/update/check');\n}","preventionTips":["Only use install/link/update/check with `impeccable skills` in this build","Run `impeccable --help` to confirm the command surface before scripting","Do not pass top-level flags after `skills`"],"tags":["cli","command-not-found"],"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"}