diff --git a/client/src/components/apps/tabs/AutomationTab.jsx b/client/src/components/apps/tabs/AutomationTab.jsx
index ac819a2066..6c015d3e25 100644
--- a/client/src/components/apps/tabs/AutomationTab.jsx
+++ b/client/src/components/apps/tabs/AutomationTab.jsx
@@ -1,13 +1,13 @@
import { useState, useEffect, useCallback } from 'react';
import { useNavigate } from 'react-router';
-import { RefreshCw, Play, PauseCircle, Settings, ChevronDown, ChevronRight, Sparkles } from 'lucide-react';
+import { RefreshCw, Play, PauseCircle, Settings, ChevronDown, ChevronRight, Sparkles, AlertTriangle } from 'lucide-react';
import toast from '../../ui/Toast';
import BrailleSpinner from '../../BrailleSpinner';
import CronInput from '../../CronInput';
import ToggleSwitch from '../../ToggleSwitch';
import AppProviderPin from '../../cos/AppProviderPin';
import * as api from '../../../services/api';
-import { AGENT_OPTIONS, hasProviderPin, toggleAppMetadataOverride, agentOptionButtonClass } from '../../cos/constants';
+import { AGENT_OPTIONS, hasProviderPin, providerPinDivergesFromSchedule, toggleAppMetadataOverride, agentOptionButtonClass } from '../../cos/constants';
import { isCronExpression, describeCron } from '../../../utils/cronHelpers';
import { PROVIDER_TYPES, providerDisplayName } from '../../../utils/providers';
import CustomTasksSection from './CustomTasksSection';
@@ -251,6 +251,12 @@ export default function AutomationTab({ appId, appName }) {
const effectiveProviderName = override.providerId
? providerDisplayName(providers, override.providerId)
: taskProviderName;
+ // Surfaced collapsed (not just inside Configure): an app-level pin
+ // silently wins over the Schedule pin at spawn (#4783), so a task
+ // schedule showing one provider while this app's override names a
+ // DIFFERENT one is exactly the "why did it run somewhere else"
+ // confusion a user hits with only the Schedule page open.
+ const providerDivergesFromSchedule = providerPinDivergesFromSchedule(override, globalConfig);
return (