charmbracelet/crush · warning
Crush was unable to fetch an updated list of providers from
Error message
Crush was unable to fetch an updated list of providers from %s. Consider setting CRUSH_DISABLE_PROVIDER_AUTO_UPDATE=1 to use the embedded providers bundled at the time of this Crush release. You can also update providers manually. For more info see crush update-providers --help. Cause: %w
What it means
This error is thrown when Crush fails to fetch an updated provider catalog from the catwalk endpoint (CATWALK_URL or the default URL) during provider sync. The syncer still returns the cached or embedded provider list, so Crush wraps the fetch error with actionable guidance instead of failing startup. It is a warning-style network error about refresh, not availability.
Source
Thrown at internal/config/provider.go:201
var hyperProvider catwalk.Provider
wg.Go(func() {
if customProvidersOnly {
return
}
catwalkURL := cmp.Or(os.Getenv("CATWALK_URL"), defaultCatwalkURL)
client := catwalk.NewWithURL(catwalkURL)
path := cachePathFor("providers")
catwalkSyncer.Init(client, path, autoupdate)
// A failure to refresh or cache the catalog is worth
// reporting, but the syncer still hands back the cached or
// embedded list. Dropping that would leave the user with no
// providers at all over a transient disk or network problem.
items, err := catwalkSyncer.Get(ctx)
if err != nil {
catwalkURL := fmt.Sprintf("%s/v2/providers", cmp.Or(os.Getenv("CATWALK_URL"), defaultCatwalkURL))
catwalkErr = fmt.Errorf("Crush was unable to fetch an updated list of providers from %s. Consider setting CRUSH_DISABLE_PROVIDER_AUTO_UPDATE=1 to use the embedded providers bundled at the time of this Crush release. You can also update providers manually. For more info see crush update-providers --help.\n\nCause: %w", catwalkURL, err) //nolint:staticcheck
}
providers.Append(items...)
})
wg.Go(func() {
if customProvidersOnly {
return
}
path := cachePathFor("hyper")
cfgSnapshot := cfg
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,View on GitHub (pinned to 7944b8e522)
Solutions
- Check network connectivity to the providers endpoint printed in the message (curl it manually).
- Set CRUSH_DISABLE_PROVIDER_AUTO_UPDATE=1 to use the provider list embedded in the Crush release.
- Run `crush update-providers` to refresh the catalog manually once connectivity is restored.
- Verify CATWALK_URL points to a valid v2 catalog host if you have customized it.
- Retry later if it is a transient server outage; cached providers are still usable.
Example fix
// before (CI fails on network) crush run ... // after (use bundled providers) export CRUSH_DISABLE_PROVIDER_AUTO_UPDATE=1 crush run ...
Defensive patterns
Strategy: fallback
Validate before calling
const url = (process.env.CATWALK_URL || 'https://api.catwalk.default') + '/v2/providers';
await fetch(url).then(r => { if (!r.ok) throw new Error('catwalk unreachable'); }); Try / catch
items, err := syncer.Get(ctx)
if err != nil {
log.Warn(err) // cached/embedded items still in `items`; continue
} Prevention
- Set CRUSH_DISABLE_PROVIDER_AUTO_UPDATE=1 in offline/CI environments
- Verify CATWALK_URL reachability before running Crush
- Use the cached catalog; only fail hard if it is also empty
When it happens
Trigger: catwalkSyncer.Get(ctx) returns an error during Init or provider refresh: the network is down, the catwalk server (default URL, overridable via CATWALK_URL) is unreachable, returns a non-2xx status, or TLS/DNS fails.
Common situations: Corporate firewalls or proxies blocking the catalog host; CATWALK_URL set to a typo'd or stale mirror; offline development; transient server outage.
Related errors
- empty providers list from catwalk
- failed to fetch providers from Catwalk: %w
- failed to fetch provider from Hyper: %w
- Crush was unable to fetch updated information from Hyper: %w
- lost connection to the crush server
AI-assisted analysis of charmbracelet/crush@7944b8e522 (2026-08-29).
Data as JSON: /api/errors/e3f17585c9baa538.
Report an issue: GitHub.