Hmbown/CodeWhale · error
` ` has no local runtime provider, so there is no local key…
Error message
`{provider}` has no local runtime provider, so there is no local key to copy. Use `--api-key-stdin` or the hidden prompt What it means
Thrown by the cloud `keys` set command when `--from-local` is passed but the provider catalog has no local runtime provider for the given provider id (`row.local_kind()` returns None). There is no locally-known key type to copy from, so the operation aborts and directs the user to supply the key directly via `--api-key-stdin` or the hidden prompt.
Solutions
- Drop `--from-local` and supply the key with `--api-key-stdin` or the hidden interactive prompt instead.
- Check the provider id with `validate_provider_id` / the provider catalog to confirm its `local_kind`.
- If the provider should have a local runtime, update the provider catalog mapping.
Example fix
// before codewhale cloud keys set --provider openai --from-local // after codewhale cloud keys set --provider openai --api-key-stdin < key.txt
Defensive patterns
Strategy: validation
Validate before calling
// Before --from-local, confirm the catalog row has a local kind
let row = catalog_row(&catalog, &provider)?;
if row.local_kind().is_none() { eprintln!("{} has no local runtime provider", provider); } Try / catch
match set_key_from_local(provider) {
Err(e) if e.to_string().contains("no local runtime provider") => {
// fall back to --api-key-stdin or prompt
}
other => other?,
} Prevention
- Check `provider_catalog` for `local_kind` before using --from-local
- Validate provider ids against the catalog
- Prefer explicit key input for cloud-only providers
When it happens
Trigger: Running something like `codewhale cloud keys set --provider <id> --from-local` where `<id>` resolves to a catalog row whose `local_kind()` is None (provider has no local runtime equivalent).
Common situations: Typo'd or unsupported provider id passed to `--provider`; provider is cloud-only with no local runtime counterpart; catalog updated and the provider's local runtime support was removed.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- API key contains invalid control characters
- API key id must be lowercase hex characters — the part…
- API key must be - UTF-8 bytes
- API key name must be 1
- empty API key provided
AI-assisted analysis of Hmbown/CodeWhale@73e0f67d83 (2026-09-22).
Data as JSON: /api/errors/1ce0ad094ee9a830.
Report an issue: GitHub.
Appendix: source
Thrown at crates/cli/src/cloud.rs:843
.filter(|value| !value.is_empty())
{
Some(reported) => format!("set ({reported})"),
None => "set".to_string(),
},
_ => "not set".to_string(),
};
writeln!(out, "{}: {status} — {}", row.id, row.display_label())?;
}
Ok(())
}
CloudKeysCommand::Set(set) => {
let provider = validate_provider_id(&set.provider)?;
let user = client.me()?;
let catalog = client.provider_catalog()?;
let row = catalog_row(&catalog, &provider)?;
let key = if set.from_local {
let kind = row.local_kind().ok_or_else(|| {
anyhow!(
"`{provider}` has no local runtime provider, so there is no local key to copy. Use `--api-key-stdin` or the hidden prompt"
)
})?;
resolve_local_key(config, provider_secrets, kind)?.ok_or_else(|| {
anyhow!(
"No local {} API key was found in config, the secret store, or the environment",
kind.as_str()
)
})?
} else if set.api_key_stdin {
key_reader(KeyReadMode::Stdin)?
} else {
key_reader(KeyReadMode::HiddenPrompt(provider.clone()))?
};
let key = key.trim().to_string();
validate_api_key(&key)?;
let label = validate_label(&set.label)?;
client.set_key(&provider, &key, &label)?;View on GitHub (pinned to 73e0f67d83)