+ {/* Title row */}
+
+ setName(e.target.value)}
+ placeholder="Automation title"
+ className="!border-0 !bg-transparent !px-0 !text-sm !font-medium !shadow-none !outline-none !ring-0 placeholder:text-muted-foreground/40 focus:!border-transparent focus:!outline-none focus:!ring-0 focus-visible:!border-transparent focus-visible:!outline-none focus-visible:!ring-0 focus-visible:!ring-offset-0"
+ />
+
+
+ {/* Prompt textarea */}
+
+
+
+ {error && (
+
+ )}
+
+ {/* Bottom toolbar */}
+
+ {/* Config row — flat pills, hover only */}
+
+ {/* Agent select — borderless to match flat row */}
+
setAgentId(id)}
+ className="w-auto [&_button]:!h-7 [&_button]:!min-h-7 [&_button]:!w-auto [&_button]:!justify-center [&_button]:!gap-1.5 [&_button]:!rounded-md [&_button]:!border-0 [&_button]:!bg-transparent [&_button]:!px-2 [&_button]:!py-0 [&_button]:!text-xs [&_button]:!text-muted-foreground [&_button]:hover:!bg-muted/60 [&_button_span]:!flex-none [&_button_span]:!text-center"
+ />
+
+
+
+ {/* Project dropdown */}
+
+
+ {hasGithub ? (
+
+ ) : (
+
+ )}
+
+ {selectedProject?.name ?? 'Select project'}
+
+
+
+ {projects.map((p) => {
+ const pGh = p.githubInfo?.connected && p.githubInfo?.repository;
+ return (
+ setProjectId(p.id)}
+ className="text-xs"
+ >
+ {pGh ? (
+
+ ) : (
+
+ )}
+ {p.name}
+ {projectId === p.id && }
+
+ );
+ })}
+
+
+
+
+
+ {/* When pill — single fixed-width pill, no shift */}
+
+
+
+
+ {mode === 'trigger' ? : }
+
+ {mode === 'trigger' ? formatTriggerLabel(triggerType) : schedulePreview}
+
+
+
+
+
+ {/* Mode swoosh toggle */}
+
+
+ {(['schedule', 'trigger'] as const).map((m) => {
+ const active = mode === m;
+ return (
+
+ );
+ })}
+
+
+ {mode === 'trigger' && (
+ <>
+
+
+ {TRIGGER_TYPES.map((t) => {
+ const connected = integrationStatuses[t.integration];
+ const active = triggerType === t.value;
+ return (
+
+ );
+ })}
+
+
+
+ {(!integrationStatuses[TRIGGER_INTEGRATION_MAP[triggerType]] ||
+ triggerType === 'github_pr' ||
+ triggerType === 'github_issue' ||
+ triggerType === 'gitlab_issue' ||
+ triggerType === 'gitlab_mr' ||
+ triggerType === 'forgejo_issue') && (
+
+ )}
+ >
+ )}
+ {mode === 'schedule' && (
+
+ )}
+
+
+
+
+
+ {/* Worktree toggle — inline on wide, in overflow on narrow */}
+
+
+ {/* Overflow menu (narrow only) */}
+
+
+
+
+
+ {
+ userTouchedWorktreeRef.current = true;
+ setUseWorktree(!useWorktree);
+ }}
+ className="text-xs"
+ >
+ {useWorktree ? (
+
+ ) : (
+
+ )}
+ Use worktree
+ {useWorktree && }
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default AutomationInlineCreate;
diff --git a/src/renderer/components/automations/AutomationRow.tsx b/src/renderer/components/automations/AutomationRow.tsx
new file mode 100644
index 000000000..a1c3f6cb2
--- /dev/null
+++ b/src/renderer/components/automations/AutomationRow.tsx
@@ -0,0 +1,241 @@
+import {
+ Bug,
+ CircleDot,
+ Clock,
+ GitPullRequest,
+ Pause,
+ Pencil,
+ Play,
+ Trash2,
+ Zap,
+} from 'lucide-react';
+import React from 'react';
+import type { Automation } from '@shared/automations/types';
+import { INTEGRATION_LABELS, type IntegrationStatusMap } from '@shared/integrations/types';
+import forgejoSvg from '../../../assets/images/Forgejo.svg?raw';
+import githubPng from '../../../assets/images/github.png';
+import gitlabSvg from '../../../assets/images/GitLab.svg?raw';
+import jiraSvg from '../../../assets/images/Jira.svg?raw';
+import linearSvg from '../../../assets/images/Linear.svg?raw';
+import plainSvg from '../../../assets/images/Plain.svg?raw';
+import sentrySvg from '../../../assets/images/Sentry.svg?raw';
+import { agentConfig } from '../../lib/agentConfig';
+import type { Agent } from '../../types';
+import type { Project } from '../../types/app';
+import AgentLogo from '../AgentLogo';
+import { Button } from '../ui/button';
+import { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip';
+import {
+ formatRelativeTime,
+ formatScheduleLabel,
+ formatTriggerLabel,
+ TRIGGER_INTEGRATION_MAP,
+} from './utils';
+
+interface AutomationRowProps {
+ automation: Automation;
+ projects: Project[];
+ integrationStatuses?: IntegrationStatusMap;
+ onEdit: (automation: Automation) => void;
+ onToggle: (id: string) => void;
+ onDelete: (id: string) => void;
+ onTriggerNow: (id: string) => void;
+}
+
+function IntegrationBadge({ integration }: { integration: string }): React.ReactNode {
+ const wrapper =
+ 'pointer-events-none absolute -bottom-1 -right-1 flex h-3 w-3 items-center justify-center rounded-[3px] bg-background ring-1 ring-border';
+ if (integration === 'github') {
+ return (
+