plandex-ai/plandex · warning · http

Local model pack %s can't be used on Plandex Cloud

Error message

Local model pack %s can't be used on Plandex Cloud

What it means

When the request supplies a custom ModelPack object with a non-empty LocalProvider while the server runs on Plandex Cloud, the handler rejects it with HTTP 422. Same rationale as built-in packs: custom local-provider packs cannot work in the cloud environment.

Source

Thrown at app/server/handlers/settings.go:130

		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)
				log.Println(msg)
				http.Error(w, msg, http.StatusUnprocessableEntity)
				return
			}
		}
	}

	ctx, cancel := context.WithCancel(r.Context())

	var commitMsg string

View on GitHub (pinned to e2d772072e)

Solutions

  1. Clear the LocalProvider field (set it to "") or use API-hosted providers in the pack before uploading
  2. Use only cloud-supported providers (OpenAI, Anthropic, etc.) in custom packs
  3. Run the pack against a self-hosted server if local providers are required

Example fix

// before
{name: "my-pack", localProvider: "ollama", ...}
// after
{name: "my-pack", localProvider: "", ...}
Defensive patterns

Strategy: validation

Validate before calling

if os.Getenv("IS_CLOUD") != "" && pack.LocalProvider != "" {
    return fmt.Errorf("custom pack %q uses a local provider and is unavailable on cloud", pack.Name)
}

Try / catch

resp, err := client.UpdateSettings(ctx, req)
if err != nil {
    var apiErr *APIError
    if errors.As(err, &apiErr) && apiErr.StatusCode == 422 {
        // strip LocalProvider or switch providers before resending
    }
    return err
}

Prevention

When it happens

Trigger: UpdateSettingsHandler called with req.ModelPack != nil, req.ModelPack.LocalProvider != "", and IS_CLOUD set on the server.

Common situations: User exports their local custom pack and uploads it unchanged to a cloud account; migration tooling copies local settings to cloud; template config includes localProvider by default.

Related errors


AI-assisted analysis of plandex-ai/plandex@e2d772072e (2026-09-05). Data as JSON: /api/errors/bb6a90af692be0b4. Report an issue: GitHub.