plandex-ai/plandex · warning · http
Built-in local model pack %s can't be used on Plandex Cloud
Error message
Built-in local model pack %s can't be used on Plandex Cloud
What it means
On Plandex Cloud (IS_CLOUD env var set), built-in model packs that rely on a local provider are rejected with HTTP 422, because local providers (e.g. Ollama) cannot be reached from the cloud service. The pack name is interpolated into the message.
Source
Thrown at app/server/handlers/settings.go:120
if err != nil {
log.Println("Error decoding request body: ", err)
http.Error(w, "Error decoding request body", http.StatusInternalServerError)
return
}
if req.ModelPackName == "" && req.ModelPack == nil {
log.Println("No model pack name or model pack provided")
http.Error(w, "No model pack name or model pack provided", http.StatusBadRequest)
return
}
if req.ModelPackName != "" {
if mp, builtIn := shared.BuiltInModelPacksByName[req.ModelPackName]; builtIn {
if os.Getenv("IS_CLOUD") != "" && mp.LocalProvider != "" {
msg := fmt.Sprintf("Built-in local model pack %s can't be used on Plandex Cloud", req.ModelPackName)
log.Println(msg)
http.Error(w, msg, http.StatusUnprocessableEntity)
return
}
}
}
if req.ModelPack != nil {
if req.ModelPack.LocalProvider != "" {
msg := fmt.Sprintf("Local model pack %s can't be used on Plandex Cloud", req.ModelPack.Name)
log.Println(msg)
http.Error(w, msg, http.StatusUnprocessableEntity)
return
}
ids := req.ModelPack.ToModelPackSchema().AllModelIds()
for _, id := range ids {
bm, builtIn := shared.BuiltInBaseModelsById[id]
if builtIn && os.Getenv("IS_CLOUD") != "" && bm.IsLocalOnly() {
msg := fmt.Sprintf("Built-in local model %s can't be used on Plandex Cloud", id)View on GitHub (pinned to e2d772072e)
Solutions
- Choose a cloud-compatible built-in model pack (no local provider)
- Run a self-hosted Plandex server if you need local-provider packs
- Remove/override the LocalProvider setting in a custom pack instead of using the built-in local pack
Example fix
// before
{"modelPackName": "ollama-local"}
// after
{"modelPackName": "plandex-strong"} Defensive patterns
Strategy: validation
Validate before calling
if os.Getenv("IS_CLOUD") != "" {
if mp, ok := shared.BuiltInModelPacksByName[packName]; ok && mp.LocalProvider != "" {
return fmt.Errorf("pack %q uses a local provider and is unavailable on cloud", packName)
}
} Try / catch
resp, err := client.UpdateSettings(ctx, req)
if err != nil {
var apiErr *APIError
if errors.As(err, &apiErr) && apiErr.StatusCode == 422 {
// pick a cloud-compatible pack
}
return err
} Prevention
- Filter pack choices by cloud compatibility when IS_CLOUD is set
- Never copy local-provider pack names from a self-hosted config to cloud
- Check LocalProvider before persisting pack preferences
When it happens
Trigger: UpdateSettingsHandler called with ModelPackName set to a built-in pack from shared.BuiltInModelPacksByName whose LocalProvider != "" while os.Getenv("IS_CLOUD") != "".
Common situations: Developer points a cloud-hosted Plandex deployment at a locally-configured pack (e.g. an Ollama pack) copied from a local setup; CLI sends a local pack name that worked against a self-hosted server.
Related errors
- Local model pack %s can't be used on Plandex Cloud
- Built-in local model %s can't be used on Plandex Cloud
- refresh failed - create request: %w
- error creating request: %w
- No api keys/credentials provided for models
AI-assisted analysis of plandex-ai/plandex@e2d772072e (2026-09-05).
Data as JSON: /api/errors/66734b9aac6c08c0.
Report an issue: GitHub.