{"record":{"id":"a6dbdb044832f53b","repo":"BoundaryML/baml","slug":"usage-baml-toolchain-use-canary-nightly-version-path","errorCode":null,"errorMessage":"usage: baml toolchain use <canary|nightly|version|path>","messagePattern":"usage: baml toolchain use <canary\\|nightly\\|version\\|path>","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"baml_language/crates/baml/src/main.rs","lineNumber":364,"sourceCode":"}\n\nfn toolchain(args: Vec<String>) -> Result<()> {\n    let (args, manifest_base_url) = parse_manifest_base_url(args)?;\n    match args.first().map(String::as_str) {\n        Some(\"--help\" | \"-h\" | \"help\") | None => {\n            print!(\"{TOOLCHAIN_HELP}\");\n            Ok(())\n        }\n        Some(\"install\") => {\n            let selector = args\n                .get(1)\n                .ok_or_else(|| anyhow!(\"usage: baml toolchain install <canary|nightly|version>\"))?;\n            let force = args.iter().any(|arg| arg == \"--force\");\n            install_toolchain(selector, false, manifest_base_url.as_deref(), force)\n        }\n        Some(\"use\") => {\n            let selector = args.get(1).ok_or_else(|| {\n                anyhow!(\"usage: baml toolchain use <canary|nightly|version|path>\")\n            })?;\n            use_toolchain(selector, manifest_base_url.as_deref())\n        }\n        Some(\"pin\") => {\n            let selector = args.get(1).ok_or_else(|| {\n                anyhow!(\"usage: baml toolchain pin <canary|nightly|version|path>\")\n            })?;\n            if args.len() > 2 {\n                return Err(anyhow!(\n                    \"usage: baml toolchain pin <canary|nightly|version|path>\\nunexpected arguments: {}\",\n                    args[2..].join(\" \")\n                ));\n            }\n            pin_toolchain(selector, manifest_base_url.as_deref())\n        }\n        Some(\"update\") => update_toolchain(manifest_base_url.as_deref()),\n        Some(\"status\") => status_toolchain(manifest_base_url.as_deref()),\n        Some(\"list\") => {","sourceCodeStart":346,"sourceCodeEnd":382,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/baml_language/crates/baml/src/main.rs#L346-L382","documentation":"`baml toolchain use` requires a selector argument (`canary`, `nightly`, a version, or a local path). The `toolchain` function throws this usage error when `args.get(1)` is None, because there is no toolchain to switch to.","triggerScenarios":"Running `baml toolchain use` with no argument, or with only flags following the subcommand so the selector slot is empty.","commonSituations":"Scripts with an unset/empty version variable (`baml toolchain use $VERSION` with VERSION empty), or users forgetting that `use` accepts a path and passing the path in the wrong place.","solutions":["Pass a selector: `baml toolchain use canary`, `nightly`, a version, or a path to a local toolchain.","Run `baml toolchain list` to see installed toolchains you can select.","Quote shell variables to catch empty values early: `baml toolchain use \"$VERSION\"`."],"exampleFix":"# before\nVERSION=\"\"\nbaml toolchain use $VERSION\n\n# after\nVERSION=\"nightly\"\nbaml toolchain use \"$VERSION\"","handlingStrategy":"validation","validationCode":"selector=\"${SELECTOR:?SELECTOR must be set}\"\n[ -n \"$selector\" ] || { echo \"empty selector\" >&2; exit 1; }\nbaml toolchain use \"$selector\"","typeGuard":"function isValidUseSelector(s: string): boolean {\n  return s === \"canary\" || s === \"nightly\" || /^\\d+\\.\\d+\\.\\d+$/.test(s) || s.startsWith(\"/\");\n}","tryCatchPattern":"try:\n    subprocess.run([\"baml\", \"toolchain\", \"use\", selector], check=True)\nexcept subprocess.CalledProcessError as e:\n    if \"usage: baml toolchain use\" in e.stderr.decode():\n        raise SystemExit(\"Provide canary|nightly|version|path to `toolchain use`\")","preventionTips":["Quote interpolated variables so empty values fail fast and visibly.","Run `baml toolchain list` first to confirm a selectable target exists.","For paths, use absolute paths to avoid ambiguity."],"tags":["cli","usage","missing-argument","toolchain"],"backgroundTag":"missing-cli-argument","analyzedSha":"bd85ce9dee1463ff04d27efd20531013a4ff46c1","analyzedAt":"2026-09-12T03:38:25.718Z","contentChangedAt":"2026-09-12T03:38:25.718Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}