aaif-goose/goose · error
Could not configure agent: missing provider
Error message
Could not configure agent: missing provider
What it means
Thrown by Agent::restore_provider_from_session when a session is resumed and no provider can be resolved. Goose resolves the provider as session.provider_name first, then falls back to the global config key GOOSE_PROVIDER; when both are absent the agent cannot construct a provider and session restore aborts. It is a configuration error, not a transient failure.
Source
Thrown at crates/goose/src/agents/agent.rs:3548
.model_config_for_session(session_id)
.await?
.with_thinking_effort(effort);
self.recreate_provider_for_session(session_id, &provider_name, model_config)
.await
}
/// Restore the provider from session data or fall back to global config
/// This is used when resuming a session to restore the provider state
/// Returns true if the session's provider was replaced with a fallback.
pub async fn restore_provider_from_session(&self, session: &Session) -> Result<bool> {
let config = Config::global();
let provider_name = session
.provider_name
.clone()
.or_else(|| config.get_goose_provider().ok())
.ok_or_else(|| anyhow!("Could not configure agent: missing provider"))?;
let mut model_config = match session.model_config.clone() {
Some(saved_config) => saved_config,
None => {
let model_name = config
.get_goose_model()
.ok()
.ok_or_else(|| anyhow!("Could not configure agent: missing model"))?;
crate::model_config::model_config_from_user_config(&provider_name, &model_name)
.map_err(|e| anyhow!("Could not configure agent: invalid model {}", e))?
}
};
// if the saved model is the ACP sentinel "current", only preserve this if the provider
// uses this sentinel to indicate it's an ACP provider that manages its model
if model_config.model_name == crate::acp::ACP_CURRENT_MODEL {
if let Ok(entry) = crate::providers::get_from_registry(&provider_name).await {
if entry.metadata().default_model != crate::acp::ACP_CURRENT_MODEL {View on GitHub (pinned to 3810898a74)
Solutions
- Run 'goose configure' (or 'export GOOSE_PROVIDER=<name>', e.g. openai) and resume the session again
- Verify the key exists: check ~/.config/goose/config.yaml or run 'goose config read' for GOOSE_PROVIDER
- If the session file predates provider persistence, start a new session instead of resuming
- For embedded usage, call Agent::update_provider explicitly before invoking restore_provider_from_session
Example fix
# before $ goose session resume Error: Could not configure agent: missing provider # after $ export GOOSE_PROVIDER=openai $ export GOOSE_MODEL=gpt-4o $ goose session resume
Defensive patterns
Strategy: validation
Validate before calling
// Rust — before resuming, ensure a provider is resolvable
let provider = session.provider_name.clone()
.or_else(|| Config::global().get_goose_provider().ok());
if provider.is_none() {
// set GOOSE_PROVIDER or call agent.update_provider(...) before restore
} Prevention
- Always run 'goose configure' once after install so GOOSE_PROVIDER and GOOSE_MODEL are persisted
- Export GOOSE_PROVIDER/GOOSE_MODEL in CI or service environments that resume sessions
- Treat sessions older than the current goose major version as suspect for provider metadata
When it happens
Trigger: Calling any resume path (goose session resume / --continue, desktop session restore, or Agent::restore_provider_from_session directly) with a session whose persisted metadata has no provider_name while GOOSE_PROVIDER is unset in ~/.config/goose/config.yaml and in the environment.
Common situations: Resuming sessions created by older goose versions that did not persist provider metadata; a fresh install where 'goose configure' was never run; config.yaml deleted or the GOOSE_PROVIDER key removed; launching the desktop app from a shell that lacks the exported env var.
Related errors
- Failed to create provider for OAuth: {}
- Could not configure agent: missing model
- Could not configure agent: invalid model {}
- Could not resolve default model: {}
- Could not create provider: provider '{}' not found
AI-assisted analysis of aaif-goose/goose@3810898a74 (2026-08-16).
Data as JSON: /api/errors/7f88e095c8e19559.
Report an issue: GitHub.