BoundaryML/baml · error
usage: baml toolchain pin <canary|nightly|version|path> unex
Error message
usage: baml toolchain pin <canary|nightly|version|path>
unexpected arguments: {} What it means
`baml toolchain pin` accepts at most one extra argument: the selector. If additional arguments follow the selector (`args.len() > 2`), the `toolchain` function throws this usage error listing the unexpected arguments, because pin takes no flags or extras.
Source
Thrown at baml_language/crates/baml/src/main.rs:373
Some("install") => {
let selector = args
.get(1)
.ok_or_else(|| anyhow!("usage: baml toolchain install <canary|nightly|version>"))?;
let force = args.iter().any(|arg| arg == "--force");
install_toolchain(selector, false, manifest_base_url.as_deref(), force)
}
Some("use") => {
let selector = args.get(1).ok_or_else(|| {
anyhow!("usage: baml toolchain use <canary|nightly|version|path>")
})?;
use_toolchain(selector, manifest_base_url.as_deref())
}
Some("pin") => {
let selector = args.get(1).ok_or_else(|| {
anyhow!("usage: baml toolchain pin <canary|nightly|version|path>")
})?;
if args.len() > 2 {
return Err(anyhow!(
"usage: baml toolchain pin <canary|nightly|version|path>\nunexpected arguments: {}",
args[2..].join(" ")
));
}
pin_toolchain(selector, manifest_base_url.as_deref())
}
Some("update") => update_toolchain(manifest_base_url.as_deref()),
Some("status") => status_toolchain(manifest_base_url.as_deref()),
Some("list") => {
list_toolchains();
Ok(())
}
Some("uninstall") => {
let version = args
.get(1)
.ok_or_else(|| anyhow!("usage: baml toolchain uninstall <version>"))?;
uninstall_toolchain(version)
}View on GitHub (pinned to bd85ce9dee)
Solutions
- Remove the extra arguments: `baml toolchain pin <selector>` only.
- If you wanted an override flag, check `baml toolchain install --help` — `--force` belongs to install, not pin.
- Inspect the command line in the wrapping script for stray tokens.
Example fix
# before baml toolchain pin 0.210.0 --force # after baml toolchain pin 0.210.0
Defensive patterns
Strategy: validation
Validate before calling
args=(pin "$selector")
# pin accepts NO flags — never append anything after $selector
baml toolchain "${args[@]}" Type guard
function isBarePinInvocation(args: string[]): boolean {
return args.length === 2; // ['pin', selector] — nothing else allowed
} Try / catch
try:
subprocess.run(["baml", "toolchain", "pin", selector], check=True)
except subprocess.CalledProcessError as e:
if "unexpected arguments" in e.stderr.decode():
raise SystemExit("pin takes only a selector — move flags like --force to `install`") Prevention
- Only `toolchain install` supports `--force`; pin does not accept any flags.
- Construct pin commands programmatically with a fixed argument list.
- Strip unknown flags from wrapper scripts before delegating to baml.
When it happens
Trigger: Running `baml toolchain pin 0.210.0 --force` or `baml toolchain pin nightly extra-arg` — anything with more than one token after `pin`.
Common situations: Users assuming `pin` supports an `--force` flag (only `install` does), copy-pasting flags from other subcommands, or accidental extra tokens in shell scripts.
Understand the failure class
Background: "Unknown argument", "Invalid value", and "must be one of": invalid CLI argument errors explained — this error's family across 35 libraries.
Related errors
- usage: baml toolchain install <canary|nightly|version>
- usage: baml toolchain use <canary|nightly|version|path>
- usage: baml toolchain pin <canary|nightly|version|path>
- usage: baml toolchain uninstall <version>
- unknown toolchain command {other:?} {TOOLCHAIN_HELP}
AI-assisted analysis of BoundaryML/baml@bd85ce9dee (2026-09-12).
Data as JSON: /api/errors/27280edee1d620c3.
Report an issue: GitHub.