Hmbown/CodeWhale · error
selected Fleet ' ' operator provider ' ' is unavailable
Error message
selected Fleet '{}' operator provider '{}' is unavailable: {} What it means
Thrown when the selected Fleet's operator route names a provider that `resolve_provider_pin_identity` cannot resolve in the current configuration. The fleet expects a provider that is not configured (no matching provider entry/credentials), so the operator route cannot be pinned. Provider and model ids are sanitized via `SafeLabel` before inclusion in the message.
Solutions
- Add or restore the named provider (and its credentials) to the active config.
- Edit the fleet's operator route to reference an existing provider id.
- Run /fleet and re-select a fleet whose operator provider matches your config.
- Check for provider-id typos or renamed ids after a config migration.
Defensive patterns
Strategy: validation
Validate before calling
// verify the operator provider exists in config before selecting the fleet let provider_ok = config.providers.iter().any(|p| p.id == fleet.operator.provider);
Prevention
- Keep provider ids and credentials present in every config profile you use.
- Update fleet definitions whenever you rename or remove a provider.
- Prefer provider ids from the config catalog rather than free-typed strings.
When it happens
Trigger: A turn starts with a selected Fleet whose `operator.provider` id has no matching provider in the active config, or whose identity resolution fails (e.g. missing API key entry for that provider).
Common situations: Renaming or removing a provider in config while a fleet still pins the old id; switching machines/config profiles without the provider's credentials; a provider id typo in the fleet definition.
Related errors
- selected Fleet ' ' operator route / is invalid
- agent profile path is not a directory
- agent profile provider cannot be empty
- agent profile provider must be a simple provider id
- agent profile tools.posture= would widen permissions; use…
AI-assisted analysis of Hmbown/CodeWhale@73e0f67d83 (2026-09-22).
Data as JSON: /api/errors/1d3a9570d4297946.
Report an issue: GitHub.
Appendix: source
Thrown at crates/tui/src/lib.rs:8334
})?;
let Some(operator) = fleet.operator.as_ref() else {
return Ok(false);
};
let provider_id = operator.provider.trim();
let model_id = operator.model.trim();
if provider_id.is_empty() || model_id.is_empty() {
bail!(
"selected Fleet '{}' has an incomplete operator route; provider and model must both be non-empty",
fleet_name
);
}
let safe_provider_id = crate::safe_label::SafeLabel::identifier(provider_id);
let safe_model_id = crate::safe_label::SafeLabel::catalog_model(model_id);
let identity = config
.resolve_provider_pin_identity(provider_id)
.map_err(|error| {
anyhow!(
"selected Fleet '{}' operator provider '{}' is unavailable: {}",
fleet_name,
safe_provider_id,
crate::safe_label::safe_error_text(&error)
)
})?;
let resolved =
crate::route_runtime::resolve_runtime_route_for_identity(config, &identity, Some(model_id))
.map_err(|error| {
anyhow!(
"selected Fleet '{}' operator route {}/{} is invalid: {}",
fleet_name,
safe_provider_id,
safe_model_id,
crate::safe_label::safe_error_text(&error)
)
})?;
let mut selected_config = *resolved.config;View on GitHub (pinned to 73e0f67d83)