charmbracelet/crush · error
Crush was unable to fetch updated information from Hyper: %w
Error message
Crush was unable to fetch updated information from Hyper: %w
What it means
Thrown when the Hyper provider catalog syncer fails to refresh Hyper's endpoint and model list. Unlike catwalk, Hyper's endpoint and models live only in the catalog, so a failed refresh would sign a logged-in user out of Hyper; the error preserves the underlying cause instead of silently dropping the provider.
Source
Thrown at internal/config/provider.go:230
var refresher func(context.Context) error
if len(opts) > 0 {
refresher = opts[0]
}
hyperSyncer.Init(realHyperClient{
baseURL: hyper.BaseURL(),
resolveKey: func() string { return resolveHyperAPIKey(cfgSnapshot) },
refreshToken: refresher,
}, path, autoupdate)
// As above: keep whatever provider we were handed. The syncer
// already falls back to the cached or embedded copy, so an
// error here means "could not refresh", not "no Hyper". This
// matters more than for other providers because Hyper's
// endpoint and model list live in the catalog rather than in
// the user's config: dropping it signs a logged-in user out.
item, err := hyperSyncer.Get(ctx)
if err != nil {
hyperErr = fmt.Errorf("Crush was unable to fetch updated information from Hyper: %w", err) //nolint:staticcheck
}
hyperProvider = item
})
wg.Wait()
if hyperProvider.ID != "" {
providerList = append([]catwalk.Provider{hyperProvider}, slices.Collect(providers.Seq())...)
} else {
providerList = slices.Collect(providers.Seq())
}
providerErr = errors.Join(catwalkErr, hyperErr)
})
return providerList, providerErr
}
// UpdateProviderInList replaces a provider in the memoized provider list
// returned by Providers(). This is used after re-fetching a singleView on GitHub (pinned to 7944b8e522)
Solutions
- Check connectivity to Hyper's endpoint and retry.
- Fix proxy/firewall/DNS settings blocking the Hyper catalog host.
- Re-run `crush` once the network is available so the refresh succeeds.
- If persistent, check Hyper's service status or re-login via `crush login`.
Defensive patterns
Strategy: fallback
Validate before calling
// probe Hyper's catalog endpoint before starting
resp, err := http.Get(hyperCatalogURL)
if err != nil || resp.StatusCode != 200 { /* warn user */ } Try / catch
item, err := hyperSyncer.Get(ctx)
if err != nil {
log.Warn(err) // keep previous hyperProvider to avoid logout
} Prevention
- Keep a previously stored Hyper provider so a failed refresh does not sign you out
- Monitor connectivity/proxy settings on machines using Hyper
- Retry refresh on next startup rather than treating it as fatal
When it happens
Trigger: hyperSyncer.Get(ctx) returns an error during Init/provider refresh: network failure, Hyper catalog endpoint unreachable, invalid response, or authentication failure while fetching the catalog.
Common situations: User is logged into Hyper and the machine goes offline or behind a blocking proxy; Hyper's catalog service is temporarily down; DNS/TLS problems.
Related errors
- failed to fetch provider from Hyper: %w
- empty providers list from catwalk
- failed to fetch providers from Catwalk: %w
- Crush was unable to fetch an updated list of providers from
- failed to refetch Hyper provider: %w
AI-assisted analysis of charmbracelet/crush@7944b8e522 (2026-08-29).
Data as JSON: /api/errors/95934aae0fe94fb2.
Report an issue: GitHub.