paperclipai/paperclip · error
Job scheduling is not enabled
Error message
Job scheduling is not enabled
What it means
Returned as HTTP 501 by GET /api/plugins/:pluginId/jobs when the server was constructed without job scheduling dependencies (jobDeps is undefined). All job routes — list, runs, trigger — uniformly refuse with this error when the scheduler/job store is not wired into the API.
Source
Thrown at server/src/routes/plugins.ts:2544
// ===========================================================================
// Job scheduling routes
// ===========================================================================
/**
* GET /api/plugins/:pluginId/jobs
*
* List all scheduled jobs for a plugin.
*
* Query params:
* - `status` (optional): Filter by job status (`active`, `paused`, `failed`)
*
* Response: PluginJobRecord[]
* Errors: 404 if plugin not found
*/
router.get("/plugins/:pluginId/jobs", async (req, res) => {
assertBoardOrgAccess(req);
if (!jobDeps) {
res.status(501).json({ error: "Job scheduling is not enabled" });
return;
}
const { pluginId } = req.params;
const plugin = await resolvePlugin(registry, pluginId);
if (!plugin) {
res.status(404).json({ error: "Plugin not found" });
return;
}
const rawStatus = req.query.status as string | undefined;
const validStatuses = ["active", "paused", "failed"];
if (rawStatus !== undefined && !validStatuses.includes(rawStatus)) {
res.status(400).json({
error: `Invalid status '${rawStatus}'. Must be one of: ${validStatuses.join(", ")}`,
});
return;
}View on GitHub (pinned to a7e689b3c3)
Solutions
- Enable job scheduling (jobDeps wiring) in the server configuration for that deployment
- Confirm the deployment version supports scheduled plugin jobs
- Until enabled, hide the jobs UI affordance so users do not hit the 501
Defensive patterns
Strategy: fallback
Validate before calling
// One-time capability probe, cached
let jobsEnabled: boolean | null = null;
async function checkJobsEnabled() {
if (jobsEnabled === null) {
const r = await fetch(`/api/plugins/${pluginId}/jobs`);
jobsEnabled = r.status !== 501;
}
return jobsEnabled;
} Try / catch
try { return await listPluginJobs(pluginId); } catch (e) { if (e.status === 501) return { jobs: [], schedulingDisabled: true }; throw e; } Prevention
- Hide the jobs tab when the server reports 501 instead of surfacing an error
- Cache the capability result per server instance
- Do not retry 501 responses; they are deterministic
When it happens
Trigger: Calling GET /api/plugins/:pluginId/jobs (optionally ?status=...) on a deployment where the job scheduling subsystem was not enabled at boot.
Common situations: Minimal or older self-hosted builds without the scheduler; feature disabled by configuration; UI shows a jobs tab but the backing server lacks the job subsystem.
Related errors
- Plugin tool dispatch is not enabled
- Plugin UI is not available (status: ${plugin.status})
- Plugin does not declare a UI bundle
- Invalid file path
- devUiUrl must use http or https protocol
AI-assisted analysis of paperclipai/paperclip@a7e689b3c3 (2026-08-18).
Data as JSON: /api/errors/c98e0ed0bde18d2d.
Report an issue: GitHub.