paperclipai/paperclip · error
cloud-managed instances may only install plugins from the bu
Error message
cloud-managed instances may only install plugins from the bundled plugin catalog
What it means
403 policy guard on POST /plugins/install. Fires on cloud-managed instances for local-path installs whose canonicalized path is not within the bundled plugin catalog root — preventing arbitrary local installs even after path canonicalization.
Source
Thrown at server/src/routes/plugins.ts:1196
if (cloudManaged && !isLocalPath) {
res.status(403).json({
error:
"npm installs are disabled on cloud-managed instances; only plugins bundled with the application may be installed",
});
return;
}
// Canonicalize local install paths on every instance so traversal
// segments and symlinks cannot smuggle an aliased path past validation.
let canonicalLocalPath: string | undefined;
if (isLocalPath) {
const validated = await canonicalizeLocalPluginPath(trimmedPackage);
if (!validated.ok) {
res.status(400).json({ error: `Invalid localPath: ${validated.reason}` });
return;
}
if (cloudManaged && !(await isWithinBundledPluginRoot(validated.canonicalPath))) {
res.status(403).json({
error:
"cloud-managed instances may only install plugins from the bundled plugin catalog",
});
return;
}
canonicalLocalPath = validated.canonicalPath;
}
try {
const installOptions = canonicalLocalPath !== undefined
? { localPath: canonicalLocalPath }
: { packageName: trimmedPackage, version: version?.trim() };
const discovered = await loader.installPlugin(installOptions);
if (!discovered.manifest) {
res.status(500).json({ error: "Plugin installed but manifest is missing" });
return;View on GitHub (pinned to a7e689b3c3)
Solutions
- This is an authorization rule, not a bug: perform the action with an actor that satisfies the stated constraint (board user, the owning agent, or an in-scope resource).
- If access should be allowed, verify the actor's credentials/company scope and the resource's ownership before retrying.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at server/src/routes/plugins.ts:1180 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of paperclipai/paperclip@a7e689b3c3 (2026-08-18).
Data as JSON: /api/errors/1cda6f88ca81fdb0.
Report an issue: GitHub.