BloopAI/vibe-kanban · warning

No cleanup script configured for this project

Error message

No cleanup script configured for this project

What it means

Thrown by the RunCleanupScript action when workspacesApi.runCleanupScript returns success:false with error.type === 'no_script_configured'. The backend has no cleanup script registered for the project, so the request is rejected before any process starts.

Source

Thrown at packages/web-core/src/shared/actions/index.ts:1189

        }
        throw new Error('Failed to run setup script');
      }
    },
  },

  RunCleanupScript: {
    id: 'run-cleanup-script',
    label: 'Run Cleanup Script',
    icon: TerminalIcon,
    shortcut: 'R C',
    requiresTarget: ActionTargetType.WORKSPACE,
    isVisible: (ctx) => ctx.hasWorkspace,
    isEnabled: (ctx) => !ctx.isAttemptRunning,
    execute: async (_ctx, workspaceId) => {
      const result = await workspacesApi.runCleanupScript(workspaceId);
      if (!result.success) {
        if (result.error?.type === 'no_script_configured') {
          throw new Error('No cleanup script configured for this project');
        }
        if (result.error?.type === 'process_already_running') {
          throw new Error('Cannot run script while another process is running');
        }
        throw new Error('Failed to run cleanup script');
      }
    },
  },

  RunArchiveScript: {
    id: 'run-archive-script',
    label: 'Run Archive Script',
    icon: TerminalIcon,
    shortcut: 'R A',
    requiresTarget: ActionTargetType.WORKSPACE,
    isVisible: (ctx) => ctx.hasWorkspace,
    isEnabled: (ctx) => !ctx.isAttemptRunning,
    execute: async (_ctx, workspaceId) => {

View on GitHub (pinned to 4deb7eca8f)

Solutions

  1. Define a cleanup script in the project configuration if cleanup automation is desired.
  2. Hide/disable the RunCleanupScript action when no cleanup script is configured.
  3. Confirm the correct project is selected — script configuration is per-project.
  4. If the script was just added, refresh the project data before invoking the action.

Example fix

// before
isVisible: (ctx) => ctx.hasWorkspace,
// after
isVisible: (ctx) => ctx.hasWorkspace && ctx.hasCleanupScript,
Defensive patterns

Strategy: validation

Validate before calling

// before running
const ctx = getWorkspaceContext(workspaceId);
if (!ctx.hasWorkspace) return;
if (!ctx.project.cleanupScript) {
  toast.info('No cleanup script configured for this project');
  return;
}
await workspacesApi.runCleanupScript(workspaceId);

Type guard

function isNoScriptError(result: RunScriptResult): boolean {
  return result.success === false && result.error?.type === 'no_script_configured';
}

Try / catch

try {
  const result = await workspacesApi.runCleanupScript(workspaceId);
  if (!result.success && result.error?.type === 'no_script_configured') {
    toast.info('Add a cleanup script in project settings first.');
    return;
  }
  if (!result.success) throw new Error(result.error?.message ?? 'Failed to run cleanup script');
} catch (err) {
  toast.error(String(err));
}

Prevention

When it happens

Trigger: Executing RunCleanupScript on a workspace whose project defines no cleanup script (cleanup_script null/empty), producing the structured { success: false, error: { type: 'no_script_configured' } } response.

Common situations: Projects that only define a setup script, users assuming a default cleanup script exists, or project configs migrated from versions before cleanup scripts were introduced.

Related errors


AI-assisted analysis of BloopAI/vibe-kanban@4deb7eca8f (2026-08-29). Data as JSON: /api/errors/4a082c80ee24fc35. Report an issue: GitHub.